IT用語集

コンポジット構造図とは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

UnsplashAmperが撮影した写真

コンポジット構造図は、UMLの構造図の一つで、クラスやコンポーネントの内部にある部品、接続、外部との境界を表す図です。使いどころは、責務分割や接続ルールを関係者で共有したい場面です。逆に、内部構造が単純な対象や、設計方針自体がまだ固まっていない段階では、クラス図やコンポーネント図だけで足りることもあります。

判断の軸は明確です。全体の関係だけを見せたいならクラス図やコンポーネント図、内部の部品構成と接続のしかたまで見せたいならコンポジット構造図、処理の流れまで説明したいならシーケンス図を併用する、という住み分けにすると使い分けやすくなります。

コンポジット構造図とは

概要

コンポジット構造図は、UMLで内部構造を表すための図です。外から見た関連だけではなく、内部に含まれるパーツ、パーツ同士の接続、外部と接続するポートまで表せます。対象はクラスに限らず、コンポーネントなどの内部構成を説明したい場面にも広がります。

何を明らかにする図なのか

この図で整理したいのは、主に次の三点です。

  • 内部を構成する部品が何か
  • 各部品がどの責務を持つか
  • 部品同士と外部が、どの境界で接続するか

実装前の設計レビューでは責務分割の確認に使いやすく、実装後の保守では変更影響の見積もりにも使いやすくなります。

クラス図・コンポーネント図との違い

クラス図クラスの属性、操作、関連といった静的構造を整理する図です。型の関係や責務の整理に向きます。
コンポーネント図モジュールやコンポーネント単位の依存関係、提供インターフェース、配置単位の関係を整理する図です。全体像の共有に向きます。
コンポジット構造図対象の内部にあるパーツ、ポート、コネクタを表し、内部設計と接続ルールを具体化する図です。責務境界と依存の向きの共有に向きます。

代替関係ではなく補完関係として扱う方が実態に合います。全体の輪郭はコンポーネント図で示し、内部の構造だけをコンポジット構造図で掘る使い方だと、図の役割がぶれにくくなります。

コンポジット構造図の主な構成要素

パーツ

パーツは、内部に含まれる構成要素を表します。たとえば Validator、Repository、Adapter のように、責務単位で切り出した部品を表す場面で使います。クラス図の属性と見た目は近くても、こちらは接続と協調まで含めて示す意図が強くなります。

ポート

ポートは、対象やパーツが外部とやり取りする境界です。どのインターフェースを提供し、どのインターフェースに依存するかを整理しやすくなります。外部公開API、内部サービスの入口、外部I/Fとの接点などを明示したい場面で使いやすくなります。

コネクタ

コネクタは、パーツ同士、またはポート同士の接続を表します。誰が誰につながるかを可視化できるため、依存の向き、責務集中、循環依存の兆候を読み取りやすくなります。

コラボレーション

コラボレーションは、複数の役割が協調して機能を実現する前提を表す要素です。日常的な設計説明では、まずパーツ、ポート、コネクタを押さえるだけで足りることも多く、コラボレーションは協調パターンまで整理したい場合に追加すると図が過密になりにくくなります。

どんな場面で使うと効果が出やすいか

責務分割を合意したいとき

サービス層、制御部、外部I/F、永続化層のように役割が分かれている設計では、内部構造を文章だけで共有すると解釈が割れやすくなります。コンポジット構造図を使うと、どの部品が何を担うかを図で固定しやすくなります。

接続ルールを明示したいとき

差し替え可能な部品、テストダブルを入れる境界、外部連携の依存点を整理したい場合は、ポートとコネクタを明示する価値が高くなります。複数チームで実装を分担する場面でも、接続契約の共有に使いやすくなります。

変更影響を狭くしたいとき

どこを直せばよいか、どこまで影響するかを把握しやすくなるため、保守や改修の議論でも使いやすくなります。依存の向きが揃っていない設計では、図にした段階で問題が見えやすくなります。

使わない方がよい場面

対象が単純なとき

内部部品が少なく、接続関係も単純なら、クラス図やコンポーネント図だけで十分なことがあります。図を増やすほど理解しやすくなるとは限りません。

設計が流動的な初期段階

責務分割も接続ルールもまだ揺れている段階で細かく描くと、図だけがすぐ古くなります。先に全体像や主要インターフェースを固め、その後に必要な箇所だけ詳細化した方が更新しやすくなります。

処理の流れを説明したいとき

コンポジット構造図は静的な構造の説明に向く図です。時系列の処理、例外時の分岐、呼び出し順序まで伝えたい場合は、シーケンス図など別の図を併用した方が誤解を減らせます。

作成手順

1. 対象範囲を決める

最初に決めるべきなのは、どのクラス、どのコンポーネント、どのサブシステムの内部を描くかです。範囲が広すぎると、図が説明資料ではなく一覧表になりやすくなります。

2. パーツを責務単位で切り出す

内部の部品を洗い出し、それぞれの責務を一文で言える状態にします。クラスを機械的に並べるのではなく、検証、永続化、外部連携、変換といった役割単位で切る方が読みやすくなります。

3. 接続関係を整理する

どのパーツがどのパーツへ依存するか、依存の向きが自然か、不要な双方向参照がないかを確認します。ここで循環依存や責務の偏りが見つかることもあります。

4. ポートで境界を固定する

外部との接続点や差し替えたい依存点にポートを置き、提供する契約と要求する契約を整理します。チーム境界やテスト境界を明示したいときに効きます。

5. 更新できる粒度に整える

最後に、図の粒度と命名を揃えます。パーツ名が役割を表しているか、接続が読み取れる配置になっているか、更新責任者と更新タイミングが決まっているかまで含めて整えると、図が保守資料として残りやすくなります。

作るときに起きやすい失敗

パーツを細かく分けすぎる

責務単位ではなくクラス単位で全部を出すと、図が密集して読みづらくなります。詳細化が必要な範囲だけを切り出し、他は別図へ逃がした方が情報の焦点を保ちやすくなります。

ポートを置かずに直接つなぐ

すべての接続を直接線で結ぶと、依存境界が曖昧になります。外部との接点や差し替え点は、ポートを明示した方が意図が残ります。

構造図だけで動きを説明しようとする

どの部品があるかは分かっても、いつ、どの順に呼ばれるかまでは構造図だけでは伝わりません。代表的なユースケースだけでも別の振る舞い図を併記した方が設計意図は伝わりやすくなります。

まとめ

コンポジット構造図は、クラスやコンポーネントの内部にあるパーツ、ポート、コネクタを使って、内部構造と接続ルールを表すUMLの図です。効く場面は、責務分割、依存境界、差し替え点を合意したいときです。対象が単純なら無理に使う必要はなく、全体像は別図、内部設計だけをこの図で示す使い分けにすると、設計資料として機能しやすくなります。

Q.コンポジット構造図とは何ですか?

A.UMLの構造図の一種で、クラスやコンポーネントの内部構造と接続関係を表す図です。

Q.クラス図やコンポーネント図と何が違いますか?

A.外側の関係だけでなく、内部のパーツ構成、ポート、コネクタまで踏み込んで表現できる点が違います。

Q.パーツとは何を表しますか?

A.内部に含まれる部品を表し、どの部品がどの責務を担うかを示します。

Q.ポートは何のために使いますか?

A.外部との出入口として、提供する機能と依存する機能の境界を明確にするために使います。

Q.コネクタは何を表しますか?

A.パーツ同士、またはポート同士の接続を表し、依存関係や連携経路を示します。

Q.コンポジット構造図は動きも表現できますか?

A.主に構造を表す図です。処理順序や振る舞いまで示したい場合は、シーケンス図などを併用します。

Q.どんなときに描くと効果が出ますか?

A.内部が複雑で、責務分割や接続ルール、差し替え点を関係者で共有したいときに使いやすくなります。

Q.図が複雑になりすぎるのを防ぐ方法はありますか?

A.対象範囲を先に決め、責務単位でパーツを切り出し、粒度が合わない部分は別図へ分けると読みやすくなります。

Q.設計が変わったとき、図はどう扱うべきですか?

A.更新責任者と更新タイミングを決め、実装とずれたまま放置しない運用にすると形骸化を防ぎやすくなります。

Q.コンポジット構造図だけで設計は十分ですか?

A.十分とは限りません。全体像はコンポーネント図、振る舞いはシーケンス図などと併用した方が伝わりやすくなります。

記事を書いた人

ソリトンシステムズ・マーケティングチーム