C4 Model
ソフトウェアアーキテクチャを 4 つの抽象レベルで図示するモデル
アーキテクチャドキュメント
C4 Model とは
C4 Model は、Simon Brown が考案したソフトウェアアーキテクチャの可視化手法で、4 つの抽象レベル (Context, Container, Component, Code) でシステムを段階的に図示する。UML の複雑さを避けつつ、チーム全員が理解できるアーキテクチャ図を作成できる。
4 つのレベル
| レベル | 対象読者 | 描くもの | 粒度 |
|---|---|---|---|
| C1: Context | 全員 (非技術者含む) | システムと外部アクター | 最も粗い |
| C2: Container | 開発チーム | アプリ、DB、メッセージキュー | 技術選択が見える |
| C3: Component | 開発者 | モジュール、サービス、リポジトリ | 内部構造 |
| C4: Code | 開発者 | クラス、関数 | 最も細かい (通常は省略) |
実務では C1 と C2 を必ず作成し、C3 は必要に応じて、C4 は IDE で見れるため通常は作成しない。
C1: System Context 図
[顧客] → [EC サイト] → [決済サービス (外部)]
↓
[配送サービス (外部)]
システムの境界と、外部のユーザー・システムとの関係を示す。技術的な詳細は一切含めない。
C2: Container 図
[ブラウザ (React)] → [API Gateway] → [Lambda (注文)]
→ [Lambda (商品)]
↓
[DynamoDB] [S3] [SQS]
Container はデプロイ可能な単位 (アプリケーション、DB、メッセージキュー) を指す。Docker コンテナとは異なる概念。技術選択 (React、Lambda、DynamoDB) がこのレベルで見える。
C3: Component 図
[注文 Lambda]
├── OrderController (API ハンドラー)
├── OrderService (ビジネスロジック)
├── OrderRepository (DynamoDB アクセス)
└── PaymentClient (決済 API 呼び出し)
1 つの Container の内部構造を示す。クリーンアーキテクチャやヘキサゴナルアーキテクチャの層が見える。
ADR との補完関係
C4 Model は「今のアーキテクチャがどうなっているか」を図示し、ADR (Architecture Decision Record) は「なぜそのアーキテクチャにしたか」を記録する。両者を組み合わせることで、アーキテクチャの現状と意思決定の経緯を体系的に管理できる。
ツール
- Structurizr: Simon Brown が開発した C4 Model 専用ツール。DSL でモデルを定義し、図を自動生成
- Mermaid: C4 拡張で簡易的な C4 図を Markdown 内に記述可能
- draw.io / Excalidraw: 汎用の作図ツールで手動作成
関連書籍も参考になる。