🗺️
コンテキストマップを描くスキル
システムのBounded Contextを洗い出し、チーム間・サービス間の依存関係と統合パターンを可視化する手順
目的
システムのBounded Contextを洗い出し、「誰が誰に依存しているか」「どんな方法で統合するか」を可視化する。
手順
1. Bounded Contextを列挙する
チームやサービスの単位でContextを書き出す。
例:フィットネス予約システム(Wild Workouts)
- Trainer Context(トレーナーのスケジュール管理)
- Users Context(ユーザー・予約管理)
- Trainings Context(トレーニング記録)
判断基準:「ここでは『顧客』はどういう意味か?」が違うなら別Context。
2. Context間の依存を矢印で描く
どちらが上流(変更を加える側)でどちらが下流(影響を受ける側)かを決める。
[Users Context] ──→ [Trainer Context]
(予約を依頼する) (スケジュールを管理する)
3. 統合パターンを決める
各矢印に「どうやってつなぐか」を書く。
| パターン | 使う場面 |
|---|---|
| 顧客/供給者 | 下流が上流に要件を伝えられる関係 |
| 腐敗防止層(ACL) | 外部/レガシーと繋ぐとき。外部モデルを自分のContextに持ち込まない |
| 公開ホストサービス | 上流が安定したAPIを外部に公開する |
| イベント(非同期) | 疎結合にしたい。処理が非同期でよい |
| 共有カーネル | 2Contextで一部モデルを共有する(変更には両者の合意が必要) |
4. 「同一言語か?」を確認する
問い:「TrainerとUsersで『予約』という言葉は同じ意味か?」
→ Trainer側:「スケジュールの枠を押さえること」
→ Users側:「ユーザーがトレーニングを申し込むこと」
→ 意味が違う → 別Context確定、ACLで翻訳する
5. 図に起こす(テキストでもOK)
[Users Context]
│ 顧客/供給者
▼
[Trainer Context] ──イベント──▶ [Trainings Context]
│ 公開ホストサービス
▼
[外部カレンダーAPI]
↑ ACL(外部モデルを翻訳)
チェックリスト
- すべてのサービス/チームがContextとして列挙されているか
- 各矢印に統合パターンが書かれているか
- 外部システム・レガシーにはACLを挟む設計になっているか
- 「同じ言葉」が複数Contextで違う意味を持っていないか確認したか
- 上流/下流の関係が明確になっているか(どちらが変更の影響を受けるか)
やってはいけないこと
- 全Contextで同じモデルを共有する(モデルが肥大化して変更不能になる)
- ACLなしで外部APIのモデルをそのままドメインに使う(外部の変更が内部に直撃する)
関連概念
- 1. 🔍集約の境界を見つけるスキル
- 2. 🩺貧血ドメインモデルを診断・修正するスキル
- 3. 🗺️コンテキストマップを描くスキル
- 4. 🔲境界づけられたコンテキスト
- 5. 🗺️サブドメイン(コア・サポート・汎用)
- 6. 🗾コンテキストマップ
- 7. ⬡六角形アーキテクチャ(ポートとアダプター)
- 8. 🪪エンティティ(Entity)
- 9. ⚙️ドメインサービス(Domain Service)
- 10. 💎値オブジェクト(Value Object)- IDDD
- 11. 📣ドメインイベント(Domain Event)
- 12. 🫧集約(Aggregate)
- 13. 📐集約の設計原則(Vernon の4ルール)
- 14. 🗄️リポジトリ(Repository)
- 15. 🏭ファクトリ(Factory)
- 16. 📦モジュール(Module)
- 17. 🎛️アプリケーションサービス(Application Service)
- 18. 🔌境界づけられたコンテキストの統合
- 19. ⚡CQRS(コマンドクエリ責任分離)
- 20. 📜イベントソーシング(Event Sourcing)
- 21. 🩸貧血ドメインモデル(Anemic Domain Model)
- 22. 🪶アプリケーションサービスを薄く保つ
出典: 実践ドメイン駆動設計(Vaughn Vernon)第3章