オーナーシップマップ
オーナーシップマップは、アーキテクチャ全体にわたって誰が何を所有しているかを俯瞰的に把握できるビューです。チームとユーザーはインタラクティブなバブルとして表示され、所有する要素の数に応じてサイズが変わります。ホバーするとオーナー間の依存関係ラインが表示され、クリックすると各チームまたは個人が担当する要素の詳細を確認できます。
基本コンセプト
オーナー
すべてのC4要素(system、container、component)には、1人以上のオーナーを割り当てることができます。
| オーナータイプ | 説明 |
|---|---|
| チーム | 組織内のチーム。スクワッド、ギルド、ドメインチームの表現に最適です。 |
| ユーザー | 個人ユーザー。単独のメンテナーや個人の責任範囲を明確にする場合に便利です。 |
1つの要素にチームオーナーとユーザーオーナーの両方を同時に設定できます。オーナーが割り当てられていない要素は未割り当てとして追跡され、カバレッジのギャップとして計上されます。
カバレッジ
カバレッジは、アーキテクチャ要素のうち少なくとも1人のオーナーが割り当てられているものの割合を測定します。オーナーシップマップのヘッダーには以下が表示されます。
- 全体カバレッジ率 - 緑(80%以上)、黄(50-79%)、赤(50%未満)で色分け
- レベル別内訳 - system、container、componentごとの個別統計
- 所有数 / 合計数 - すばやく確認できる生の数値
依存関係
異なるチームが所有する要素間にC4リレーションシップが存在する場合、オーナーシップマップはそのオーナー間に依存関係ラインを描画します。これにより、チーム間の結合度が可視化されます。例えば「フロントエンドチームのサービスはプラットフォームチームのAPI Gatewayに依存している」といった関係が明確になります。
依存関係の特徴:
- 個々のC4リレーションシップがオーナー間のエッジとして集約される
- 基となるリレーションシップの数に応じて重み付けされる(太い線 = 依存関係が多い)
- 概要を見やすく保つため、ホバー時にのみ表示される
オーナーシップマップの使い方
概要ビュー
Global Architecture → Ownership タブに移動します。概要ではすべてのチームとユーザーが色付きバブルとして表示されます。
- バブルサイズ はオーナーが担当する要素数を反映
- バブルカラー はチーム/ユーザーごとに自動的に割り当て
- チーム/ユーザーアイコン またはアバターが利用可能な場合はバブル内に表示
バブルは力学的レイアウト(force-directed layout)を使用して配置され、接続されたオーナー同士が自然に近くにグループ化されます。
ホバー操作
任意のバブルにホバーすると以下が表示されます。
- オーナーのフルネームと要素数を含むツールチップ
- 接続されたオーナーへの依存関係ライン(アニメーション付きの破線とカウントバッジ)
- 関連のないバブルが薄暗くなり、オーナーシップの関係性が際立つ
ズームイン
任意のバブルをクリックすると、そのオーナーの要素の詳細ビューにズームインします。
- バブルから全画面の詳細パネルへ円形リビールアニメーションで遷移
- ヒーローヘッダーにオーナーのアイコン、名前、タイプ(チーム/ユーザー)、統計カードを表示
- 統計カードはフィルターとしても機能 - 「Systems」「Containers」「Components」をクリックすると該当タイプのみ表示
- 要素はC4レベルごとにグループ化されたカードグリッドで表示され、以下の情報を含む:
- 要素名と説明
- プロジェクト名
- 共同所有ピル(この要素を同様に所有する他のチーム/ユーザー)
- Escape キーまたは Back ボタンで概要に戻る
検索
検索バーはバブルレベルでフィルタリングします。以下を任意に組み合わせて入力できます。
- オーナー名 - 例: 「Platform」や「Alice」
- 要素名 - 例: 「API Gateway」
- プロジェクト名 - 例: 「Payment Service」
検索は全文一致を使用します。すべての検索語がバブルのオーナー名、要素名、またはプロジェクト名のいずれかに含まれている必要があります。
未割り当て要素
ヘッダーの未割り当てトグルをクリックすると、オーナーが割り当てられていないすべての要素を含む特別なグレーのバブルが表示されます。これにより、対応が必要なカバレッジのギャップを特定できます。
オーナーシップの割り当て
ダイアグラムから
- C4ダイアグラム上の任意のsystem、container、componentを右クリック
- 詳細パネルの Owners セクションを開く
- Add Owner をクリックしてチームまたはユーザーを選択
- オーナーシップマップが自動的に更新される
オーナーシップマップの詳細ビューから
チームまたはユーザーにズームインすると、一覧に表示される要素の現在のオーナーシップが確認できます。オーナーを変更するには、プロジェクトダイアグラム上の該当要素に移動してください。
API経由
要素オーナーエンドポイントを使用して、プログラムからオーナーシップを割り当てることができます。
チームオーナーの設定:
PUT /api/v1/c4/systems/:id/owners
Content-Type: application/json
Authorization: Bearer <token>
{
"teamOwnerIds": ["<team-uuid-1>", "<team-uuid-2>"],
"userOwnerIds": ["<user-uuid-1>"]
}
同じエンドポイントパターンがcontainer(/c4/containers/:id/owners)およびcomponent(/c4/components/:id/owners)にも適用されます。
ベストプラクティス
早期にオーナーシップを割り当てる
- 新しいsystemの作成やディスカバリー時にチームオーナーシップを設定する
- AIディスカバリーのレビュープロセスにオーナーシップの確認を含める
- すべてのC4レベルで80%以上のカバレッジを目指す
個人ユーザーよりチームを使用する
- チームは従業員の入れ替わりに耐えられるが、個人のオーナーシップはナレッジサイロを生む
- チームをプライマリオーナーとして割り当て、必要に応じて個人ユーザーを責任の明確化のために追加する
- チームを組織の実際のスクワッドやドメイン構造にマッピングする
チーム間の依存関係を確認する
- 定期的に各チームにホバーして依存関係ラインを確認する
- 2つのチーム間の依存関係数が多い場合は、密結合の兆候である可能性がある
- このインサイトをサービス境界の決定やAPI契約の策定に活用する
カバレッジを継続的に追跡する
- ヘッダーのカバレッジ率を定期的にモニタリングする
- 未割り当て要素が蓄積する前に対処する
- 100%のオーナーシップカバレッジを一度きりのタスクではなく、継続的な品質目標として扱う
次のステップ
- アーキテクチャ決定記録 - 所有する要素にリンクされた決定を文書化
- アーキテクチャインサイト - チームが所有する要素の問題を検出
- リリース管理 - 所有するsystemのデプロイメントを追跡
- API契約 - チーム境界間のAPIを文書化