第21章:サブドメイン入門B(BCとの関係)🔗
1) まず結論:サブドメインとBCは「目的が違う」🧭✨

- サブドメインは「ビジネスの世界をどう区切って理解するか」(問題側の切り方)🍰
- **Bounded Context(BC)**は「ソフトウェアとして、どこまで同じ言葉&同じモデルでいけるか」(解決側の切り方)🧩
だから…… サブドメインとBCは、ピッタリ1対1に“なることもある”けど、“決め打ちしない”のが大事だよ🙆♀️✨ (gorodinski.com)
2) 「1対1じゃない」ってどういうこと?🙅♀️➡️🙆♀️
よくあるパターンはこの2つ👇
パターンA:1つのサブドメインが、複数BCに割れる✂️
理由はだいたいコレ👇
- そのサブドメインの中で、モデル(言葉の意味)が衝突する💥
- チームやリリース都合で、別々に進めたい🏃♀️🏃♂️
- 「同じ言葉だけど、使い方が違う」が出てきた🌀(例:同じ“注文”でも見たい世界が違う)
「BCは“設計上の選択”」なので、現場の事情で分割するのは自然だよ😊 (Mathias Verraes' Blog)
パターンB:複数サブドメインを、1つのBCにまとめる🧺
理由はだいたいコレ👇
- まだ規模が小さくて、分けると連携が大変😵💫
- 言葉やルールがかなり近くて、同じモデルで違和感が少ない✅
- 「まずは動かして学ぶ」フェーズで、境界は後で育てたい🌱
“いったんまとめる”のも立派な戦略だよ👌 (Level Up Coding)
3) じゃあ何を基準に「BC」を決めるの?🔍✨
BCは「この中だけは言葉の意味がブレない!」を守る箱📦 決めるときの見方は、ざっくりこの3つが強いよ👇
① 言葉の一貫性🗣️✅
- 同じ単語が同じ意味で使われてる?
- 仕様の会話がスムーズ?💬✨
- “翻訳”なしで話せる範囲?📖
② ルール(責務)の一貫性🧠✅
- 「何を守るべきか」が揃ってる?
- 似たデータでも、責任が違うなら分ける候補📦✨
③ 人と組織の都合(現実の壁)👥🧱
- チームが違う、部署が違う、意思決定が違う
- 歴史的事情や、コミュニケーションの摩擦で境界が必要になることもある😇 ここは「理想」より「事故らない」を優先しがち! (martinfowler.com)
4) ミニECで考えてみよう🛒✨(サブドメイン → BCの発想)
題材:注文・在庫・配送・請求があるミニEC📦💳🚚
(A) サブドメイン(問題側の切り方)例🍰
- 販売:カート、注文確定、割引など(ここが勝ち筋ならコア寄り🔥)
- フルフィルメント:在庫引当、出荷準備など📦
- 請求/決済:請求書、入金、返金💳
- 顧客対応:キャンセル、問い合わせ、返品など☎️
(B) BC(解決側の切り方)例📦
- OrderManagement(注文の世界)🧾
- Inventory(在庫の世界)🏬
- Shipping(配送の世界)🚚
- Billing(請求の世界)💳
この例だと「1サブドメイン≒1BC」っぽく見えるけど……ここからが本番😎✨
5) “1対1じゃない”を、同じ題材で体験💡
例1:販売サブドメインが、2つのBCに割れる✂️🛒
「販売」の中でも、会話が分かれがち👇
-
Checkout(購入手続き)BC
- 住所入力、決済手段、クーポン適用、購入確定
- “ユーザー体験”中心の言葉が多い💖
-
OrderLifecycle(注文ライフサイクル)BC
- 受注、キャンセル条件、返品条件、状態遷移
- “業務ルール”中心の言葉が多い📜
同じ「注文」でも、見たい世界が違って衝突しやすいなら、割ってスッキリがあり🙆♀️✨ (Mathias Verraes' Blog)
例2:在庫+配送を、1つのBCにまとめる🧺📦🚚
初期フェーズだと、
- 在庫引当と出荷指示がほぼ同じ会話で回る
- 分けるとAPI調整がつらい みたいなことが多い😵💫
そういうときは Fulfillment(出荷遂行)BC としてまとめちゃうのもアリ👌✨ (Level Up Coding)
6) “境界候補→あとで整える”が強い理由💪🌱
BCって、最初から完璧に当てるのは難しいの🥺 だからおすすめの流れはこれ👇
- サブドメインをざっくり置く(問題の地図)🗺️
- イベントや用語の固まりからBC候補を作る(会話の固まり)🌩️🧺
- 衝突が出たところを境界として強化(事故を減らす)🛡️
- チーム・リリース都合も含めて調整(現実に勝つ)👥
BCは「設計上の選択」で、状況に合わせて育てるものだよ🌱✨ (Mathias Verraes' Blog)
7) ありがちな勘違いトップ3😇💥
-
「サブドメイン=そのままBC」だよね? → “そうなることもある”けど、決め打ちすると危険⚠️(衝突が出たら割る/まとめるが必要) (Mathias Verraes' Blog)
-
「BC=マイクロサービス1個」だよね? → それも決め打ちは危険⚠️(BCはまず“言葉とモデルの境界”) (Medium)
-
「境界はビジネスだけで決まる」よね? → 実際はチーム・歴史・人間関係も効くよ👥🧱 (martinfowler.com)
8) ミニ演習🎮✅(10分)
お題:ミニECの「販売」サブドメインを、BCに落としてみよう🛒
- 次の言葉を見て、「同じ単語だけど意味がズレそう」なものに印をつけてね🖊️
- 注文 / 顧客 / 住所 / 金額 / キャンセル / 返品
- 「購入の会話」と「注文の運用の会話」で、登場する言葉を分けてみよう🧺
- 購入:カート、クーポン、支払い方法、購入確定…
- 運用:受注、出荷待ち、キャンセル期限、返品可否…
- その結果、BC案を2パターン作ってみよう✌️
- 案A:Checkout BC + OrderLifecycle BC(分割)
- 案B:OrderManagement BC(まとめ)
最後に、それぞれのメリット/デメリットを一言で✨
- 速さ🚀 / 分かりやすさ👀 / 変更に強い🛡️ / 連携コスト📨
9) つまずきポイント救急箱🧰🚑
- 「分けるほどの根拠がない…」 → その時点では“仮”でOK👌 まずは衝突ログ(どの言葉が揉めたか)を取ろう📝
- 「分けすぎて連携が地獄…」 → まとめるのも正解🙆♀️ “今の規模”に合わせよう📏
- 「境界を越えるたびに用語が壊れる…」 → それは後半の章でやる 契約(DTO)/ACL の出番📨🛡️(境界を守る道具!)
10) お助けAIプロンプト例🤖✨(コピペOK)
(GitHub OpenAI のコーディング支援ツールに投げる想定だよ💬)
ミニEC(注文・在庫・配送・請求)の説明文から、
1) サブドメイン候補を3〜5個に分けて
2) 各サブドメインの「目的」を1行で
3) その後、BC案を2パターン(分割寄り/統合寄り)出して、
それぞれのメリット・デメリットを箇条書きで教えて
「注文」という言葉が出てくる文章を渡すので、
“意味が変わっている可能性がある箇所”を指摘して。
さらに、そのズレを解消するBC分割案を提案して。
11) この章のチェックリスト✅✨
- サブドメインは「問題の地図」🍰
- BCは「解決の境界(言葉とモデルの一貫性)」📦
- 1対1は“可能性のひとつ”で、決め打ちしない🙅♀️
- 衝突・責務・チーム都合で「割る/まとめる」を選ぶ✂️🧺
- まず候補を出して、現実の事故から育てる🌱