「建物を建てる前に、その場所がどこにあるかを理解しないと、決して建物は作れない。」
— シモン・ブラウン(C4モデル作成者)より抜粋
🌍 はじめに:全体像が重要な理由
ソフトウェアアーキテクチャにおいて、明確さは上部から始まる。そしてC4システムコンテキスト図—C4モデルのレベル1C4モデルによってシモン・ブラウン—は、一つの重要な問いに答える基盤となるアーティファクトである:
「このシステムは世界の中で、どこに位置するのか?」
この図は単なる視覚的補助ではない。それは第一歩チーム、ステークホルダー、経営幹部の間で共有された理解を構築するための。グリーンフィールドプロジェクトを開始する場合でも、レガシーシステムを文書化する場合でも、システムコンテキスト図は衛星視点—あなたのソフトウェアシステムがユーザーおよび他のシステムとどのように関わるかを示す高レベルな地図である。
このガイドでは、あなたが知るべきすべてのことをステップバイステップで説明する:それは何であるか、なぜ重要か、いつ使うべきか、どのように作成するか、そして一般的な落とし穴を避ける方法。アーキテクト、開発者、プロダクトオーナー、ビジネスアナリスト、さらにはアーキテクチャ言語を共有したい経営幹部を対象に設計されている。
🔷 C4システムコンテキスト図とは何か?
C4システムコンテキスト図C4システムコンテキスト図(レベル1)はC4モデルにおける最高レベルの視点である。以下を示す:
-
一つのソフトウェアシステム(あなたが構築または文書化しているシステム)
-
周囲に存在するもの:
-
人々(ユーザー/アクター/役割),
-
外部のソフトウェアシステム直接やり取りするもの。
-
✅ 目的: 以下の理解を深める 範囲, 境界、および エコシステム内での位置 あなたのシステムのもの——実装の詳細に立ち入ることなく。
📌 主な特徴

| 機能 | 説明 |
|---|---|
| レベル | C4 レベル1 – システムコンテキスト |
| 焦点 | 高レベルの相互作用のみ |
| 詳細なし | コンテナ、コンポーネント、コード、プロトコル、デプロイの詳細なし |
| 可読性 | 技術的でないステークホルダー向け |
| 範囲 | 一度に一つのシステム——明確な境界 |
| サイズ | 理想は1ページに収まる |
🧩 コア要素(C4標準)
| 要素 | 表記法 | 目的 | ベストプラクティス |
|---|---|---|---|
| ソフトウェアシステム(範囲内) | ボックス(中央揃え、太字、色付き) | 文書化しているシステム | 明確な名前と短い目的を付ける |
| 人物(ユーザー/アクター) | 棒人間または人物アイコン | システムとやり取りする役割 | 名前ではなく役割を使用する(例:「顧客」、「管理者」) |
| 外部ソフトウェアシステム | ボックス(異なるスタイル/色) | あなたのシステムがやり取りする他のシステム | SaaS、レガシーシステム、API、パートナーシステムを含める |
| 関係 | 矢印+ラベル | やり取りの方向性と意図 | 能動態の動詞を使用する:「支払いを送信する」、「〜経由で認証する」 |
⚠️ 目安:直接関与していない場合は直接的なやり取りここには含まれない。
🎯 システムコンテキスト図を作成する理由は?
このシンプルな図が大きな影響を持つ理由はこちらです:
| 利点 | 説明 |
|---|---|
| ✅ ステークホルダーを即座に一致させる | プロダクトオーナー、開発者、テスト担当者、ビジネスリーダー全員が同じ状況を把握できる。 |
| ✅ 技術的でない対象者と効果的にコミュニケーションを取る | 経営陣、監査担当者、新入社員も範囲と依存関係を理解できる。 |
| ✅ スコープクリープを防ぐ | 明確に定義する:何が含まれる対含まれない範囲内か外か。 |
| ✅ より深いレベルの基盤 | すべてのコンテナ、コンポーネント、デプロイメント図は、この図に遡る。 |
| ✅ 早期にリスクを特定する | 重要な外部依存関係を明らかにする(例:稼働率が低いサードパーティAPI)。 |
| ✅ オンボーディングを加速する | 新メンバーは数分で「私たちがどこに位置するか」を理解できる。 |
💬 サイモン・ブラウンのアドバイス:
「システムコンテキスト図は、アーキテクチャドキュメントの中で最も重要な図である。」
📅 いつ作成または更新すべきか?
✅ 次の場合に作成する:
-
新規プロジェクトの開始時(グリーンフィールド)。
-
既存システムのドキュメント作成時(ブラウンフィールド)。
-
大きなアーキテクチャの変更計画時(クラウド移行、マイクロサービス化)。
-
アーキテクチャレビューまたはガバナンス会議の実施。
-
新しいチームや利害関係者グループのオンボーディング。
🔁 次の場合に更新する:
-
新しいユーザー役割が登場した場合(例:「パートナーアドミン」)。
-
システムが新しい外部システムと統合し始めた場合(例:「決済プロセッサ」)。
-
システムが名前変更、廃止、または範囲の再定義された場合。
-
ビジネス方針または製品戦略に変更がある場合。
-
四半期または年次アーキテクチャ刷新サイクル。
🔄 ベストプラクティス: これを 生きている文書—コードと同じようにバージョン管理し、Gitに保存し、定期的に更新する。
🛠️ グッドなシステムコンテキスト図を作る方法:ステップバイステップ
以下の 7ステップ 強力で意味があり、利害関係者に優しい図を作成するためのもの。
ステップ1:範囲内のシステムを定義する
まず 明確な1文 でシステムを定義する:
「これは インターネットバンキングシステム —顧客がウェブ経由で残高を確認し、資金を振替し、請求書を支払える。」
✅ 使用する:能動態
✅ 簡潔に保つ 簡潔な
✅ 注力する: コアな責任
💡 ヒント:この文は図の システムの説明 図の中で。
ステップ2:ユーザー(人物)を特定する
尋ねる:
「このシステムから価値を得るのは誰ですか?」
個人ではなく役割を検討する。一般的な例:
-
顧客 – システムを使ってアカウントを管理する
-
管理者 – ユーザーを管理し、取引を監視する
-
サポート担当者 – 問題のトラブルシューティングを行う
-
パートナー – APIと統合する
-
ゲスト – 匿名のユーザーが閲覧する
✅ 使用する:役割 名前ではなく(例:「顧客」ではなく「ジョン・スミス」)
✅ 主な役割は3~6つに制限する
ステップ3:外部システムを特定する
尋ねる:
「このシステムが直接やり取りする他のプロダクションシステムは何か?」
直接の統合のみを考慮する — 直接的な統合のみを想定する — 間接的または伝達的なものではない。
例:
-
コアバンキングシステム (レガシーメインフレーム)
-
決済ゲートウェイ (Stripe、PayPal)
-
CRMシステム (Salesforce)
-
メールサービス (SendGrid、AWS SES)
-
IDプロバイダー (Auth0、Okta、Azure AD)
✅ 自システムが直接呼び出しまたはデータを受信するシステムのみを含める直接呼び出しまたはデータを受信するシステム
✅ 「我々はAPIを使用している」という表現を避ける — 実際のシステム名を明記する
ステップ4:高レベルな関係をマッピングする
描く矢印ユーザー/システムからソフトウェアシステムへ(またはその逆)に、ラベルとして意図.
使用する能動態の動詞フレーズ:
-
✅ 「支払いを送信する」
-
✅ 「アカウント残高を表示する」
-
✅ 「Auth0経由で認証する」
-
✅ 「注文通知を受信する」
-
✅ 「確認メールを送信する」
❌ 避けるべきこと:
「HTTPSを使用する」
「REST APIを呼び出す」
「Kafka経由でデータを送信する」
ステップ5:シンプルで読みやすいものにする
黄金法則:
-
合計で最大10~12のボックス(あなたのシステムを含む)
-
1ページのみ— スクロールなし
-
一貫したアイコン/色を使用する:
-
人:棒人間または人物アイコン
-
あなたのシステム:中央のボックス、太字、色付き
-
外部システム:異なる色またはボーダースタイル(例:破線)
-
📝 次の凡例を記載し、記号の意味を説明する(例:「青=外部システム」、「緑=人」)
📌 ヒント: 12個以上のボックスがある場合は、次のシステムランドスケープ図(レベル0)に移行することを検討してください。
ステップ6:ステークホルダーと確認する
次の人々に見せる:
-
プロダクトオーナー
-
ビジネスアナリスト
-
シニア開発者
-
UXデザイナー
-
ITセキュリティまたはコンプライアンス担当者
尋ねる:
「この記述は、システムの動作を正確に反映していますか?」
「重要なユーザーまたは統合を漏らしている可能性はありますか?」
🔄 合意が得られるまで繰り返し行う。
ステップ7:ツールの選定(2026年版の状況)
| ツール | 最も適している用途 | 長所 | 短所 |
|---|---|---|---|
| PlantUML + C4-PlantUML | コードベース、Git対応 | 無料、自動化、バージョン管理可能 | 習得に時間がかかる |
| Structurizr | 企業向け、共同作業向け | Webベース、C4のすべてのレベルをサポート | 無料版の機能制限 |
| IcePanel | 視覚的、インタラクティブ | リアルタイム共同作業、AI支援 | サブスクリプション |
| Visual Paradigm AI C4 Studio | AI駆動の設計 | テキストから図を自動生成 | 有料 |
| Draw.io / diagrams.net | 素早いスケッチ | 無料、ConfluenceおよびGitHubと統合可能 | 手動レイアウト |
| Miro / Lucidchart / Excalidraw | ワークショップおよびブレインストーミング | ホワイトボード作成に最適 | デフォルトではバージョン管理されない |
🛠️ 推奨: 使用する C4拡張機能付きPlantUML 長期的な保守性を確保するため。
🖼️ PlantUMLの簡単な例:インターネットバンキングシステム
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUml/master/C4_Context.puml
title インターネットバンキングシステム - システムコンテキスト(レベル1)
Person(customer, "個人顧客", "インターネットバンキングを使って口座を管理し、支払いを行う")
Person(admin, "銀行スタッフ / 管理者", "ユーザーを管理し、取引を監視する")
System_Boundary(c4, "インターネットバンキングシステム") {
System(ib, "インターネットバンキング", "顧客が口座を確認し、送金や請求書の支払いを行うことを可能にする")
}
System_Ext(core, "コアバンキングシステム", "レガシーのメインフレーム – 口座および取引の真実の情報源")
System_Ext(email, "メールサービス", "確認メールおよびセキュリティメールを送信(例:AWS SES)")
Rel(customer, ib, "残高を確認し、送金を行い、請求書を支払う")
Rel(admin, ib, "口座を管理し、レポートを確認する")
Rel(ib, core, "口座データを読み取り、取引を提出する")
Rel(ib, email, "通知を送信する")
legend right
C4コンテキスト図 – レベル1n
• スコープ内のソフトウェアシステムは1つだけn
• ユーザー(Person)および外部システムn
• 実装詳細は含まないn
• 高レベルの目的のみn
end legend
@enduml
✅ 出力: コードから自動的にレンダリング可能な、クリーンでプロフェッショナルな、バージョン管理された図。
🏆 最良の実践:これを行うべき、これを行わないべき
| ✅ 行うべき | ❌ 行わないべき |
|---|---|
| 使用する 能動態のラベル:「支払いを提出する」、「〜経由で認証する」 | 受動態を使用:「支払いは提出される」 |
| システムを中央に配置する | 中央からずらす、または隅に配置する |
| 言語を シンプルで技術的でない | 「API」、「マイクロサービス」、「Kafka」などの専門用語を使用する |
| 以下の内容のみを含める 直接の相互作用 | システムが間接的に依存しているシステムを追加する |
| 使用する 一貫したアイコン/色 | スタイルをランダムに混ぜる |
| 図をバージョン管理する(例:v1.0) | 静的として扱うか、作成後に破棄する |
| 保存先 コード (例:PlantUMLファイル) | ソースなしでPNG/PDF形式のみ保存する |
🚩 避けるべき一般的なミス
-
ボックスを多すぎること → 合計12個以上?おそらく システムランドスケープ図 (レベル0)。
-
技術的な詳細を含めること → 「REST」、「HTTPS」、「Kafka」、「Docker」は禁止。
-
内部コンポーネントを表示すること → それはレベル2(コンテナ図)です。
-
役割ではなく実際の名前を使用すること → 「ジョン・スミス」→ 「顧客」。
-
外部システムを無視すること → 支払いゲートウェイやレガシーシステムなど、重要な依存関係が欠落している。
-
ステークホルダーとの検証をしないこと → ミスアライメントや再作業のリスク。
📌 最後の考え:ここから始め、上へと構築する
その システムコンテキスト図 は単なる最初のステップではない——それは 最も重要な.
それは 基盤 すべての他のアーキテクチャ的決定が構築される基盤である。丁寧に作られたレベル1の図は:
-
誤解を防ぐ
-
再作業を削減する
-
オンボーディングを迅速化する
-
より良い意思決定を可能にする
🏁 プロのヒント: より詳細な図(コンテナ、コンポーネント、コード)を作成する前に、 常にシステムコンテキスト図から始める.
📚 詳細な読書とリソース
-
📘 C4モデル公式サイト: https://c4model.com
-
📄 C4モデルドキュメント: https://github.com/c4model/c4-model
-
🧩 C4-PlantUMLライブラリ: https://github.com/plantuml-stdlib/C4-PlantUML
-
🧠 Visual Paradigm C4ガイド: https://www.visual-paradigm.com/guides/c4-model/
-
🎥 Simon BrownのYouTubeトーク:YouTubeで「C4モデル」を検索
✅ 概要:あなたのC4システムコンテキストチェックリスト
| タスク | 完了? |
|---|---|
| 1つの明確な文でシステムを定義する | ☐ |
| 3~6つの重要なユーザー役割を特定する | ☐ |
| 3~6つの重要な外部システムを特定する | ☐ |
| 直接的で高レベルの相互作用のみを描く | ☐ |
| 能動態のラベルを使用する(例:「支払いを送信する」) | ☐ |
| 図を1ページに収めて読みやすくする | ☐ |
| 一貫したアイコン/色を使用する | ☐ |
| 凡例を追加する | ☐ |
| ステークホルダーと検証する | ☐ |
| コードとして保存する(例:PlantUML) | ☐ |
🌟 思い出してください:
優れたアーキテクチャは明確さから始まる。
明確さはシステムコンテキスト図から始まる。
👉 次のプロジェクトでは、この図から始めましょう。
時間の節約、混乱の回避、チームおよびステークホルダー間での信頼の構築が可能になります。
📣 「最も優れたアーキテクチャとは、誰もが理解できるものである。」
— シモン・ブラウンのインスピレーション
このガイドをPDF形式でダウンロード → [ダウンロード可能なバージョンへのリンク]
次のプロジェクトでこのテンプレートを使用する → [PlantUML例付きGitHubリポジトリへのリンク]
📌 タグライン:
「木を見て森を見ず — C4システムコンテキスト図をマスターする。」
- Visual ParadigmのAIツールを活用したC4モデル可視化の究極のガイド: このガイドでは、AIを活用したツールを活用してC4モデルの可視化を自動化・強化し、ソフトウェアアーキテクチャ設計を迅速化する方法を説明します。
- Visual ParadigmのAI C4 Studioを活用したスムーズなアーキテクチャ文書化: この記事では、AI強化されたスタジオを使用して、クリーンでスケーラブルかつ保守可能なソフトウェアアーキテクチャ文書を作成する方法を詳述します。
- C4-PlantUML Studioの究極のガイド:ソフトウェアアーキテクチャ設計を変革する: このリソースでは、AI駆動の自動化、C4モデルの明確さ、PlantUMLの柔軟性を統合した単一の強力なツールの開発について探求します。
- Visual ParadigmのAI搭載C4 PlantUML Studioの包括的ガイド: このガイドでは、2025年後半にリリースされた目的特化型ツールについて説明しており、自然言語のプロンプトを段階的なC4図に変換します。
- C4-PlantUML Studio|AI搭載C4図生成ツール: この機能概要では、シンプルなテキスト記述からC4ソフトウェアアーキテクチャ図を生成するように設計されたAI駆動のツールを紹介します。
- Visual Paradigm AIチャットボットを活用したC4コンポーネント図の生成と修正: このチュートリアルでは、AI搭載チャットボットを反復的に活用して、複雑なシステムのコンポーネントレベルのアーキテクチャを構築・最適化する方法を示します。
- AI搭載C4図生成ツール:コアレベルと補助ビュー: このページでは、AI生成ツールがC4モデルの4つのコアレベル(コンテキスト、コンテナ、コンポーネント、デプロイメント)をサポートし、包括的な文書化を可能にする方法を説明します。
- AI図生成ツール:C4モデル完全対応リリース: このアップデートでは、階層的なC4モデル図の自動作成を可能にするAI機能の統合について詳述します。
- C4モデルAI生成ツール:モデル化ライフサイクル全体の自動化: このリソースでは、専用のAIチャットボットが会話形式のプロンプトを使用して、DevOpsチームのアーキテクチャ文書の整合性を保証する方法を強調しています。
- 包括的レビュー:汎用AIチャットボット vs. Visual ParadigmのC4ツール: この比較では、汎用言語モデルよりも、C4 PlantUML Studioのような専門ツールが、より構造的でプロフェッショナルな結果を提供する理由を説明します。













