c4-diagram について
C4 アーキテクチャ図を作成するスキルです。システム構造や相互作用を記録するユーザー向けに、質問に応じて C4 のレベルと作図ツールを選び、通常は Structurizr DSL、簡易プレビューには Mermaid を使います。
主な機能
- 01適切な C4 レベルの選択
- 02Structurizr DSL または Mermaid の選択
- 03要素と関係の記述ルールの適用
- 04利用可能なツールでの図のレンダリング
- 05レンダラーがない場合の代替出力
活用シーン
- 01アーキテクチャのコンテナビュー作成
- 02関係者向けのシステムコンテキスト表示
- 03サービス内コンポーネントの文書化
- 04ドキュメント用の図のエクスポート
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bsene/ skills --skill c4-diagramインストール後、Claude Code で/c4-diagramを入力して読み込まれたか確認します。
同梱ファイルreferences/c4-mermaid.mdreferences/c4-structurizr.md
詳細
C4 図
ワークフロー
- C4 レベルを選ぶ — 図の詳細度を質問に合わせます(下の表を参照)
- ツールを選ぶ — デフォルトでは Structurizr DSL を使用します。チャット内ですばやくプレビューする場合は Mermaid を使用します(下の表を参照)
- 図を生成する — 図のルールに従い、選択したツールの DSL リファレンスを参照します
- レンダリングする — レンダリングのフォールバック手順に従います
C4 レベルの選択
| 質問の種類 | C4 レベル | Structurizr のビュータイプ |
|---|---|---|
| 「組織全体/すべてのシステムを表示」 | 補助 — システムランドスケープ | systemLandscape(Mermaid に相当するものはありません) |
| 「このシステムは何をするのか?」/「誰が使うのか?」 | レベル 1 — コンテキスト | systemContext |
| 「主なサービス/アプリ/データベースは何か?」 | レベル 2 — コンテナー | container |
| 「このサービスは内部でどのような構成になっているのか?」 | レベル 3 — コンポーネント | component |
| 「この特定のクラス/モジュールはどのように動作するのか?」 | レベル 4 — コード | 図なし — レベル 4 に対応する C4 図はありません |
デフォルトはレベル 2(コンテナー)です — 「アーキテクチャを見せて」といった依頼のほとんどをカバーできます。ステークホルダー向けの概要にはレベル 1、単一サービスの詳細な調査にはレベル 3 を使用します。
ツールの選択
| 必要なこと | 使用するもの |
|---|---|
| チャット内ですばやくプレビューする | Mermaid → references/c4-mermaid.md |
| ドキュメント/Wiki 用に PNG/SVG をエクスポートする | Structurizr → references/c4-structurizr.md |
| 1 つのモデルから複数のビューを作成する | Structurizr |
| 組織全体のシステムランドスケープを作成する | Structurizr(Mermaid に相当する C4 機能はありません) |
| 動的/番号付きのインタラクションフローを作成する | どちらでも可(C4Dynamic または Structurizr の dynamic) |
| デプロイメント/インフラストラクチャビューを作成する | Structurizr(Mermaid の C4Deployment は機能が限定されています) |
| クラス/メソッドレベルの詳細(レベル 4) | Mermaid の classDiagram — Structurizr に相当するものはありません |
| 使用可能なツールがない | Mermaid |
ユーザーが簡易な Mermaid プレビューを明示的に希望しない限り、デフォルトでは Structurizr DSL を使用してください。
図のルール
- すべての要素に、名前、タイプ(Person/System/Container/Component)、簡潔な説明を含める必要があります
- コンテナーとコンポーネントには、テクノロジー(例:「Node.js Express」、「PostgreSQL」)を明記する必要があります
- すべての関係には、アクション+プロトコルのラベルを付ける必要があります(例:「イベントを gRPC で読み取る」。単に「使用する」とはしません)
- 外部システム/人物には、モデル内で
tags "External"を付けます - 境界は暗黙的です。
systemContextビューとcontainerビューではスコープが自動的に設定されます。境界内の論理的なサブグループにはgroupを使用します - 図は約 12 要素以内に収めます。要素が多い場合は複数の図に分割します
レンダリング
順番に実行し、最初に成功した時点で停止します。Structurizr CLI にはネイティブの svg/png エクスポート機能はありません。必ず最初に PlantUML/Mermaid/D2 へエクスポートしてから、そのツールでレンダリングしてください。
-
CLI が使用可能(ローカルインストール/Docker のバイナリは
structurizr.sh、Homebrew/Scoop のバイナリはstructurizr-cli)— DSL を/tmp/<name>.dslに保存してから、次を実行します。structurizr.sh export -workspace /tmp/<name>.dsl -format plantuml -output /tmp/structurizr-out/ # render the .puml to SVG/PNG with `plantuml /tmp/structurizr-out/*.puml`出力パスをユーザーに伝えます。
-
Docker が使用可能 — DSL を
/tmp/<name>.dslに保存し、次をユーザーに提示します。# Active replacement (recommended): docker run -it --rm -p 8080:8080 -v /tmp:/usr/local/structurizr structurizr/structurizr local # Legacy (archived but functional): docker run -it --rm -p 8080:8080 -v /tmp:/usr/local/structurizr structurizr/litehttp://localhost:8080を案内します。 -
どちらも使用できない — DSL をフェンス付きの
dslコードブロックで出力します。注:オンラインでレンダリングするには、https://playground.structurizr.com/に貼り付けてください。
→ Structurizr DSL の構文:references/c4-structurizr.md
→ Mermaid C4 の構文:references/c4-mermaid.md
ベンチマーク
シナリオ:.benchmarks/scenarios/c4-diagram-001-container-view.md · 実行日:2026-08-31 · ログ:.benchmarks/runs/2026-08-31/c4-diagram-001-container-view.json
| モデル | 使用前 | 使用後 | 差分 |
|---|---|---|---|
| claude-opus-4-8 | 67% | 100% | +33% |
| claude-sonnet-4-6 | 100% | 100% | +0% |
| claude-haiku-4-5 | 100% | 100% | +0% |
合格(実行日:2026-08-31)。Opus は +33(67→100)、sonnet/haiku はすでに上限に達しています。リグレッションはありません。ゲートは
.agents/skills/skill-optimizer/rules/release-gates.mdに従います。