コンポジット構造図は、UMLの構造図の一つで、クラスやコンポーネントの内部にある部品、接続、外部との境界を表す図です。使いどころは、責務分割や接続ルールを関係者で共有したい場面です。逆に、内部構造が単純な対象や、設計方針自体がまだ固まっていない段階では、クラス図やコンポーネント図だけで足りることもあります。
判断の軸は明確です。全体の関係だけを見せたいならクラス図やコンポーネント図、内部の部品構成と接続のしかたまで見せたいならコンポジット構造図、処理の流れまで説明したいならシーケンス図を併用する、という住み分けにすると使い分けやすくなります。
コンポジット構造図は、UMLで内部構造を表すための図です。外から見た関連だけではなく、内部に含まれるパーツ、パーツ同士の接続、外部と接続するポートまで表せます。対象はクラスに限らず、コンポーネントなどの内部構成を説明したい場面にも広がります。
この図で整理したいのは、主に次の三点です。
実装前の設計レビューでは責務分割の確認に使いやすく、実装後の保守では変更影響の見積もりにも使いやすくなります。
| クラス図 | クラスの属性、操作、関連といった静的構造を整理する図です。型の関係や責務の整理に向きます。 |
| コンポーネント図 | モジュールやコンポーネント単位の依存関係、提供インターフェース、配置単位の関係を整理する図です。全体像の共有に向きます。 |
| コンポジット構造図 | 対象の内部にあるパーツ、ポート、コネクタを表し、内部設計と接続ルールを具体化する図です。責務境界と依存の向きの共有に向きます。 |
代替関係ではなく補完関係として扱う方が実態に合います。全体の輪郭はコンポーネント図で示し、内部の構造だけをコンポジット構造図で掘る使い方だと、図の役割がぶれにくくなります。
パーツは、内部に含まれる構成要素を表します。たとえば Validator、Repository、Adapter のように、責務単位で切り出した部品を表す場面で使います。クラス図の属性と見た目は近くても、こちらは接続と協調まで含めて示す意図が強くなります。
ポートは、対象やパーツが外部とやり取りする境界です。どのインターフェースを提供し、どのインターフェースに依存するかを整理しやすくなります。外部公開API、内部サービスの入口、外部I/Fとの接点などを明示したい場面で使いやすくなります。
コネクタは、パーツ同士、またはポート同士の接続を表します。誰が誰につながるかを可視化できるため、依存の向き、責務集中、循環依存の兆候を読み取りやすくなります。
コラボレーションは、複数の役割が協調して機能を実現する前提を表す要素です。日常的な設計説明では、まずパーツ、ポート、コネクタを押さえるだけで足りることも多く、コラボレーションは協調パターンまで整理したい場合に追加すると図が過密になりにくくなります。
サービス層、制御部、外部I/F、永続化層のように役割が分かれている設計では、内部構造を文章だけで共有すると解釈が割れやすくなります。コンポジット構造図を使うと、どの部品が何を担うかを図で固定しやすくなります。
差し替え可能な部品、テストダブルを入れる境界、外部連携の依存点を整理したい場合は、ポートとコネクタを明示する価値が高くなります。複数チームで実装を分担する場面でも、接続契約の共有に使いやすくなります。
どこを直せばよいか、どこまで影響するかを把握しやすくなるため、保守や改修の議論でも使いやすくなります。依存の向きが揃っていない設計では、図にした段階で問題が見えやすくなります。
内部部品が少なく、接続関係も単純なら、クラス図やコンポーネント図だけで十分なことがあります。図を増やすほど理解しやすくなるとは限りません。
責務分割も接続ルールもまだ揺れている段階で細かく描くと、図だけがすぐ古くなります。先に全体像や主要インターフェースを固め、その後に必要な箇所だけ詳細化した方が更新しやすくなります。
コンポジット構造図は静的な構造の説明に向く図です。時系列の処理、例外時の分岐、呼び出し順序まで伝えたい場合は、シーケンス図など別の図を併用した方が誤解を減らせます。
最初に決めるべきなのは、どのクラス、どのコンポーネント、どのサブシステムの内部を描くかです。範囲が広すぎると、図が説明資料ではなく一覧表になりやすくなります。
内部の部品を洗い出し、それぞれの責務を一文で言える状態にします。クラスを機械的に並べるのではなく、検証、永続化、外部連携、変換といった役割単位で切る方が読みやすくなります。
どのパーツがどのパーツへ依存するか、依存の向きが自然か、不要な双方向参照がないかを確認します。ここで循環依存や責務の偏りが見つかることもあります。
外部との接続点や差し替えたい依存点にポートを置き、提供する契約と要求する契約を整理します。チーム境界やテスト境界を明示したいときに効きます。
最後に、図の粒度と命名を揃えます。パーツ名が役割を表しているか、接続が読み取れる配置になっているか、更新責任者と更新タイミングが決まっているかまで含めて整えると、図が保守資料として残りやすくなります。
責務単位ではなくクラス単位で全部を出すと、図が密集して読みづらくなります。詳細化が必要な範囲だけを切り出し、他は別図へ逃がした方が情報の焦点を保ちやすくなります。
すべての接続を直接線で結ぶと、依存境界が曖昧になります。外部との接点や差し替え点は、ポートを明示した方が意図が残ります。
どの部品があるかは分かっても、いつ、どの順に呼ばれるかまでは構造図だけでは伝わりません。代表的なユースケースだけでも別の振る舞い図を併記した方が設計意図は伝わりやすくなります。
コンポジット構造図は、クラスやコンポーネントの内部にあるパーツ、ポート、コネクタを使って、内部構造と接続ルールを表すUMLの図です。効く場面は、責務分割、依存境界、差し替え点を合意したいときです。対象が単純なら無理に使う必要はなく、全体像は別図、内部設計だけをこの図で示す使い分けにすると、設計資料として機能しやすくなります。
A.UMLの構造図の一種で、クラスやコンポーネントの内部構造と接続関係を表す図です。
A.外側の関係だけでなく、内部のパーツ構成、ポート、コネクタまで踏み込んで表現できる点が違います。
A.内部に含まれる部品を表し、どの部品がどの責務を担うかを示します。
A.外部との出入口として、提供する機能と依存する機能の境界を明確にするために使います。
A.パーツ同士、またはポート同士の接続を表し、依存関係や連携経路を示します。
A.主に構造を表す図です。処理順序や振る舞いまで示したい場合は、シーケンス図などを併用します。
A.内部が複雑で、責務分割や接続ルール、差し替え点を関係者で共有したいときに使いやすくなります。
A.対象範囲を先に決め、責務単位でパーツを切り出し、粒度が合わない部分は別図へ分けると読みやすくなります。
A.更新責任者と更新タイミングを決め、実装とずれたまま放置しない運用にすると形骸化を防ぎやすくなります。
A.十分とは限りません。全体像はコンポーネント図、振る舞いはシーケンス図などと併用した方が伝わりやすくなります。