ボックスのドラッグを止める:VPasCode と AI チャットボットによる C4 ダイアグラムの生成

GUI 中心アーキテクチャの問題点

長年にわたり、C4 モデリングはパラドックスに陥っていました:私たちは「アーキテクチャをコードとして」と提唱しながらも、ほとんどのチームは依然として GUI でボックスをドラッグして C4 ダイアグラムを作成しています。これにより、文書の陳腐化、バイナリファイルでのマージ競合、そしてダイアグラムと実際のシステムとの乖離が生じます。

現代の開発チームには、次のようなワークフローが必要です会話が設計の火花となるそしてコードがそれを支える。Visual Paradigm のAI チャットボットとVPasCodeを使用すれば、マウスを一度も触れることなく、数分で自然言語のプロンプトから本番環境対応の C4 PlantUML へ移行できます。

変換駆動型C4モデリング | Visual Paradigm

このガイドでは、具体的な PlantUML の例を用いてそのワークフローを実演します。


フェーズ 1:AI チャットボットによる対話型設計

Visual Paradigm の AI チャットボットは、あなたのアーキテクチャの共乗者として機能します。空白のキャンバスから始めるのではなく、意図(インテント)から始めます。

✅ 効果的なプロンプト戦略

AI に「図を描いて」とは頼まないでください。代わりに、C4 のセマンティクスを用いてシステムをモデル化してと頼んでください。境界、技術スタック、データフローについては具体的に指定してください。

💬 AI チャットボットのプロンプト例:
「ソフトウェアアーキテクトとして行動してください。『オンラインバンキングシステム』のための C4 コンテナ図を作成してください。Web アプリ(React)、モバイルアプリ(Flutter)、API ゲートウェイ(Kong)、コアバンキングサービス(.NET)、PostgreSQL データベースを含めてください。OAuth2 を介した認証フローと口座残高照会を表示してください。公式マクロを使用した有効な C4-PlantUML コードを出力してください。」

🤖 期待される AI の出力(洗練されたもの)

AI は最初のドラフトとなる PlantUML モデルを生成します。批判的にレビューしてください。AI は構造作成が得意ですが、関係性を捏造(ハルシネーション)する可能性があります。フォローアップのチャットプロンプトを使用して洗練させてください:“セッション管理のために API ゲートウェイとコアバンキングサービスの間に Redis キャッシュを追加してください”または“PostgreSQL データベースを廃止予定としてマークし、新しい MongoDB クラスターを追加してください。”


フェーズ 2:VPasCode と PlantUML による確定的モデリング

AI が実現可能なドラフトを生成したら、チャットを止めてコーディングを開始してください。洗練された PlantUML を.pumlVPasCodeによって管理されるファイル。これは唯一の信頼できる情報源です。

以下は、このワークフローを通じて生成された本番環境対応のC4 PlantUMLの例です。Visual Paradigmプロジェクトに「C4-PlantUMLライブラリ」が含まれていることを確認してください。.

例1:システムコンテキスト図(レベル1)

これは、システムの境界と外部アクターを定義します。

オンラインバンキングプラットフォーム用の生成されたC4レベル1システムコンテキスト図を表示するVPasCodeインターフェース。

@startuml OnlineBanking_Context
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml

title システムコンテキスト:オンラインバンキングプラットフォーム

Person(customer, "銀行顧客", "口座を確認し、送金し、請求書を支払う")
Person(admin, "バックオフィス管理者", "ユーザーを管理し、取引を監視する")

System(banking, "オンラインバンキングプラットフォーム", "ウェブとモバイルを通じてインターネットバンキングサービスを提供する")

System_Ext(coreLegacy, "コアバンキングメインフレーム", "取引を処理し、マスター台帳を保持する")
System_Ext(email, "メールサービス", "通知と明細を送信する")
System_Ext(oauth, "OAuth2プロバイダー", "IDと認証を処理する")

Rel(customer, banking, "使用する", "HTTPS/WebSocket")
Rel(admin, banking, "管理する", "HTTPS")
Rel(banking, coreLegacy, "読み取り/書き込み", "REST/SOAP")
Rel(banking, email, "アラートを送信", "SMTP/API")
Rel(banking, oauth, "認証を行う", "OIDC")

@enduml

例2:コンテナ図(レベル2)

システムをランタイムコンテナに分解します。次の使用に注意してください。「ContainerDb, ContainerQueue、および技術タグ—現代のクラウドネイティブシステムに不可欠です。

オンラインバンキングプラットフォームのC4レベル2コンテナ図。Webアプリケーション、モバイルアプリ、APIゲートウェイ、アカウントサービス、セッションキャッシュ、およびアカウントデータベースを示しています。

@startuml OnlineBanking_Containers
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

title コンテナ図:オンラインバンキングプラットフォーム

Person(customer, "銀行顧客")

System_Boundary(banking, "オンラインバンキングプラットフォーム") {
    Container(webapp, "Webアプリケーション", "React + Node.js", "ブラウザベースのバンキング用のSPA")
    Container(mobile, "モバイルアプリ", "Flutter", "iOS/Androidネイティブ体験")
    Container(api, "APIゲートウェイ", "Kong", "リクエストのルーティング、レート制限、認証検証")
    Container(service, "口座サービス", ".NET 8", "口座と残高のビジネスロジック")
    Container(cache, "セッションキャッシュ", "Redis", "JWTトークンとセッション状態を保存")
    ContainerDb(db, "口座データベース", "PostgreSQL", "顧客口座、残高、取引")
    ContainerQueue(events, "イベントバス", "RabbitMQ", "非同期取引通知")
}

System_Ext(oauth, "OAuth2プロバイダー")
System_Ext(legacy, "コアバンキングメインフレーム")

Rel(customer, webapp, "使用する", "HTTPS")
Rel(customer, mobile, "使用する", "HTTPS")
Rel(webapp, api, "呼び出す", "REST/JSON")
Rel(mobile, api, "呼び出す", "REST/JSON")
Rel(api, oauth, "トークンを検証", "OIDC")
Rel(api, service, "ルーティング先", "gRPC")
Rel(service, cache, "セッションを読み書き", "TCP")
Rel(service, db, "クエリ", "SQL/TCP")
Rel(service, events, "公開", "AMQP")
Rel(service, legacy, "台帳を同期", "SOAP")

@enduml

例3:コンポーネント図(レベル3)– 口座サービス

単一のコンテナにズームインします。ここでVPasCodeの真価が発揮されます:コンポーネントはコードモジュールに直接マッピングされます。

APIゲートウェイと認証ミドルウェアを含むレベル3のアカウントサービスコンポーネント図を生成するVPasCodeのC#コード。

@startuml AccountService_Components
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml

title コンポーネント図:アカウントサービス (.NET 8)

Container(api, "API ゲートウェイ", "Kong")
ContainerDb(db, "アカウント DB", "PostgreSQL")
ContainerQueue(events, "イベントバス", "RabbitMQ")

Component(auth, "認証ミドルウェア", "ASP.NET Filter", "JWT の検証、ユーザーコンテキストの抽出")
Component(controller, "AccountController", "ASP.NET API", "/accounts 用の REST エンドポイント")
Component(domain, "AccountDomainService", "C# クラスライブラリ", "残高計算、送金ルール")
Component(repo, "AccountRepository", "EF Core", "データアクセス、クエリ最適化")
Component(publisher, "EventPublisher", "MassTransit", "TransactionCompleted イベントの発行")

Rel(api, auth, "リクエストの転送")
Rel(auth, controller, "認証済みリクエストの転送")
Rel(controller, domain, "ビジネスロジックの呼び出し")
Rel(domain, repo, "照会/永続化")
Rel(repo, db, "SQL の実行")
Rel(domain, publisher, "ドメインイベントの発行")
Rel(publisher, events, "発行", "AMQP")

@enduml


フェーズ 3:VPasCode を開発ワークフローに統合する

PlantUML の生成は戦いの半分です。現代のチームで定着させる方法は以下の通りです:

すべてをバージョン管理する

すべての.pumlファイルをアプリケーションコードと同じリポジトリに格納してください。図をインフラストラクチャ・アズ・コードとして扱います:

/docs/architecture/c4/
├── 01-context.puml
├── 02-containers.puml
├── 03-account-service-components.puml
└── README.md

CI/CD でレンダリングを自動化する

Visual Paradigm の CLI または GitHub Action を使用して、すべての PR で PNG/SVG をレンダリングしてください。レンダリングされた画像を手動でコミットしないでください。

# GitHub Action の例スニペット
- name: C4 図のレンダリング
  run: |
    vp-cli render -i docs/architecture/c4/*.puml 
                  -o docs/architecture/output/ 
                  -f svg --c4-layout auto

VPasCode との双方向同期

VPasCode は単なるレンダラーではありません。それはモデル同期エンジンです。PlantUML を更新すると:

  • Visual Paradigm の中央モデルが自動的に更新されます

  • 相互参照(例:コンポーネントを Jira のエピックや Git リポジトリにリンク)は維持されます

  • GUI を使用するチームメンバーは、変更がリアルタイムで反映されるのを見ることができます

  • AI チャットボットの会話は現在のモデルの状態であり、古くなったスナップショットではありません

⚠️ 重要警告:AI によって生成された PlantUML が人間のレビューをバイパスすること never 決して許さないでください。AI は頻繁に存在しない API を作成したり、プロトコルのラベル付けを誤ったり、重要なセキュリティ境界を省略したりします。コミットする前に、常に生成されたコードを実際のコードベースと脅威モデルに対して検証してください。


現代のチーム向けの導入チェックリスト

ステップ アクション ツール
1 対話型プロンプトを使用して初期の C4 モデルを構築する AI チャットボット
2 反復的なチャットを通じて AI の出力を洗練・修正する AI チャットボット
3 検証済みの PlantUML をバージョン管理されたリポジトリにエクスポートする VPasCode
4 PR 時に自動レンダリングを行う CI パイプラインを設定する VPasCode CLI
5 C4 要素をコードリポジトリ、チケット、ドキュメントにリンクする Visual Paradigm
6 AI による批判を用いて四半期ごとの「モデル衛生」レビューをスケジュールする AI チャットボット

最後の考え

C4 モデリングはチームの速度に対する負担であってはなりません。AI を「創造の火花」として扱うことでおよびVPasCodeを「確定的なアンカー」、両方の世界の良いところを享受できます:迅速な探索および持続可能なドキュメンテーション。ボックスをドラッグして作業するのをやめましょう。会話のスピードでアーキテクチャ設計を始めましょう。