コンポーネント図は、システムの物理的または論理的なコンポーネントを表します。ソフトウェアの部品どうしがどのように相互作用するかを高レベルで示します。このガイドでは、明確で効果的な図を描くための記号、ルール、実用的なヒントを詳しく説明します。

コンポーネントモデリング入門 🏗️
コンポーネント図は、クラス図よりも高いレベルでのシステム構造に注目します。異なるモジュールやサブシステムがどのように構成されているかを示します。この視点により、開発者はソフトウェアアーキテクチャの物理的デプロイメントと論理的依存関係を理解しやすくなります。
主な利点には以下が含まれます:
- システム構成の可視化
- インターフェース契約の定義
- モジュール間の依存関係の追跡
- 高レベル設計文書のサポート
これらの図を作成する際の目標は明確さです。すべてのクラスを表示しないようにしましょう。アプリケーションを構成する主要な構成要素に注目してください。
基本的な記号と表記法 🔣
標準的な記号を理解することが第一歩です。これらの要素が図の視覚的言語を定義します。
1. コンポーネントアイコン
主な記号は、左側に2つのタブがある長方形です。この形状はシステムのモジュール化された部分を表します。長方形の内部には、コンポーネントの名前を記入します。
- 形状:左側に2つのタブがある長方形。
- ラベル:太字のコンポーネント名。
- ステレオタイプ:名前上に「<」のようなラベルを追加できます。
>」のようなラベルを名前の上に追加できます。
2. インターフェース
インターフェースは、コンポーネントが提供するか必要とする振る舞いを定義します。実装と使用の分離に不可欠です。
- 提供インターフェース:コンポーネントに接続された「ラムネ」のような形状。コンポーネントが提供する機能を示します。
- 要件インターフェース:コンポーネントに接続された「ソケット」のような形状。コンポーネントが他のものから必要とする機能を示します。
3. ポート
ポートはコンポーネントの相互作用のポイントです。コンポーネントが異なるシステムに複数の接続を持つ場合に頻繁に使用されます。
- 記号: コンポーネントの縁にある小さな長方形。
- 使用法: 外部接続が入出する場所を示す。
4. ノード
コンポーネント図はソフトウェアに焦点を当てるが、しばしばデプロイメントに関連する。ノードは物理的なハードウェアまたは実行環境を表す。
- 記号: 3Dキューブ形状。
- ラベル: サーバー、デバイス、または環境の名前。
| 記号 | 名前 | 意味 |
|---|---|---|
| タブ付きの長方形 | コンポーネント | システムのモジュール化された部分 |
| ロリポップ | 提供インターフェース | コンポーネントが提供する機能 |
| ソケット | 必要インターフェース | コンポーネントが必要とする機能 |
| 3Dキューブ | ノード | 物理的なハードウェアまたは環境 |
| 開かれた長方形 | パッケージ | 要素のグループ化 |
インターフェースとポートの概念 🔌
インターフェースはコンポーネント間の橋渡しである。それらはコンポーネント同士が互いの内部詳細を知らずに通信できることを保証する。
提供インターフェース
コンポーネントが特定の機能を実装するとき、そのコンポーネントはインターフェースを提供する。他のコンポーネントはこのインターフェースを使ってシステムとやり取りできる。
- インターフェースを表すために、円(ラムネの玉)を使用する。
- インターフェースをコンポーネントの線に接続する。
- 利用可能な特定の操作をインターフェースにラベル付ける。
要件インターフェース
コンポーネントが外部機能に依存する場合、そのコンポーネントはインターフェースを要する。これにより依存関係が生じる。
- インターフェースを表すために、半円(ソケット)を使用する。
- ソケットをコンポーネントの線に接続する。
- 必要な操作をインターフェースにラベル付ける。
ポートの使用
ポートはインターフェースの概念を洗練したものである。複数のインターフェースを単一のアクセスポイントの下にグループ化できる。
- ポートをコンポーネントの端に配置する。
- コンポーネントの本体ではなく、ポートに線を接続する。
- 多くの接続がある場合、図を整理しやすくする。
関係と依存関係 🔄
コンポーネントを正しく接続することは、システムの流れを理解するために不可欠である。異なる線は異なる種類の相互作用を表す。
依存関係
依存関係は、あるコンポーネントが別のコンポーネントに依存していることを示す。サプライヤーが変更された場合、クライアントが破損する可能性がある。
- スタイル:破線で、矢印が開いているもの。
- 方向:クライアントからサプライヤーへ向かう。
- 使用法:インターフェースの使用や単純な参照に使用する。
関連
関連は構造的な関係を表す。2つのコンポーネントの直接的な接続を意味する。
- スタイル:実線。
- 使用法: コンポーネントが大きな全体の一部である場合、または直接データを共有する場合に使用する。
実現
コンポーネントがインターフェースまたは仕様を実装するときに実現が発生する。
- スタイル:破線で、実線の矢印頭を備える。
- 方向:実装者からインターフェースへ向かう。
一般化
一般化は継承を表す。1つのコンポーネントは、別のコンポーネントの特殊化されたバージョンである。
- スタイル:実線で、空洞の三角形の矢印を備える。
- 方向:サブクラスからスーパークラスへ向かう。
| 関係 | 線のスタイル | 矢印の種類 | 目的 |
|---|---|---|---|
| 依存関係 | 破線 | 開放矢印 | 使用または依存 |
| 関連 | 実線 | なし | 直接接続 |
| 実現 | 破線 | 実線の三角形 | 実装 |
| 一般化 | 固体 | 空洞の三角形 | 継承 |
構造上のルールと慣習 📏
一貫性があることで図は読みやすくなります。品質を維持するためにこれらの慣習に従ってください。
命名規則
- コンポーネント名にはPascalCaseを使用してください(例:PaymentService).
- インターフェース名にはcamelCaseを使用してください(例:paymentInterface).
- 名前は説明的であるようにしてください。業界標準でない限り、省略語は避けてください。
グループ化とパッケージ
- 関連するコンポーネントをグループ化するためにパッケージを使用してください。
- パッケージに明確なラベルを付けてください(例:Core, UI, Data).
- コンポーネントをパッケージ内にネストすることで、図がごちゃごちゃにならないようにしてください。
レイヤー化
コンポーネントをレイヤーごとに論理的に整理してください。これによりデータの流れを理解しやすくなります。
- プレゼンテーションコンポーネントを上部に配置してください。
- ビジネスロジックを中央に配置してください。
- データアクセスを下部に配置してください。
避けたい一般的なミス ⚠️
経験豊富なアーキテクトでさえ誤りを犯す。これらの一般的な落とし穴に注意してください。
- 複雑化しすぎ:すべてのクラスを描き込まないでください。コンポーネント図は高レベルのものです。クラスが見える場合は、おそらくクラス図の中にいる可能性があります。
- インターフェースの欠落:インターフェースなしでコンポーネントを直接接続しないでください。これにより、結合が強くなりすぎます。
- 命名の不一致:すべての名前がコードベースまたはドキュメントと一致していることを確認してください。名前の不一致は混乱を招きます。
- 循環依存:コンポーネントAがBに依存し、BがAに依存するようなループを避けてください。これは設計上の欠陥を示しています。
- ポートの無視:コンポーネントが多数のものと接続している場合は、レイアウトを整理するためにポートを使用してください。
ドキュメント化と保守 📝
図は常に最新の状態でなければ意味がありません。常に更新されるドキュメントとして扱いましょう。
バージョン管理
- 図のファイルをバージョン管理システムに保存してください。
- アーキテクチャが変更されたら、図も更新してください。
- 変更内容をコミットメッセージに記録してください。
相互参照
- 詳細なビューを得るために、コンポーネント図をクラス図にリンクしてください。
- 物理的な文脈を得るために、デプロイメント図にリンクしてください。
- すべての図でコンポーネント名が正確に一致していることを確認してください。
レビュー過程
- 同僚に図の明確さをレビューしてもらいましょう。
- インターフェースが実際のAPI契約と一致しているか確認してください。
- 依存関係が実際のビルド順序を反映していることを確認してください。
高度な考慮事項 🧠
複雑なシステムでは、標準的な記号の調整が必要になる場合があります。
複合コンポーネント
場合によっては、コンポーネントの中に他のコンポーネントが含まれます。これを複合構造と呼びます。
- より大きなコンポーネントボックスを描いてください。
- 小さなコンポーネントをその中に配置してください。
- 外部に接続せずに、内部の接続を示してください。
パッケージ内のインターフェース
大きなシステムを整理するために、インターフェースをパッケージにグループ化できます。
- すべてのサービスインターフェース用のパッケージを作成してください。
- すべてのデータインターフェース用のパッケージを作成してください。
- これらのパッケージをコンポーネント図で参照してください。
ドキュメント作成のベストプラクティス 📋
これらのヒントに従うことで、図が目的を効果的に果たすことが保証されます。
- 全体像から始めましょう:まず主要なコンポーネントを定義してください。詳細は後で追加します。
- 余白を活用しましょう:要素を詰め込みすぎないでください。スペースを使って関連する項目をグループ化してください。
- 接続を制限しましょう:コンポーネントに線が多すぎたら、サブコンポーネントに分割することを検討してください。
- 一貫した配置:コンポーネントを行または列に並べて、視線を誘導してください。
- 凡例:標準でない記号を使用する場合は、凡例を含めてください。
主なポイントのまとめ 🎯
- コンポーネント、インターフェース、ポートには標準的な記号を使用してください。
- 結合を減らすために、明確なインターフェースを定義してください。
- 依存関係には破線を使用し、関連には実線を使用してください。
- 図を高レベルに保ち、個々のクラスを表示しないようにしてください。
- 名前付けと構造の整合性を保ってください。
- 図をコードベースと定期的に同期してください。
これらのガイドラインに従うことで、アーキテクチャを明確に伝える図を作成できます。これにより、開発中の協力が向上し、エラーが減ります。












