Structurizr を使って C4モデルを生成する
TL;DR
Structurizr を利用することで C4モデル を1つの DSL から簡単に生成できる。
DSLを学ぶのが大変だけれど、複数の観点から見たアーキテクチャ図を1つのファイルから生成できるのはかなり良い。
C4モデル
C4モデル とは、ソフトウェアアーキテクチャの図は説明する相手や用途に応じて様々な粒度があるため、1つの図ではなく適切な粒度の図を作るのが大事であるというモチベーションの元 Simon Brown が主張しているシステムアーキテクチャ図の描き方のこと。
Context
, Containers
, Components
, Code
の4つの粒度のそれぞれの頭文字を取って C4モデル と呼ぶ。
以下に ソフトウェアアーキテクチャのためのC4モデル の内容を引用する形でそれぞれを簡単に説明する。
またこれとは別にシステム全体の概要を描いた System Landscape
という図もある。
最近だと Spotify が Software Visualization — Challenge, Accepted のブログの中で触れていた。
Spotify は Backstage で C4モデルを生成するプラグインを作って対応しているらしい。
Context
構築しようとしているソフトウェアシステムが、それを使用する人や関連する他システムとの相互作用の観点からどのような位置づけにあるのかを図示します。
Container
ソフトウェアシステムを拡大したもので、それを構成するコンテナ(アプリケーション、データストア、マイクロサービスなど)を図示します。技術的な決定事項もこの図の重要な一部です。
Conponents
個々のコンテナの内部コンポーネントにまで拡大したものです。これらのコンポーネントは、コードベースのなかの実際の抽象概念(たとえば、コードのグループ化など)にマップしなければいけません。
Code
最後に、もしあなたが望むのであれば、個別のコンポーネントを拡大してどのように実装されているかまで図示できます。
このレベルは必ずしもアーキテクチャ図として含める必要はないという風に言っている。
Structurizr を使う
Structurizr は、独自の Structurizr DSL を定義していて、それを Structurizr command line interface (CLI) などを利用して例えば、 PlantUML形式に export したりなどが可能となっている。
https://github.com/omuomugin/sandbox-structurizr に試してみた内容を置いてる。
https://github.com/structurizr/cli/blob/master/docs/export.md を見ると、plantuml
, mermaid
, websequencediagrams
, dot
, ilograph
, json
, dsl
, theme
と様々な指定ができるらしい。
ひとまず馴染みのある plantuml
と mermaid
を試してみたりしていた。
Structurizr command line interface (CLI) の Dockerイメージもあるのでかなり楽に導入自体はできたが、DSL を学ぶのに一定コストはかかりそうでもうちょっと複雑な図を描いてみたときにどうなるかは今後追って試していきたい。