C4 ダイアグラムでチーム間のコミュニケーションを改善する

C4 ダイアグラムでチーム間のコミュニケーションを改善する

C4 モデルの特徴と、UML やインフラ構成図との違いを整理し、相手のロールに合った粒度でソフトウェアアーキテクチャを伝える方法を解説します。

Takahiro Iwasa
8 min read

同じシステムについて話しているのに、プロダクトオーナーはユーザーへの価値を、インフラエンジニアは実行環境を、開発者はモジュールの依存関係を見ています。全員に1枚の巨大な構成図を見せると、情報が多すぎる人と、情報が足りない人が同時に生まれてしまいます。

C4 モデル は、ソフトウェアアーキテクチャを異なるズームレベルで表現するためのアプローチです。地図を拡大するように、全体像から実装詳細へ段階的に移動できるため、会話の相手に合わせて情報量を調整できます。

C4 モデルの4つのズームレベル

C4 ダイアグラムの特徴

C4 という名前は、4種類の中心的なダイアグラム の頭文字に由来します。

レベル表現するもの主な読み手
System Context対象システム、利用者、連携する外部システムビジネス、プロダクト、技術の関係者全員
Containerシステム内のアプリケーションとデータストア、通信、主要技術アーキテクト、開発、運用、セキュリティ
Component1つの Container 内の責務と主要コンポーネントアーキテクト、開発者
Codeクラス、インターフェースなどの実装要素実装を担当する開発者

C4 モデルの重要な特徴は、記法や作図ツールを規定していないことです。箱の色や形よりも、要素の名前・種類・責務・技術を明記し、関係線に方向と説明を付けることを重視します。そのため、既存の作図ツールや Diagram as Code の仕組みにも導入できます。

また、4レベルすべてを作る必要はありません。公式ガイドでも、多くのチームには System Context と Container で十分とされています。変更頻度の高い Component や Code は、意思決定に必要な箇所だけ作るほうが保守しやすくなります。

UML やインフラ構成図との違い

C4、UML、インフラ構成図は競合する方式ではなく、答えようとしている問いが異なります。

方式主な問い強み
C4誰がシステムを使い、ソフトウェアがどの責務に分かれているか一貫した抽象度で全体から詳細へ移動できる
UMLシステムの構造や振る舞いをどう厳密に表現するか標準化された記法で、クラス、シーケンス、状態などを表現できる
インフラ構成図アプリケーションやデータストアをどの実行環境に配置し、どう接続するかホスト、クラスタ、ネットワーク境界、冗長化などの配置とトポロジーを伝えやすい

UML は標準化されたモデリング言語です。一方、C4 はソフトウェアをどの抽象度で分解して見せるかを定めるモデルで、記法には依存しません。両者は併用でき、例えば C4 の Code レベルを UML クラス図で、処理の流れを UML シーケンス図で表現できます。

インフラ構成図は、サーバー、実行基盤、ネットワーク境界などを示し、デプロイ先やトポロジーを説明するのが得意です。しかし、実行基盤のアイコンだけでは、その上で動くアプリケーションの責務までは分かりません。反対に、C4 の Container ダイアグラムは責務や通信を示せますが、リージョンやゾーン、冗長化、ファイアウォールルールといった配置の詳細は通常扱いません。

実務では、まず C4 で論理的な構造と共通語彙をそろえ、環境固有の配置をインフラ構成図または C4 の Deployment ダイアグラム で補うと、設計の意図と実装先を分離して説明できます。

異なるロールとのコミュニケーションに使う

C4 の価値は、きれいな図を作ることではなく、会話の焦点を合わせることにあります。例えば新しい注文機能をレビューする場合、相手によって入口を変えます。

  • プロダクトオーナーやカスタマーサポートとは、System Context で利用者、対象範囲、外部サービスとの境界を確認する
  • セキュリティや運用チームとは、Container でデータの流れ、認証境界、主要技術、外部通信を確認する
  • 開発チームとは、必要な Container だけを Component へ拡大し、責務、API、依存関係を確認する
  • 実装レビューでは、複雑な部分に限って Code やシーケンス図を追加する

異なる図を使っても、要素名をそろえておけば会話は連続します。System Context の「注文システム」が Container の境界になり、その中の「注文 API」が Component ダイアグラムの対象になる、というようにズーム前後の対応を保つことが重要です。

導入時のポイント

最初から詳細なモデルを完成させようとせず、次の順序で小さく始めると実用的です。

  1. 対象システムを1つ決め、System Context で利用者と外部システムを整理する
  2. Container でアプリケーション、データストア、主要技術、通信プロトコルを示す
  3. すべての要素に短い責務を、すべての関係線に方向と目的を記載する
  4. レビュー相手が判断するために必要な場合だけ、Component や Code へ掘り下げる
  5. 設計変更と同じ Pull Request で図を更新し、コードと用語のずれを防ぐ

まとめ

C4 ダイアグラムは、単一の万能な構成図を作る方法ではありません。同じソフトウェアを、相手が必要とする粒度までズームして見せるための共通言語です。

UML は構造や振る舞いの詳細、インフラ構成図は実行環境への配置、C4 はソフトウェアの境界と責務を伝えることに強みがあります。それぞれを目的に応じて組み合わせることで、ビジネス、開発、運用など異なるロールの間でも、詳細に埋もれず設計の意図を共有しやすくなります。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.