現代のソフトウェアアーキテクチャにおいて、コードが物理的インフラとどのように相互作用するかを理解することは非常に重要です。UMLデプロイメント図は、この相互作用のための設計図を提供します。ソフトウェアアーティファクトが配置される物理的なノードと、それらがどのように通信するかを可視化します。このガイドでは、特定のツールやマーケティング用語に依存せずに、デプロイメント図のメカニズム、表記法、実践的な応用について探求します。

🧩 デプロイメント図とは何か?
デプロイメント図は、統合モデル言語(UML)における静的構造図です。システムの物理的アーキテクチャを記述します。論理に焦点を当てるクラス図や、フローに焦点を当てるシーケンス図とは異なり、デプロイメント図はトポロジーに注目します。コンポーネントがどこに存在するかという問いに答えます。
- ハードウェアの表現: サーバー、ルーター、ワークステーション、モバイルデバイス。
- ソフトウェアの表現: 実行可能ファイル、ライブラリ、データベース、オペレーティングシステム。
- 接続性: これらのエンティティがデータを交換できるようにするネットワークリンク。
この図は、開発者、システムアーキテクト、運用チームの間のコミュニケーションの橋渡しをします。実装を開始する前に、すべての人が環境について合意していることを保証します。
🔑 主な構成要素と表記法
これらの図を効果的に読み取るか作成するには、UML仕様で使用される標準的な記号を理解する必要があります。これらの記号は普遍的であり、独自のソフトウェアに依存しません。
🖥️ ノード(計算リソース)
主な構成要素はノードです。UML表記では、ノードは3次元の立方体で表されます。これは、アーティファクトをホストできる計算リソースを表します。
- デバイス: 物理的なハードウェアデバイスであるノードです。例として、ラップトップ、サーバー、モバイルフォンがあります。
- 実行環境: 実行環境を提供するノードです。例として、オペレーティングシステム、仮想マシン、データベース管理システムがあります。
- アーティファクト: ソフトウェアの物理的表現です。実行可能ファイル、ファイル、またはデータストアを含みます。
📄 アーティファクト
アーティファクトは、ノードにデプロイされるソフトウェアアイテムです。文書アイコン(折り返しのある長方形)として描かれます。
- 実行可能ファイル: サーバー上で実行されるコンパイル済みコード。
- ライブラリ: アプリケーションが必要とする共有コードモジュール。
- データベース: 特定のノード上に存在するストレージ構造。
- 設定ファイル: ソフトウェアがその環境でどのように動作するかを定義する設定。
🔗 通信経路
ノードがシステムとして機能するためには、相互に通信する必要がある。それらを結ぶ線は、通信の媒体を表している。
- 関連: 接続が存在することを示す単純な線。
- 依存関係: 一方のノードがもう一方のノードを必要としていることを示す、矢印付きの破線。
- メッセージの流れ: データ転送の方向を示す矢印。
🛠️ 基本構成要素:ノードとアーティファクト
図を構築するには、ノードとアーティファクトの慎重な選択が必要である。粒度が鍵となる。詳細が多すぎると混雑し、少なすぎると曖昧さが生じる。
物理的ノードと論理的ノード
デプロイメント図は、二つの抽象レベルで見ることができる。
- 物理的: 実際のハードウェアを表す。特定のラックサーバー、ファイアウォールボックス、またはクライアントワークステーションが見えるかもしれない。
- 論理的: 機能的なグループを表す。具体的なハードウェアを指定せずに、「Web層」や「データ層」が見えるかもしれない。
適切なレベルを選ぶことは、対象となる読者に依存する。運用チームは物理的な詳細が必要である。開発者にとっては論理的なグループ化の方が好まれるかもしれない。
アーティファクトをノードにマッピングする
アーティファクトは、それらが存在するノード上に配置されなければならない。この関係は、通常、実線またはネスト構造で示される。アーティファクトはノードの内部に描かれ、またはノードに接続される。
標準的なWebアプリケーション構造を考えてみよう:
- Webサーバー・ノード: HTMLファイル、CSS、JavaScriptをホストする。
- アプリケーションサーバー・ノード: バックエンドロジックをホストする(例:JavaアーカイブやPythonスクリプト)。
- データベースサーバー・ノード: SQLファイルまたはNoSQLデータストアをホストする。
🔗 接続と依存関係
接続性はシステムの機能を定義します。ノード間の線は単なる線ではなく、プロトコルや制約を表しています。
ネットワークプロトコル
UMLは線にプロトコル名を強制しませんが、ラベルを付けることがベストプラクティスです。これによりデータの移動方法が明確になります。
| 接続タイプ | 一般的なプロトコル | 使用例 |
|---|---|---|
| HTTP/HTTPS | Webリクエスト | ブラウザからサーバー |
| SQL/JDBC | データベースクエリ | アプリケーションサーバーからデータベースサーバー |
| ソケット/SSH | セキュアシェル | 管理者からサーバー |
| ファイル転送 | FTP/SFTP | バックアップシステム |
依存関係
すべての接続が同等ではありません。依存関係は、ソースノードがターゲットノードなしでは機能できないことを意味します。たとえば、アプリケーションサーバーはデータベースサーバーに依存しています。データベースが停止している場合、アプリケーションはトランザクションを処理できません。
📝 ステップバイステップ構築ガイド
デプロイメント図を作成するには、体系的なアプローチが必要です。正確性と明確性を確保するために、以下のステップに従ってください。
1. スコープを特定する
システムの境界を定義してください。全体のエンタープライズを図示しているのか、それとも特定のマイクロサービスだけなのか。スコープが詳細度を決定します。
2. ハードウェアリソースを一覧化する
関与するすべての物理デバイスをリストアップしてください。次を含むこと:
- アプリケーションサーバー
- ロードバランサー
- ファイアウォール
- クライアントデバイス
- ネットワークスイッチ
3. ソフトウェアアーティファクトのインベントリ
展開が必要なソフトウェアコンポーネントをリストアップしてください。次を含むこと:
- オペレーティングシステムのバージョン
- ミドルウェア(例:Webサーバーソフトウェア)
- アプリケーション実行可能ファイル
- データベースインスタンス
4. 関係性の定義
ノードを結ぶ線を描いてください。プロトコルがわかっている場合は指定してください。矢印が主なデータフローの方向を向いていることを確認してください。
5. 完全性の確認
すべてのアーティファクトに適切な場所があることを確認してください。すべてのノードがネットワークの他の部分と論理的に接続されていることを確認してください。セキュリティゾーンが正しく表現されていることを確認してください。
🎨 ビジュアルの基準とレイアウト
図が読み取れないならば、無意味です。ビジュアルの基準に従うことで理解が深まります。
- 一貫性:図全体で類似したノードには同じアイコンスタイルを使用してください。
- 間隔:線が重複しないように、ノードの間に余白を空けてください。
- グループ化:関連するコンポーネントをグループ化するために、サブノードまたは境界を使用してください。
- ラベル付け:ラベルは簡潔に保つこと。必要に応じて、長い説明にはテキストボックスを使用してください。
セキュリティゾーン
セキュリティは展開において重要な側面です。境界を使用してセキュリティゾーンを示してください。
- パブリックゾーン:インターネットからアクセス可能。ロードバランサーとWebサーバーを含む。
- DMZ(非武装地帯):半信頼。プロキシまたはゲートウェイを含む。
- 内部ゾーン:信頼。データベースとバックエンドロジックを含む。
これらのゾーンを可視化することで、セキュリティチームはアーキテクチャ上の潜在的な脆弱性を特定しやすくなります。
🚫 避けるべき一般的な誤り
経験豊富なアーキテクトですら誤りを犯します。図の整合性を保つために、これらの一般的な誤りを避けてください。
- 複雑化:すべてのマイクロサービスを1つの図に含めると、読みにくくなります。機能やレイヤーごとに図を分割してください。
- レイテンシを無視する:ネットワーク距離を示さない。ローカルデータベースとリモートのクラウドデータベースは異なります。
- 静的状態:デプロイメント図は変化します。インフラ構成が変更された際には、図が更新されていることを確認してください。古くなった図は、図がないよりも悪いです。
- ハードウェアの欠落:ソフトウェアだけに注目する。ハードウェアの制限(CPU、RAM)は、ソフトウェアのパフォーマンスを左右することが多いです。
- 明確でないラベル:聴衆が理解できない略語を使用する。必要に応じて用語を定義してください。
☁️ クラウドとオンプレミスの表現
現代のアーキテクチャはしばしばハイブリッド環境を含みます。クラウドリソースを表現するには、特定の配慮が必要です。
クラウドノード
クラウド環境では、ハードウェアが抽象化されています。「サーバー」は仮想インスタンスである可能性があります。
- 仮想マシン:クラウドアイコンまたはラベルを備えたノードとして表現されます。
- PaaS(プラットフォーム・アズ・ア・サービス):OSを指定せずに実行環境として表現されます。
- SaaS(ソフトウェア・アズ・ア・サービス):ネットワーク経由でアクセスされる外部アーティファクトとして表現されます。
ネットワークトポロジー
クラウド図には、しばしばリージョンと可用性ゾーンが含まれます。
- リージョン:複数のデータセンターを含む地理的領域。
- 可用性ゾーン:リージョン内の異なるデータセンター。
これらを図示することで、システムが冗長性と災害復旧を考慮して設計されていることを保証できます。
🔄 他のUMLモデルとの統合
デプロイメント図は孤立して存在するものではありません。他のUML図と連携することで、システム全体の視点を提供します。
クラス図との関係
クラス図はソフトウェアの構造を定義します。デプロイメント図はその構造が実行される場所を定義します。デプロイメント図内のアーティファクトは、通常、クラス図内のクラスまたはパッケージに対応します。
コンポーネント図との関係
コンポーネント図はソフトウェアモジュールを示します。デプロイメント図は物理的なノードを示します。コンポーネント図は、デプロイメント図に見られる「アーティファクト」を精緻化します。
アクティビティ図との関係
アクティビティ図はアクションの流れを示します。デプロイメント図は、これらのアクションが発生する場所の文脈を提供します。たとえば、「支払い処理」というアクティビティは、「支払いサーバー」ノードで発生する可能性があります。
🔍 メンテナンスとライフサイクル
アーキテクチャは静的ではありません。要件や技術の変化に伴って進化します。
バージョン管理
コードと同様に、図もバージョン管理する必要があります。ソフトウェアリリースと一致するバージョンで図にタグを付けることで、監査時に古いアーキテクチャと新しいアーキテクチャを比較できるようになります。
自動生成
一部のワークフローでは、デプロイメント図が構成ファイルから自動生成されます。手動での描画は柔軟性を提供しますが、自動生成により図が実際のインフラ構成と一致することが保証されます。ただし、これには厳格な構成管理が必要です。
レビューのサイクル
プロジェクトの設計フェーズに図のレビューを組み込みます。コードを書く前に、デプロイメント計画は承認されなければなりません。これにより、ハードウェアのプロビジョニングが誤って行われた場合の高コストな再作業を防ぐことができます。
📊 記法要素の概要
すばやく参照できるように、この種のモデリングで使用される最も一般的な要素をまとめます。
| 要素 | 形状 | 意味 |
|---|---|---|
| ノード | 立方体 | ハードウェアまたは実行環境 |
| アーティファクト | ドキュメントアイコン | ソフトウェアファイルまたはデータ |
| 関連 | 実線 | 物理的接続 |
| 依存関係 | 破線 + 矢印 | 論理的要件 |
| 境界 | ラベル付き長方形 | セキュリティゾーンまたはグループ化 |
🚀 実際の例シナリオ
企業がモノリスから分散型システムへ移行するシナリオを考えてみましょう。
- フェーズ1(モノリス):アプリケーションとデータベースを一緒にホストする単一のサーバーノード。
- フェーズ2(分割):ネットワークリンクによって分離されたアプリケーションサーバーノードとデータベースサーバーノード。
- フェーズ3(クラウド):複数の異なる地域にまたがるアプリケーションサーバーノードにトラフィックを配信するロードバランサーノード。
各フェーズには別々のデプロイメント図が必要です。図の間の移行がアーキテクチャの進化を記録します。
🔐 セキュリティ上の考慮事項
セキュリティは後から考えるものではありません。図にはセキュリティ制御を反映すべきです。
- ファイアウォール:ゾーン間のトラフィックをフィルタリングするノードとして描画される。
- 暗号化:安全な通信を示すために、線に「SSL/TLS」とラベルを付ける。
- 認証:認証トークンが検証される場所(例:ロードバランサーやアプリケーションサーバー)をメモする。
セキュリティ境界を可視化することで、アーキテクトは単一障害点やセキュリティが確保されていないデータ経路を特定できます。
📈 スケーラビリティへの影響
デプロイメント図は成長計画に役立ちます。
- 水平スケーリング:同じタイプのノードを追加する。図では、ロードバランサーに接続された複数の同一ノードが示される。
- 垂直スケーリング:単一ノードのハードウェアをアップグレードする。図にはノードの容量制限を示すことがある。
これらの選択肢を理解することで、容量計画が容易になる。図は将来の拡張の地図として機能する。
🤝 コラボレーションの利点
最後に、これらの図はコラボレーションを促進します。
- 開発者:コードをどこにデプロイするかを把握する。
- 運用チーム:ネットワークをどのように設定するかを把握する。
- 経営陣:インフラ構成のコストを理解する。
共有された視覚言語は誤解を減少させます。ソフトウェアシステムの物理的現実についてチームを一致させます。












