C4モデルとは
ソフトウェアのアーキテクチャを表現するためのモデル。
- コンテキスト(context)
- コンテナ(containers)
- コンポーネント(components)
- コード(code) で構成される。
C4モデルは特別な表記法を規定していない。以下、ダイアグラムの図はThe C4 model for visualising software architectureを参考に作成した。
flowchart TD ソフトウェアシステム:::system ソフトウェアシステム --> containerA(コンテナ) ソフトウェアシステム --> containerB(コンテナ) ソフトウェアシステム --> containerC(コンテナ) componentA1:::dot containerA:::dot --> componentA1(コンポーネント) componentA:::dot containerB --> componentA(コンポーネント) containerB --> componentB(コンポーネント) containerB --> componentC(コンポーネント) containerB:::container componentC:::dot componentA2:::dot containerC:::dot --> componentA2(コンポーネント) componentB --> codeA(コード) componentB --> codeB(コード) componentB --> codeC(コード) componentB:::component codeA:::code codeB:::code codeC:::code classDef dot fill:#eef,stroke:#f66,stroke-width:2px,color:#aaa,stroke-dasharray: 5 5 classDef system fill:#faa,stroke:#333,color:#fff,stroke-width:4px classDef container fill:#44f,stroke:#333,color:#fff,stroke-width:4px classDef component fill:#77f,stroke:#333,color:#fff,stroke-width:4px classDef code fill:#aaf,stroke:#333,color:#fff,stroke-width:4px
レベル1 システムコンテキスト ダイアグラム
対象システムが、それを使用する人や関連する他システムとの関係性、どのような位置づけにあるかを図示する。
flowchart TD pbc(((銀行の顧客))) --> |口座残高参照,支払いに使用|ibs(インターネットバンキングシステム):::system ibs --> |口座情報取得,支払いに使用|mbs(メインフレームバンキングシステム) ibs --> |メール送信に使用|es(E-mailシステム) es --> |メール送信|pbc classDef system fill:#faa,stroke:#333,color:#fff,stroke-width:4px
システムコンテキスト ダイアグラムの例
レベル2 コンテナ ダイアグラム
ソフトウェアシステムを拡大したもので、それを構成するコンテナ(アプリケーション、データストア、マイクロサービスなど)を図示する。
flowchart TB subgraph インターネットバンキングシステム direction TB wa(Webアプリケーション\nJava ans Spring MVC):::container spa(シングルページアプリケーション\nJavaScript and Angular):::container mba(モバイルアプリケーション\nXamarin):::container wa --> |顧客のブラウザへ配信|spa spa --> |API呼び出し JSON,HTTPS|api(APIアプリケーション\nJava ans Spring MVC):::container mba --> |API呼び出し JSON,HTTPS|api api --> |読み込み, 書き込み|db[(データベース\nOracle Database)]:::container end pbc(((銀行の顧客))) pbc --> |サイトを開き使用|wa pbc --> |口座残高参照,支払いに使用|spa pbc --> |口座残高参照,支払いに使用|mba es --> |メール送信|pbc api --> |メール送信に使用|es(E-mailシステム) api --> |API呼び出し XML,HTTPS|mbs(メインフレームバンキングシステム) classDef container fill:#44f,stroke:#333,color:#fff,stroke-width:4px
コンテナ ダイアグラムの例
レベル3 コンポーネント ダイアグラム
個々のコンテナにズームインし、その中のコンポーネントを表示する。コードベースのなかの実際の抽象概念(たとえば、コードのグループ化など)にマップする。
flowchart TB spa(シングルページアプリケーション\nJavaScript and Angular):::container mba(モバイルアプリケーション\nXamarin):::container subgraph APIアプリケーション sic(サインインコントローラ\nSprint MVC Rest Controller):::component sic --> |使用する|sc(セキュリティコンポーネント\nSpring Bean):::component rpc(パスワードリセットコントローラ):::component rpc --> |使用する|sc rpc --> |使用する|ec(E-mailコンポーネント):::component asc(アカウントサマリコントローラ\nSprint MVC Rest Controller):::component asc --> |使用する|mbsf(メインフレームバンキング\nシステムFacade\nSprint Bean):::component end spa --> |APIコール\nJSON, HTTPS|sic spa --> |APIコール\nJSON, HTTPS|rpc spa --> |APIコール\nJSON, HTTPS|asc mba --> |APIコール\nJSON, HTTPS|sic mba --> |APIコール\nJSON, HTTPS|rpc mba --> |APIコール\nJSON, HTTPS|asc sc --> |読み込み,書き込み|db[(データベース\nOracle Database)]:::container ec --> |メール送信で使用|es(E-mailシステム) mbsf --> |APIコール\nXML, HTTPS|mbs(メインフレームバンキングシステム) classDef container fill:#44f,stroke:#333,color:#fff,stroke-width:4px classDef component fill:#77f,stroke:#333,color:#fff,stroke-width:4px
コンポーネント ダイアグラムの例
レベル4 コード
コンポーネントがどのように実装されているかを示す。
--- title: com.bigbankplc.intenetbanking.componet.mainframe --- classDiagram MainframeBankingSystemFacadeImpl ..> BankingSystemConnection : +uses MainframeBankingSystemFacadeImpl ..> GetBalanceRequest : +creates MainframeBankingSystemFacadeImpl ..> GetBalanceResponse: +parses MainframeBankingSystemFacadeImpl ..> MainframeBankingSystemException : +throws BankingSystemConnection ..> AbstractRequest : +sends BankingSystemConnection ..> AbstractResponse : +receives MainframeBankingSystemException --|> InternetBankingSystemException GetBalanceRequest --|> AbstractRequest GetBalanceResponse --|> AbstractResponse