C4 model
C4 model は、ソフトウェアアーキテクチャ向けの階層的可視化記法で、Simon Brown によって 2018 年に作成されました。Context、Container、Component、Code という 4 つの入れ子になった抽象レベルを定義し、各図が何を描くべきで何を描くべきでないかを規定します。
| 正本リンク | https://c4model.com |
|---|---|
| メンテナ | Simon Brown |
| キット内の home | template/docs/diagrams/c4/ |
| pentaglyph 内のスロット | 5 つ中 #2 ― 可視化層 |
C4 は何を解決するのか
Section titled “C4 は何を解決するのか”アーキテクチャ図は典型的に次の問題を抱えます:
- 箱-線専制 ― 箱が何を表すか誰も分からない(プロセス? クラス? データベース?)
- 記法の分裂 ― UML、ArchiMate、ad-hoc 形状が同じリポに混在
- 単一ズーム呪い ― すべてを示す巨大な 1 枚は読めない。モジュールごとに 1 枚だとビッグピクチャを失う
C4 は 4 つの離散的ズームレベル を強制し、それぞれで「箱」が意味するものを明確にすることで、3 つすべてを解決します。
4 つのレベル
Section titled “4 つのレベル”| レベル | 箱が表すもの | 対象読者 | 1 プロジェクトの典型件数 |
|---|---|---|---|
| L1 ― System Context | ソフトウェアシステム全体(自分のもの + 外部) | 非技術ステークホルダーを含む全員 | 1 |
| L2 ― Container | デプロイ / 実行可能ユニット(Web アプリ、API、DB、メッセージバス) | 開発者 + 運用 | top-level system ごとに 1 |
| L3 ― Component | コンテナ内のコードグルーピング(モジュール、パッケージ) | そのコンテナで作業する開発者 | コンテナごとに 1 |
| L4 ― Code | クラス / 関数(ほぼ描かない ― IDE が既に描画) | 実装者 | 稀。オンデマンドのみ |
規律: 1 つの図にレベルを混ぜない。Container 図に外部システムを描いてはいけない(L1)、Component 図にコンテナを描いてはいけない(L2)。
pentaglyph での C4 の使い方
Section titled “pentaglyph での C4 の使い方”pentaglyph は docs/diagrams/c4/workspace.dsl(Structurizr DSL)を全 C4 図の single source of truth として扱います。SVG レンダーは docs/diagrams/c4/exports/ に置かれ commit されるので、GitHub / CodeCommit Web UI がローカルツールなしで表示できます。
template/docs/diagrams/c4/├── workspace.dsl ← 正本(Structurizr DSL)└── exports/ ← commit される SVG レンダー ├── system-context.svg ├── container.svg └── component-<name>.svgpentaglyph は C4 図を arc42 と対応付けます:
- arc42 §3 Context & Scope ↔ C4 L1 System Context
- arc42 §5 Building Blocks ↔ C4 L2 Container + L3 Component
- arc42 §6 Runtime View ↔ シーケンス図(C4 自体ではないが同じ方式で描画)
- Structurizr DSL ― テキスト DSL、バージョン管理可能、Simon Brown 本人の推奨
- Structurizr Lite ― DSL のローカルレンダラ
- PlantUML / Mermaid ― 動くが手動レイアウトが必要、公式 C4 スタイリングを失う
- 作図ツール(Lucidchart、draw.io) ― 許容されるがコードからドリフトし lint できない
C4 を使うべきとき
Section titled “C4 を使うべきとき”- 非自明なアーキテクチャ会話で箱を描く必要があるとき。「これは何の箱?」が 1 単語で答えられるようになる
- オンボーディングに特に有用 ― 新エンジニアが C4 図を初見で読める
C4 を使う べきでない とき
Section titled “C4 を使う べきでない とき”- 単一プロセススクリプト
- プロセス の図(BPMN が良い)や、 データフロー の詳細図(DFD が良い)
- 公式サイト: https://c4model.com
- 書籍: Software Architecture for Developers ― Simon Brown
- トーク: Simon Brown の Visualising software architecture トーク(YouTube に複数録画)
- Structurizr ドキュメント: https://docs.structurizr.com
- arc42 ― pentaglyph が C4 と組み合わせるテキスト構造
- なぜ 5 つの標準なのか ― C4 単体では足りない理由