ダイアグラム生成器 は何をしますか?
ACTION REQUIRED(読んだらすぐ実行)
NOW:現在のタスクが本スキルの適用範囲に該当するか確認するNOW:../tool-index.mdを読み、ツールの可用性と実際のパスを検証するNEXT:ツールがない場合はブートストラップを呼び出し、パスを推測しないACT:「ワークフロー」の最初のステップに入り実行する。確認状態で止まらない
目的
散らかった入力や構造化された入力から、明確で編集可能な図を作成する。まずテキストベースの図ソースを優先し、結果をレビュー、バージョン管理、洗練できるようにする。ユーザーが画像/PDFを明示的に要求した場合、またはダウンロード可能なアーティファクトが実質的に役立つ場合にのみファイルにレンダリングする。
デフォルトワークフロー
- ユーザーの意図、対象読者、ソース資料を特定する。
- 以下の決定表を使用して図のファミリーと言語を選択する。
- 図コードを記述する前に、エンティティ、関係、ラベル、状態、ブランチ、時間/順序情報を正規化する。
- 簡潔で読みやすい図ソースを生成する。
- 構文を頭の中で検証し、ファイルを作成する場合は
scripts/render_diagram.pyを実行する。 - 図ソースと仮定に関する短いメモを返す。ファイルが生成された場合は、出力ファイルへのリンクを含める。
明確化のための質問をしすぎない。要求があいまいな場合は、合理的な仮定を行い、簡単にラベル付けする。
図言語決定表
別の言語が明らかに優れていない限り、Mermaid を使用する。
| ユーザーが求めるもの | 推奨 | 理由 |
|---|---|---|
| プロセスフロー、決定木、シンプルなスイムレーン | Mermaid flowchart | 読みやすく、Markdownに貼り付けやすい |
| システム/ユーザーインタラクションのシーケンス | Mermaid sequenceDiagram または PlantUML sequence | Mermaidはドキュメント向け、PlantUMLはUML形式向け |
| ライフサイクル、ステートマシン、遷移 | Mermaid stateDiagram-v2 または PlantUML state | コンパクトな遷移構文 |
| データベーススキーマ、エンティティ、関係 | Mermaid erDiagram | ポータブルなER記法 |
| クラス/インターフェース/オブジェクトモデル | Mermaid classDiagram または PlantUML class | Mermaidはドキュメント向け、PlantUMLは詳細なUML向け |
| プロジェクトスケジュール | Mermaid gantt | 簡潔なタイムライン構文 |
| 階層、アイデア、メモ | Mermaid mindmap | アイデアマップに適したデフォルト |
| 顧客/プロダクトジャーニー | Mermaid journey | 組み込みのジャーニー記法 |
| Git履歴 | Mermaid gitGraph | 組み込みのGit記法 |
| 依存関係グラフ、パッケージグラフ、大規模ネットワーク | Graphviz DOT | 密集したグラフに優れたレイアウトエンジン |
| レイヤー、クラスター、境界を含むアーキテクチャ | Mermaid flowchart(サブグラフ付き)、Graphviz clusters、または PlantUML C4 スタイル | 要求された忠実度に基づいて選択 |
| 重み付きフロー/サンキー風の関係 | Mermaid sankey-beta(サポートされている場合)、それ以外はSVGまたはGraphviz | レンダラーによってMermaidのサポートが異なる場合がある |
| ソース言語がうまく適合しないカスタムビジュアル | SVG | レイアウトとスタイルの正確な制御 |
出力ポリシー
- ユーザーが明示的に画像のみを要求しない限り、常に編集可能なソースを提供する。
- デフォルトで単一の最適な図を作成する。本当に役立つ場合にのみ代替案を提供する。
- 古いMermaid/PlantUMLバージョンでレンダリングされない可能性のある派手な機能よりも、安定したシンプルな構文を優先する。
- 短いラベルを使用する。長いテキストは必要に応じて図の外側にメモとして分割する。
- あいまいなノードIDを避ける。ASCII IDと人間が読めるラベルを使用する。
- ユーザーの用語を保持するが、図内の大文字小文字は統一する。
- 技術図の場合、暗黙的に存在する場合は、クライアント、サービス、データベース、キュー、外部API、オペレーター/ユーザーなどの境界を含める。
- ビジネスプロセス図の場合、ハッピーパス、決定ポイント、失敗、リトライ、手動ステップが存在する場合は区別する。
- 不確かなテキストから作成された図の場合、コードの後に「仮定」セクションを含める。
Mermaid 生成ルール
コンパクトなテンプレートについては references/diagram-patterns.md を参照すること。
一般的なMermaidルール:
- 正しい図ディレクティブで開始する。例:
flowchart TD、sequenceDiagram、erDiagram、gantt、mindmap、journey。 - フローチャートには
flowchart TDを使用する。ユーザーが左から右を要求した場合、またはアーキテクチャとパイプラインの場合はflowchart LRを使用する。 - スイムレーンやアーキテクチャ層にはサブグラフを使用する。サブグラフには読みやすいラベルを付ける。
- ノードIDは安定させ、ASCIIのみにする。例:
ingest_service[Ingest Service]。 - パーサーを混乱させる可能性のある句読点を含むラベルは引用符で囲む。
- 分岐には判断ダイヤモンドを使用する:
decision{条件?}。 - 意味がある場合にのみ、一貫性のあるエッジラベルを使用する:
-- yes -->、-- no -->、-. async .->、== critical ==>。 - シーケンス図では、メッセージの前に参加者を宣言する。人間には
actor、システムにはparticipantを使用する。 alt/else/end、opt/end、loop/end、par/and/endブロックを条件付き、オプション、繰り返し、並列フローに使用する。
Graphviz DOT 生成ルール
大きくて密集した、またはレイアウトに敏感な関係図にはGraphvizを使用する。
- 有向関係には
digraph G、無向ネットワークにはgraph Gを優先する。 - レイアウトに適したグラフ属性を先頭に設定する:
rankdir=LR、nodesep、ranksep、必要に応じてsplines=true。 - 境界とサブシステムには
subgraph cluster_nameを使用する。 - プレーンなラベルと控えめなスタイリングを使用する。
- 意味を追加する場合にのみエッジラベルを使用する。
- 多くのノードがある場合は、クラスターでドメインごとにグループ化し、交差の多い全対全のエッジを避ける。
PlantUML 生成ルール
ユーザーがUMLを要求した場合、または正式なUML記法が必要な場合にPlantUMLを使用する。
- 図を
@startumlと@endumlでラップする。 - 必要に応じて
actor、participant、database、queue、collections、componentステレオタイプを使用する。 - アーキテクチャの境界には
package、rectangle、nodeを使用する。 - クラス図では、ユーザーが網羅的な詳細を要求しない限り、重要なフィールド/メソッドのみを含める。
- アクティビティ図では、明確な開始/終了マーカーと明示的なブランチラベルを使用する。
SVG 生成ルール
テキストベースの図言語で要求されたビジュアルを確実に表現できない場合にのみSVGを使用する。
- SVGはシンプルでアクセス可能、編集可能に保つ。
<title>と意味のあるテキストラベルを含める。- 複雑なパスよりも、長方形、線、矢印、グループを優先する。
- 外部フォントやリモート画像を埋め込まない。
レンダリングファイル
ユーザーがPNG/SVG/PDFを要求した場合は、ソースファイルを作成して以下を実行する:
python "<SKILL_ROOT>/diagram-generator/scripts/render_diagram.py" input.mmd --format svg --out output.svg
python "<SKILL_ROOT>/diagram-generator/scripts/render_diagram.py" input.dot --format png --out output.png
python "<SKILL_ROOT>/diagram-generator/scripts/render_diagram.py" input.puml --format svg --out output.svg
<SKILL_ROOT>はこのパッケージのskills/ディレクトリの実際のパスです。AIは自動的に検出する必要があります。
レンダラーは意図的に依存関係に対して寛容です。一般的なローカルツールを試し、レンダラーが利用できない場合は役立つインストールヒントを報告します。スクリプトが正常に完了し、出力ファイルが存在することを確認せずに、画像がレンダリングされたと主張しないでください。
検証チェックリスト
最終決定する前に:
- 図のタイプがユーザーのタスクと一致している。
- ソースが選択された言語の構文的に妥当である。
- ラベルが収まるのに十分短い。
- エッジとメッセージの順序が入力を正確に反映している。
- 入力が不完全だった場合の仮定が明記されている。
- 生成されたファイルについては、出力が存在し、開くか、サイズが0以外である。
一般的な応答テンプレート
ほとんどの図回答にはこの構造を使用する:
こちらが編集可能な [language] バージョンです:
```[language]
[ソース]
仮定:
- [必要な場合のみ]
レンダリングファイル:[リンク] [生成された場合のみ]
英語ユーザーのリクエストには英語で応答する。中国語ユーザーのリクエストには、別途指示がない限り中国語で応答する。
---
## オンデマンドブートストラップ
### 自動化能力の境界
| ツール | 自動インストール可能 | インストール方法 | 説明 |
|------|-----------|---------|------|
| Mermaid CLI (mmdc) | ✓ | npm install -g @mermaid-js/mermaid-cli | Mermaid を PNG/SVG にレンダリング |
| Graphviz (dot) | ✗ | 手動インストール | https://graphviz.org/download/ |
| PlantUML | ✗ | Java + plantuml.jar が必要 | https://plantuml.com/download |
| Python (レンダースクリプト) | ✓ | ブートストラップに含まれています | `scripts/render_diagram.py` の依存関係 |
### 説明
本スキルは主にテキスト形式の図ソース(Mermaid/DOT/PlantUML)を出力するため、必ずしもローカルレンダリングツールは必要ありません。ユーザーがPNG/SVG/PDFファイルの生成を明示的に要求した場合にのみ、対応するレンダラーが必要です。
レンダラーが利用できない場合、`scripts/render_diagram.py` はエラーではなくインストールヒントを出力します。
---
## ルーティングコンテキスト
**上流エントリ**: `skills/SKILL.md`(総合制御)、`routing.md`
**トリガー条件**: ユーザーが「図を描く」「フローチャート」「アーキテクチャ図」「攻撃経路図」「シーケンス図」「Mermaid」「Graphviz」「PlantUML」と言った場合
**下流出力**:
- 生成された図は `docs-generator/` のレポートに埋め込むことができます
- 攻撃経路図は `pentest-tools/` のペネトレーションレポートと連携できます
**関連モジュール**: `docs-generator/`(レポートに図を埋め込む)
## タスク完了セルフチェック(完了と主張する前に MUST チェック)
- [ ] ワークフローの各ステップを実行しましたか?(単に読んだだけではありません)?
- [ ] `tool-index` に基づいて実際のツールパスを使用しましたか?
- [ ] 再現可能な証拠(コマンド/スクリプト/スクリーンショット/レポート)を生成しましたか?
- [ ] RULES で要求される Checklist 項目を完了して書き戻しましたか?