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: 汎用の作図ツールで手動作成

関連書籍も参考になる。

関連用語