PlantUMLオブジェクト図の構文ガイド

オブジェクト図とは何ですか?

あるオブジェクト図は構造的なUML図アプリケーションの状態を具体的かつリアルタイムで捉えたスナップショットとして機能します。クラス図がシステムの抽象的な設計図、データ型、構造ルールを示すのに対し、オブジェクト図は特定の時点における実行中のインスタンスを可視化します。実際のオブジェクトのインスタンス化をモデル化し、フィールドに割り当てられた正確な値を表示し、実行時におけるそれらのインスタンス間の具体的な関連性を強調します。

この特定のUML図の種類は、複雑なデータ構造のデバッグ、非常にネストされた関係状態(親子ツリー構造など)の説明、または特定のエッジケース変数下でエンジニアリング設計パターンが想定通りに動作することの検証において非常に価値があります。VPasCodeを使用すれば、手動のボックス描画ツールを完全に回避して、ライブオブジェクト関係をクリーンにスクリプト化できます。

コア構文ガイド:要素と構成

PlantUMLで正確で標準準拠のUMLオブジェクト図を設計するには、オブジェクトのインスタンス化、フィールド値の割り当て、インスタンスリンクのマッピングを理解する必要があります。

1. オブジェクトのインスタンス化(名前 vs. クラス型)

オブジェクトはobjectキーワードを使用して宣言します。標準的なUMLモデリング規則に基づき、オブジェクトはその固有のインスタンス名、コロン、および親クラスのブループリント型を指定して定義します:

プロのヒント:常にasキーワードを使用して、長いインスタンス名の宣言を短い内部省略ID(例:activeUser)にマッピングすることで、リンク線の描画を迅速かつ明確にできます。

2. フィールド状態および実行時値の割り当て

オブジェクトにテストデータ値を入力するには、末尾に波かっこを使用してボディブロックを開き、データのキーと値の割り当てを別々の行に記述します。クラス定義とは異なり、ここではデータ型を追加しないでください。実際の運用値を使用してください:

object "adminCart : ShoppingCart" as cart1 {
    cartId = "CART-9081"
    itemCount = 3
    isTaxExempt = false
}

3. インスタンスのリンクをマッピングする

オブジェクト図内の具体的なインスタンス間の接続は、抽象的な構造パターンではなく、現実世界のメモリポインタを表します。これらのリンクは、実線の二重ダッシュ(”--)を使用してマッピングします。また、リンクの機能的文脈を示すために文字列ラベルを付加することもできます:

実用的なオブジェクトマップのためのベストプラクティス

  • 重要な点に集中する:クラス定義のすべてのフィールドを列挙しないでください。特定の実行時状態やバグを説明するために直接関係する重要な変数値のみを含めてください。
  • リンクを中立的に保つ:オブジェクト図で継承の三角形や厳密な合成のダイアモンドを使用しないでください。単純で平坦な関係線(”--)または基本的な矢印の先端(”-->)を使用して参照を示してください。
  • 反復を水平に整列する: 配列リストや歴史的なオブジェクトのシーケンスをマッピングする場合、水平方向のナビゲーション矢印(例:-right->)を使用して、インスタンスが1行にきれいに描画されるように強制してください。

実際のPlantUMLオブジェクト図の例

例1:アイデンティティトークンセッション状態(具体的な値のマッピング)

このボイラープレートは、ライブのセキュリティ承認状態をマッピングしており、1人の認証済みユーザーが、異なるデータ変数を持つ複数の特定のアクティブなマシンセッションインスタンスにリンクしている様子を示しています。

@startuml
object "targetUser : UserAccount" as user {
    userId = 1042
    username = "dev_admin"
    status = "ACTIVE"
}

object "sessionMobile : UserSession" as session1 {
    sessionId = "SESS-AAA-99"
    deviceOS = "iOS 17"
    ipAddress = "192.168.1.54"
}

object "sessionDesktop : UserSession" as session2 {
    sessionId = "SESS-BBB-11"
    deviceOS = "macOS 14"
    ipAddress = "72.44.12.102"
}

' 実行時リンクの確立
user -- session1 : "認証済み"
user -- session2 : "認証済み"
@enduml

構文の分解: このレイアウトは本番コードにおける明確なシナリオを捉えています:特定のユーザー記録(ID 1042)が、同時に完全に独立した2つの実行時セッションインスタンスを生成している状況です。各セッションコンテナは、独自の隔離されたメタデータレイアウトパラメータを追跡しています。

例2:電子商取引の請求書履行状態(複数エンティティマップ)

この高度なシステムブループリントは、完了した金融取引グラフをマッピングしています。注文記録、取引ログ、倉庫のパッケージが、特定の時点においてどのように相互に関連しているかを正確に示しています。

@startuml
object "buyerProfile : Customer" as customer {
    email = "[email protected]"
    tier = "VIP"
}

object "activeOrder : Order" as order {
    orderNumber = "#99122"
    subtotal = 149.99
    currency = "USD"
}

object "stripeTransaction : LedgerEntry" as ledger {
    referenceId = "ch_3Mv8x"
    gatewayStatus = "SUCCESS"
    settledAt = "2026-05-26"
}

object "packageA : Shipment" as ship1 {
    trackingCode = "1Z999AA1"
    carrier = "UPS"
    weightKg = 1.4
}

object "packageB : Shipment" as ship2 {
    trackingCode = "1Z999AA2"
    carrier = "UPS"
    weightKg = 0.8
}

' 構造的実行リンク
customer -- order : "提出済み"
order -- ledger : "資金提供元"
order -- ship1 : "配送経由で履行"
order -- ship2 : "配送経由で履行"
@enduml

構文の分解: このテンプレートは、複雑なシステム状態の非常に構造的な概要を提供しています。1つの注文が成功したチェックアウト取引ログに関連しており、2つの異なる物理的な配送ファイルに分割されていることを示しています。この詳細レベルは、データ構造やシステムプロセスの監査に非常に適したブループリントです。

上部へスクロール