「時間」より「繋がり」!コミュニケーション図でオブジェクトのネットワークを俯瞰する
1. 結論:コミュニケーション図は「メッセージ付きの相関図」である
結論から言うと、コミュニケーション図とは 「オブジェクト間の関係(リンク)をベースに、メッセージのやり取りを番号順に記述した図」 です。
- 配置が自由:シーケンス図のようにライフラインが横に並ぶ制約がなく、オブジェクトを自由に配置できます。
- 構造を強調:どのオブジェクトがハブ(中心)になって動いているのか、ネットワーク構造が一目でわかります。
UML 1.x系では「コラボレーション図」と呼ばれていましたが、UML 2.0から「コミュニケーション図」という名前に変わりました。本質は変わりませんが、IT試験などでは古い名前で出てくることもあるので注意が必要です。
2. 理由:なぜ「コミュニケーション図」が必要なのか?
「シーケンス図があれば十分ではないか?」という疑問は、設計の現場でもよく挙がります。しかし、コミュニケーション図にはシーケンス図の弱点を補う独自の強みがあります。
① 「密結合」な部分を見つけやすいため
シーケンス図は縦に長くなるため、特定のオブジェクトにメッセージが集中していても気づきにくいことがあります。コミュニケーション図なら、一箇所から四方八方に線が伸びている様子が見えるため、「あ、このクラスに責任が集中しすぎているな(神クラス化)」という設計上の問題を視覚的に発見できます。
② 物理的な配置に近い表現ができるため
例えば、分散システムやマイクロサービスのように、ネットワーク越しに複数のサーバーが絡む場合、実際の物理構成(トポロジー)に近い形でオブジェクトを配置できるコミュニケーション図の方が、直感的に理解しやすいことがあります。
③ スペースを有効活用できるため
登場人物(オブジェクト)が非常に多い場合、シーケンス図は横幅が広くなりすぎて画面に収まりきらなくなります。コミュニケーション図は二次元的に自由に配置できるため、複雑な関係性もコンパクトにまとめられます。
3. コミュニケーション図を構成する「3つの基本要素」
コミュニケーション図は、オブジェクト図にメッセージ情報を書き足したような形をしています。
① オブジェクト(Object)
クラス図やシーケンス図と同じく、四角い箱で表します。
- 表記:
<u>オブジェクト名 : クラス名</u>(下線を忘れずに!)
② リンク(Link)
オブジェクト間を結ぶ実線です。メッセージはこの線に沿って流れます。
- クラス図の「関連」のインスタンス版です。
③ メッセージ(Message)
リンクの横に添えられる小さな矢印と、メソッド名のセットです。
-
順序番号(Sequence Number):ここが最も重要です。シーケンス図のように上から下という時間のルールがないため、
1: doIt()、2: result()のように番号を振って実行順序を示します。 -
階層番号:
1.1: check()、1.2: validate()のようにドットで区切ることで、あるメソッドの中で呼ばれるサブメソッドの流れ(ネスト)を表現します。
4. 【決定版】シーケンス図 vs コミュニケーション図
この2つは「相互作用図」という同じカテゴリーに属しており、「意味的に等価」 です。つまり、同じ処理をどちらの図でも描けますし、ツールを使えば相互変換も可能です。
【表1】2つの図の比較
| 項目 | シーケンス図 | コミュニケーション図 |
|---|---|---|
| 主役 | 時間の経過 | オブジェクトの構造 |
| 配置 | ライフラインが横一列 | 自由に配置(二次元的) |
| 順序の確認 | 上から下へ見るだけ | **番号(1, 1.1...)**を追う |
| 得意なこと | 複雑なロジックの流れを確認 | オブジェクト間の依存関係を確認 |
| 不得意なこと | オブジェクト数が増えると横に長すぎる | メッセージ数が増えると番号を追うのが大変 |
5. 【具体例】ショッピングサイトの「注文処理」
以前のシーケンス図の例をコミュニケーション図に書き換えてみましょう。
登場人物
<u>customer : Customer</u><u>cart : ShoppingCart</u><u>order : Order</u>
流れ
-
customerがcartにcheckout()を送る。 -
cartがorderをcreate()する。 -
cartがorderにcalcTotal()を送る。
コミュニケーション図での表現
-
customerとcartを線で結び、1: checkout()と書く。 -
cartとorderを線で結び、2: create()と3: calcTotal()を書く。 - 配置を三角形にしたり、L字型にしたりして、一番「見やすい」形に整えます。
6. 基本情報技術者試験での重要ポイント
試験では、主に「シーケンス図」が主役ですが、コミュニケーション図も選択肢や用語問題として登場します。
- 「意味的に等価である」:シーケンス図とコミュニケーション図は、表現の力点は違えど、表している情報は同じであるという点は頻出です。
- メッセージの順序番号:番号の振り方(1 -> 1.1 -> 1.2 -> 2...)のルールを理解しているか問われます。
- UML 1.xとの名称違い:前述の通り、「コラボレーション図」という別名に注意してください。
7. まとめ:図を使い分ける「プロの判断基準」
- 結論:コミュニケーション図は、オブジェクトの「繋がり」を重視した振る舞いの図である。
- 役割:構造的なボトルネック(依存の集中)を発見したり、配置の自由度を活かして複雑なネットワークを描くのに向く。
-
使い分け:
- 「ロジックが正しいか、時間の流れを厳密に追いたい」なら、シーケンス図。
- 「クラス同士の繋がりが多すぎて、誰が誰を知っているか整理したい」なら、コミュニケーション図。
シニアエンジニアとしてのアドバイスは、「最初はシーケンス図を描き、もしそれが縦にも横にも長くなりすぎて収拾がつかなくなったら、コミュニケーション図への書き換えを検討せよ」 ということです。
参考リンク集
-
OMG UML Specification - Section 17.6 (Communication Diagrams)
- 公式の厳密な仕様定義。
-
IPA:基本情報技術者試験 シラバス(相互作用図)
- 試験におけるコミュニケーション図の位置づけ。
-
IBM Documentation - コミュニケーション図
- モデリングツールにおける具体的な描き方と注意点。