C4モデル入門:クイックガイド
はじめに
「C4モデルサイモン・ブラウンによって開発されたC4モデルは、ソフトウェアアーキテクチャの図示に体系的なアプローチを提供し、ソフトウェアシステムのアーキテクチャに段階的に焦点を当てる4つの異なるレベルから構成されています。各レベルは独自の視点を提供し、ソフトウェアアーキテクチャの文書化や伝達に特定の目的を持っています。C4モデルの4つのレベルを確認しましょう:

1. システムコンテキスト図
範囲:単一のソフトウェアシステム。
主要な要素:対象となるソフトウェアシステム。
支援要素:人(例:ユーザー、アクター、役割、人物像)およびソフトウェアシステム(外部依存関係)で、対象となるソフトウェアシステムに直接接続されているもの。
対象読者:ソフトウェア開発チーム内外の技術者および非技術者を問わず、すべての人々。
目的:システムコンテキスト図は、ソフトウェアシステムのアーキテクチャについて初期的で高レベルの視点を提供します。アーキテクチャ文書作成の出発点となり、システムが広い環境の中でどのように位置づけられているかを包括的に把握できる視点を提供します。この図では、ソフトウェアシステムが中心の箱として描かれ、ユーザーおよびそのシステムが関与する他の外部システムによって囲まれています。技術的な詳細(技術やプロトコルなど)ではなく、人やソフトウェアシステムとの関係に焦点が当たっています。
ほとんどのチームに推奨:はい。
主な特徴:
- システム全体の俯瞰図を提供する。
- システムとユーザー/外部システムとの相互作用に重点を置く。
- 非技術的ステークホルダーとのコミュニケーションに最適。
- 詳細度は意図的に低めに保たれる。
2. コンテナ図
範囲:単一のソフトウェアシステム。
主要な要素:対象となるソフトウェアシステム内のコンテナ(例:サーバーサイドWebアプリケーション、シングルページアプリケーション、データベースなど)。
支援要素:コンテナに直接接続されている人およびソフトウェアシステム。
対象読者:ソフトウェア開発チーム内外の技術者、ソフトウェアアーキテクト、開発者、運用/サポートスタッフを含む。
目的:コンテナ図はソフトウェアシステムの詳細な構造に焦点を当て、高レベルの構造とコンテナ間での責任の分配を明らかにします。コンテナは、Webアプリケーションやデータベースなど、独立して実行またはデプロイ可能な単位を表します。この図は主要な技術選定を強調し、コンテナ同士の通信方法を示します。開発者および運用/サポートスタッフにとって非常に有用なツールです。
ほとんどのチームに推奨:はい。
主な特徴:
- ソフトウェアシステムのアーキテクチャに焦点を当てる。
- コンテナとその相互作用を示す。
- 技術選定を強調する。
- 技術関係者に適している。
- クラスタリングやロードバランシングなどのデプロイ固有の詳細には言及しない。
3. コンポーネント図
範囲:単一のコンテナ。
主要な要素:対象となるコンテナ内のコンポーネント。
支援要素:対象となるソフトウェアシステム内のコンテナ、およびコンポーネントに直接接続された人間やソフトウェアシステム。
対象読者:ソフトウェアアーキテクトおよび開発者。
目的:コンポーネント図はコンテナの内部構造を詳細に示すものです。コンテナを主な構造的構成要素(コンポーネント)に分解します。これらのコンポーネントはコンテナ内での特定のタスクを担当し、技術的および実装上の詳細に関連しています。この図は、コンテナのアーキテクチャの詳細な側面を理解する必要があるソフトウェアアーキテクトや開発者にとって特に有用です。
ほとんどのチームに推奨:いいえ。価値をもたらす場合にのみコンポーネント図を作成し、長期的なドキュメント作成のためには自動生成を検討すべきです。
主な特徴:
- コンテナの内部構造に焦点を当てる。
- コンポーネント、その責任、実装上の詳細を特定する。
- 技術関係者を対象とする。
- 必ずしも必要ではなく、ドキュメントに価値をもたらす場合にのみ慎重に使用すべきである。
4. コード図
範囲:単一のコンポーネント。
主要な要素:特定のコンポーネント内の詳細なコードおよび技術的アーティファクト。
補助的な要素:コンポーネント(範囲内のコンテナ内)、コンテナ(範囲内のソフトウェアシステム内)、およびコンポーネントに直接接続された人間およびソフトウェアシステム。
対象読者:非常に技術的な人間、通常は開発者やコードベースに深く関与している人々。
目的:C4モデルの最終段階であるコード図は、さらに詳細に特定のコンポーネントのコードベースを深く可視化する。この図は、実際のソースコード、クラス構造、およびコンポーネント内の技術的実装の詳細にまで踏み込む。特定のコンポーネントの内部構造を理解したり、その開発に携わる開発者にとって特に有用である。
ほとんどのチームに推奨:実際にはほとんど使用されない。コード図を作成することは一般的ではない。なぜなら、その詳細レベルはコードドキュメントや開発環境で既にカバーされているからである。
主な特徴:
- 実際のソースコードおよび技術的アーティファクトに焦点を当てる。
- コンポーネントの実装について極めて詳細な視点を提供する。
- 主にコードの開発に従事する開発者を対象としている。
- 詳細度が高いため、実際にはほとんど使用されない。なぜなら、この情報は通常、コードベース自体にすでに存在するからである。
結論
C4モデルの4つのレベルは、ソフトウェアアーキテクチャを文書化し、伝達するための構造化された階層を提供する。システムコンテキスト図での高レベルな概要から始まり、徐々にコード図における実際のコードまで掘り下げていく。これらの図は、全体像を理解したい非技術的ステークホルダーから、詳細なコードレベルの洞察を必要とする高度な技術者まで、さまざまな対象読者に適している。C4モデルを活用することで、ソフトウェアアーキテクトや開発チームは、複雑なアーキテクチャ設計を効果的に伝えることができ、組織内外での理解と協力を促進できる。













