plantuml-diagramming について
テキスト要件から PlantUML の図を作成する Agent 向けスキルです。UML と非 UML の図について、種類の選択、構文、スタイル、出力形式を案内します。
主な機能
- 01意図に応じた図の種類選択
- 02PlantUML 構文の生成と確認
- 03レイアウト、別名、スタイルの案内
- 04puml コードブロックでの出力指定
- 05描画エラーの診断
活用シーン
- 01API 呼び出しをシーケンス図にする
- 02業務手順をアクティビティ図にする
- 03クラス構造、状態、コンポーネントを示す
- 04テキストから UI ワイヤーフレームを作る
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ beecode-rs/ claude-skills --skill plantuml-diagrammingインストール後、Claude Code で/plantuml-diagrammingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
activity-diagram.mdclass-diagram.mdcomponent-diagram.mdflowchart.mdLICENSE.txtobject-diagram.mdsequence-diagram.mdstate-diagram.mduse-case-diagram.md詳細
PlantUML 図表作成エキスパート
目的
UML 図や非 UML 図の作成に使用する PlantUML 図表作成言語のエキスパートです。PlantUML 構文を使って、テキストによる説明を視覚的な表現に変換します。さまざまな種類の図の作成に必要な構造、構文、スタイル設定、ベストプラクティスを理解しています。
使用するタイミング
ユーザーが以下に言及した場合、自動的に呼び出します。
- PlantUML - 「plantuml」、「plantuml diagram」、「plantuml code」
- UML 図 - 「uml diagram」、「use case diagram」、「sequence diagram」、「class diagram」
- フローチャート - 「flowchart」、「flow chart」、「activity diagram」、「workflow diagram」
- 状態/プロセス - 「state diagram」、「state machine」、「process flow」、「component diagram」
- テキストからの視覚化 - 「create diagram from text」、「visualize this」、「draw a diagram」、「make a uml」
- ワイヤーフレーム - 「wireframe」、「ui mockup」、「screen mockup」
プロセス
1. リクエストを分析する
ユーザーの意図に基づいて、最適な図の種類を判断します。
| ユーザーのリクエスト内容 | 使用する図の種類 |
|---|---|
| 時系列、API 呼び出し、時系列イベント | シーケンス図 |
| データ構造、継承、関係 | クラス図 |
| ビジネスの手順、ワークフロー、判断 | アクティビティ図 |
| システム機能、ユーザーとのやり取り | ユースケース図 |
| オブジェクトのライフサイクル、状態、遷移 | 状態図 |
| システムコンポーネント、依存関係 | コンポーネント図 |
| インスタンス、スナップショット | オブジェクト図 |
| 単純なプロセス、非 UML のフロー | フローチャート |
2. コンテキストを収集する
ツールを使って情報を収集します。
- 既存のドキュメントや要件を読む
- コードベース内の関連する図を検索する
- 必要に応じてデータ構造や API 定義を探す
3. PlantUML コードを生成する
以下の基本指針に必ず従ってください。
- カプセル化: PlantUML コードを
@startumlタグと@endumlタグで囲みます - 構文の正確性: 括弧の閉じ忘れ、矢印の種類、終了キーワード(
end、endif、endwhile)が正しいことを確認します - 読みやすさ: クラス名や参加者名が長い場合は、エイリアス(
alias X as Name)を使います - レイアウト: デフォルトの配置が煩雑になる場合は、方向のヒント(
left to right direction、top to bottom direction)を使います
4. 出力を提示する
必須:PlantUML はコードブロック形式で出力
PlantUML コードはすべて、言語識別子に puml を指定した Markdown コードブロックで囲む必要があります。
@startuml
' your diagram code here
@enduml
必須の書式ルール:
- コードブロックは必ず
```pumlで始めてください(言語識別子なしの```のみは使用しないでください) - PlantUML コードに単独の
```を使用しないでください。必ずpumlを指定してください - コードブロックで囲まずに
@startuml/@endumlをそのまま出力しないでください - 図の構造について簡潔に説明を含めてください
- レンダリング方法(PlantUML サーバー、VS Code 拡張機能など)を提案してください
図の種類のリファレンス
| 図 | 目的 | リファレンス |
|---|---|---|
| ユースケース図 | システムの機能とアクター、ユーザーと機能の間のインタラクション | use-case-diagram.md |
| シーケンス図 | 時間の経過に伴うオブジェクト間のインタラクション、時系列でのメッセージフロー | sequence-diagram.md |
| クラス図 | システムの静的構造、クラス、インターフェース、および関係 | class-diagram.md |
| アクティビティ図 | ワークフローまたはビジネスプロセス、アクションや判断を通じた制御フロー | activity-diagram.md |
| コンポーネント図 | コンポーネント、インターフェース、ノード間の構成と依存関係 | component-diagram.md |
| 状態図 | オブジェクトのライフサイクル、イベントによって引き起こされる状態と遷移 | state-diagram.md |
| オブジェクト図 | 特定の時点におけるクラスのインスタンスとその関係 | object-diagram.md |
| フローチャート | シンプルなプロセスフロー、アクティビティ図に代わる非 UML の選択肢 | flowchart.md |
図の種類の選び方
複数の図の種類に当てはまる可能性があるリクエストには、次の判断ガイドを使用してください。
| シナリオ | 推奨する図 | 理由 |
|---|---|---|
| API 呼び出し、メッセージフロー | シーケンス図 | メッセージの順序と参加者を明確に示します |
| 判断を伴うビジネスプロセス | アクティビティ図 | 分岐ロジックやワークフローに適しています |
| オブジェクトの状態が時間とともに変化する | 状態図 | ライフサイクルと遷移に焦点を当てます |
| 静的なデータ構造 | クラス図 | 型、フィールド、関係を示します |
| 特定のインスタンスのスナップショット | オブジェクト図 | 実際の値を示す必要がある場合に適しています |
| システムコンポーネントとデプロイメント | コンポーネント図 | インフラストラクチャと依存関係を示します |
| システムとのユーザーインタラクション | ユースケース図 | ユーザーの視点から機能要件を示します |
| シンプルなステップ形式のプロセス | フローチャート | 軽量な非 UML の選択肢です |
| スイムレーンを伴う複雑なワークフロー | アクティビティ図 | パーティションや役割に対応しています |
よくある曖昧さの解決方法
「ログインプロセスの仕組みを見せてください」
- サービス間の API 呼び出しを示す → シーケンス図
- ビジネスロジックと判断を示す → アクティビティ図
「Order エンティティを図にしてください」
- クラス構造を示す → クラス図
- 特定の注文インスタンスを示す → オブジェクト図
- 注文のライフサイクル(作成 → 支払い済み → 発送済み)を示す → 状態図
「マイクロサービスを可視化してください」
- 実行時の依存関係を示す → コンポーネント図
- 通信パターンを示す → シーケンス図
例
例 1:基本的なシーケンス図
ユーザーのリクエスト:「ユーザー、フロントエンド、バックエンド間のログインフローを示してください」
**プロセス:**参加者(User、Frontend、Backend)とメッセージフロー(リクエスト → 検証 → 認証 → 応答)を特定します
出力:
@startuml
actor User
participant Frontend
participant Backend
User -> Frontend : Enter credentials
Frontend -> Backend : POST /login
Backend -> Backend : Validate credentials
Backend --> Frontend : JWT token
Frontend --> User : Redirect to dashboard
@enduml
例 2:関係を含むクラス図
ユーザーのリクエスト:「User、Order、Product を含む EC システムのクラス図を作成してください」
**プロセス:**クラスとその関係(User が Order を作成し、Order が Product を含む)を特定します
出力:
@startuml
class User {
- id: UUID
- name: String
- email: String
+ login()
+ logout()
}
class Order {
- id: UUID
- status: OrderStatus
- total: Decimal
+ addItem()
+ checkout()
}
class Product {
- id: UUID
- name: String
- price: Decimal
+ updateStock()
}
User "1" --> "*" Order : places
Order "*" --> "*" Product : contains
@enduml
例 3:ワークフローのアクティビティ図
ユーザーのリクエスト:「ドキュメントレビューの承認ワークフローを描いてください」
**プロセス:**判断ポイントとアクションを整理します
出力:
@startuml
start
:Submit Document;
if (Manager Approved?) then (yes)
:Forward to Director;
if (Director Approved?) then (yes)
:Document Finalized;
stop
else (no)
:Return with Comments;
:Revise Document;
endif
else (no)
:Return with Feedback;
:Revise Document;
endif
:Resubmit;
@enduml
スタイルとテーマ
Skinparam
全体の外観をカスタマイズします。
skinparam monochrome true
skinparam style strictuml
skinparam classAttributeIconSize 0
skinparam backgroundColor #EEEBDC
テーマ
組み込みテーマをすぐに適用します。
!theme spacelab
!theme cerulean
!theme superhero
!theme minty
色とフォント
A --> B : Label #FF0000
skinparam defaultFontName Courier
skinparam defaultFontSize 12
高度な機能
プロシージャ(マクロ)
コードブロックを再利用します:
!procedure $draw_connection($from, $to)
$from -> $to
!endprocedure
Alice -> Bob : $draw_connection(Alice, Bob)
インクルード
外部ファイルやライブラリをインクルードします:
!include <archimate/Archimate>
!include stdlib/common
Salt(ワイヤーフレーム)
UI モックアップ:
@startsalt
{+
Login | {username: "_______" }
| {password: "_______" }
| [OK]
}
@endsalt
ベストプラクティス
DO:
- 必須: コードブロックは必ず
```pumlで始めてください。言語識別子のない```のみの使用は絶対に避けてください - 横長のシーケンス図には
left to right directionを使用します - 関連する参加者は
box "Group Name" { ... }でグループ化します note left of、note right ofを使ってコンテキストを補足します- エイリアスを使用して、図を読みやすくします
- 複雑な図は、焦点を絞った複数の図に分割します
- テーマを適用して、視覚スタイルを統一します
DON'T:
- PlantUML コードに言語識別子のない
```のみを絶対に使用しないでください。必ず```pumlを使ってください - Markdown のコードブロックで囲まずに、生の PlantUML コードを絶対に出力しないでください
- 参加者が 20 人以上の図を作成しないでください(分割を検討してください)
- 長すぎるラベルを使用しないでください(代わりにノートを作成してください)
- 括弧、矢印、ブロックの閉じ忘れに注意してください
- 1 つの図に矢印の種類を詰め込みすぎないでください
- 高レベルの図に実装の詳細を含めないでください
よくある落とし穴
-
落とし穴:PlantUML コードに言語識別子のない
```のみを使用する- 対処法:コードブロックの開始には必ず
```pumlを使用してください。これにより、適切な構文ハイライトとツールによる認識が有効になります
- 対処法:コードブロックの開始には必ず
-
落とし穴:
@startuml/@endumlタグがない- 対処法:コードは必ずこれらのタグで囲んでください
-
落とし穴:Markdown のコードブロックで囲まずに、生の PlantUML コードを出力する
- 対処法:必ず
puml言語識別子を指定した 3 つのバッククォートで囲んでください:@startuml ... @enduml
- 対処法:必ず
-
落とし穴:予約語を識別子として使用する
- 対処法:識別子を引用符で囲むか、エイリアスを使用してください
-
落とし穴:ラベル内の特殊文字をエスケープし忘れる
- 対処法:引用符またはエスケープ構文を使用してください
-
落とし穴:サイズが原因で図が読みにくくなる
- 対処法:図を複数に分割するか、
left to right directionを使用してください
- 対処法:図を複数に分割するか、
-
落とし穴:関係に適さない矢印の種類を使用する
- 対処法:
->(同期)、-->(非同期)、->>(戻り)を適切に使い分けてください
- 対処法:
よくあるエラーのデバッグ
PlantUML のレンダリングに失敗した場合は、次のよくある問題を確認してください:
| エラー | 原因 | 修正方法 |
|---|---|---|
Some diagram description contains errors | 括弧/波括弧の不一致 | 開き括弧と閉じ括弧の数を確認し、endif、endwhile、end があることを確認します |
Preprocessor failed | !include のパスが不正 | ファイルパスを確認し、組み込みファイルには !include <stdlib/common> を使用します |
Cannot find symbol | 参加者/クラスが未定義 | 参照する前にすべての要素を定義します |
Graphviz needed | Graphviz がインストールされていない | ローカルでのレンダリングには Graphviz のインストールが必要です |
Syntax Error | 予約語を識別子として使用 | 識別子を引用符で囲みます("class")、またはエイリアスを使用します |
すばやく確認するデバッグチェックリスト
- タグはありますか? すべての図に
@startumlと@endumlが必要です - 括弧の対応は取れていますか? すべての
{に}が必要で、すべてのifにendifが必要です - 参加者は定義されていますか? 矢印で使用する前に、参照先のファイルを定義します
- 予約語はエスケープされていますか? キーワードと一致する識別子は引用符で囲みます
- 矢印の構文は正しいですか?
->、-->、->>、<--が適切に使用されていることを確認します
リソース
- PlantUML 公式ドキュメント:https://plantuml.com/
- PlantUML 言語リファレンス:https://plantuml.com/guide
- オンラインエディター:https://plantuml.com/plantuml/uml/
- VS Code 拡張機能:jebbs の PlantUML
- テーマギャラリー:https://plantuml.com/theme