境界づけられたコンテキスト 40章アウトライン🗺️✨
前提は Windows + VS Code + AI拡張あり(Copilot / Codex等)、TypeScriptは **2026/02/02 時点で安定版ラインの 5.9.x(npm latest は 5.9.3)**を基準にするよ🧸💻 ※TypeScript 6.0/7.0(ネイティブ移行の流れ)は「今後の見通し」として後半で軽く触れる感じにするね🌱 (参考:npmのlatest 5.9.3、公式ブログのTS 6.0/7.0方針、ネイティブプレビュー)(npmjs.com)
Part 0:はじめに “設計の地図” を渡すよ🗺️✨(1〜5)
第1章 ゴールと進め方🎯😊
- ねらい:Bounded Context(BC)を「説明できる+自分で境界案を作れる」ようにする🎉
- やること:この教材で作るミニアプリ(学内フリマ🛍️)を紹介
- 成果物:最後に作る “Context Map” の完成イメージを見る👀✨
第2章 まずは “境界がないと地獄” を体験😇➡️😱
- ねらい:「全部ひとつモデル」だと壊れやすい理由を体感する💥
- やること:同じ言葉が衝突する例(ユーザー/会員/出品者)を眺める🌀
- 成果物:衝突リスト(何が混ざって困る?)を箇条書きで作る📝
第3章 DDDとBCの関係(超やさしく)🧠🌱
- ねらい:BCは「ドメインの言葉を守る境界」って感覚をつかむ🛡️
- やること:DDDは“道具箱”、BCは“境界線”だよ〜の整理📦
- 成果物:「BCとは何か」を自分の言葉で1〜2行で書く✍️😊
第4章 例題の世界観(学内フリマ)を決める🏫🛍️
- ねらい:想像できる題材で、言葉のズレが起きる準備をする🙂
- やること:登場人物(出品者/購入者/運営)と目的を決める🎭
- 成果物:簡単なユースケース3つ(出品・購入・発送)を書く📌
第5章 開発セットアップ(Windows/VS Code/TS)🔧💻
-
ねらい:環境で迷って学習が止まらないようにする🧸
-
やること:VS CodeでTSプロジェクトを動かす準備(最小)🚀
-
成果物:実行できる空プロジェクト+README(手順)📄✨
- AI相棒🤖:READMEをAIに生成させて、自分で整える練習もするよ😊
Part 1:Bounded Context のコア感覚🌸(6〜10)
第6章 “同じ言葉、別の意味” がBCの出発点🗣️💡
- ねらい:用語がズレると設計が壊れる理由を理解する🧩
- やること:「ユーザー」という単語が何種類に割れるか考える🤔
- 成果物:用語カード(言葉→意味→使う場面)を作る🃏✨
第7章 BCの定義(やさしい版)📌😊
- ねらい:BC=「意味がブレない範囲」って言えるようにする🎈
- やること:境界の中では言葉が1つの意味で固定される話🧱
- 成果物:BCの定義を “例題の言葉” で言い換える✍️🛍️
第8章 何が嬉しいの?(メリット3つ)🎁✨
- ねらい:モチベが出るメリットを先に掴む🔥
- やること:変更が怖くない/チームでも揉めない/テストしやすい🧪
- 成果物:「BCがある世界」と「ない世界」の比較メモを作る📝😄
第9章 “境界の中のモデル” って何?🧱🧠
- ねらい:モデルは「現実のコピー」じゃなく「目的のための道具」だと知る🔧
- やること:同じUserでも、BCごとに持つ属性が違ってOKな話🙆♀️
- 成果物:BCごとに “Userに必要な情報” を分けて書く📝
第10章 SoC(関心の分離)とBCのつながり🔍🧼
- ねらい:BCはSoCの強力なやり方の1つだと理解する✨
- やること:UI都合・DB都合をドメインに混ぜない感覚を持つ🚫
- 成果物:「混ぜると困るものリスト」を作る🧾⚠️
Part 2:境界候補を見つける練習✂️🔎(11〜18)
第11章 まず “業務のかたまり(能力)” を並べる🧱📋
- ねらい:境界の候補を作る材料を集める🧺
- やること:出品管理・決済・配送・問い合わせ…みたいに分解🧩
- 成果物:能力リスト(ざっくりでOK)を作る📝😊
第12章 イベントで切る(Event Storming風ミニ)📣🕰️
- ねらい:「何が起きる?」で境界候補を見つける👀
- やること:出品した/購入した/発送した…を時系列で並べる⏳
- 成果物:イベント列+関連する用語をメモする📝✨
第13章 ルールの違いで切る⚖️🧠
- ねらい:ルールが違う場所が境界になりやすいと知る📌
- やること:返品ルール、手数料、出品制限…などを分けて見る💡
- 成果物:「ルールのまとまり」を3つ作る🧩
第14章 データの寿命で切る🗄️⌛
- ねらい:短命データと長命データが混ざるとツラいと知る😵
- やること:一時的なカート情報 vs 取引履歴みたいな話🛒📜
- 成果物:データ分類表(短命/長命/監査必要)を作る📝
第15章 “責任者(オーナー)” 視点で切る👩💻🏷️
- ねらい:誰が面倒を見るかで境界が決まる現実を知る🌍
- やること:運営担当、学生側機能、外部サービス担当…の想定🤝
- 成果物:担当(想定)と責任を紐づける🧾
第16章 UIフローとドメインフローを分けて考える🪞🚦
- ねらい:画面遷移に引きずられず、業務の境界を考える🧠
- やること:画面の都合と業務ルールの都合を分離する🧼
- 成果物:同じ機能でも「業務視点の流れ」を書く✍️✨
第17章 境界案を3つ作る(発散)🌈📝
-
ねらい:正解探しじゃなく、案を出せるようになる😊
-
やること:11〜16章の材料から、境界案A/B/Cを作る📦📦📦
-
成果物:境界案3つ(名前つき)を用意する🏷️✨
- AI相棒🤖:境界案の“追加案”をAIに出させて比較するのもOK🎀
第18章 境界案を比べる(判断)⚖️👀
- ねらい:トレードオフで選ぶ練習をする🧠
- やること:変更頻度・複雑さ・依存の強さ・将来分割のしやすさを比較📌
- 成果物:採用案1つ+採用理由(3行)を書く✍️😊
Part 3:決めた境界を “言葉” と “記録” で固める🧱📝(19〜22)
第19章 コンテキスト名を決める(超大事)🏷️✨
- ねらい:名前が曖昧だと境界も曖昧になるのを防ぐ🛡️
- やること:例:Listing(出品)/Trading(取引)/Shipping(配送)など📦
- 成果物:各BCの名前+一言説明を書く📝😊
第20章 各BCの「責務・目的・非目的」を書く🎯🚫
- ねらい:境界を守る“ルール文”を作る📜
- やること:このBCは何を扱い、何は扱わないかを明確化📌
- 成果物:BCごとに3点セット(目的/責務/非目的)📝✨
第21章 用語集(ユビキタス言語)をBCごとに作る📚🗣️
- ねらい:言葉のブレを減らす(最強の地味努力💪)
- やること:同じ単語でもBCごとに意味を固定する🧷
- 成果物:BCごとのミニ辞書(10語くらい)📖✨
第22章 ADRミニ(設計判断のメモ)🧾🧠
- ねらい:後で迷子にならないように記録する😊
- やること:背景→選択→結果(短く)を残す✍️
- 成果物:ADR 1枚(採用した境界案の理由)📄✨
Part 4:Context Map で “関係の取り決め” を描く🗺️🤝(23〜28)
第23章 Context Mapとは?(関係図)🗺️✨
- ねらい:BC同士がどう繋がるかを“見える化”する👀
- やること:箱(BC)と矢印(関係)で描く📦➡️📦
- 成果物:白紙に手描きでもOKのContext Mapを作る📝😊
第24章 Customer/Supplier(主導権がある関係)🤝👑
- ねらい:どっちが仕様を決める?を意識できるようにする🧠
- やること:Supplierの変更がCustomerに影響する話を理解する⚠️
- 成果物:例題で「どっちが主導?」を書き込む🖊️
第25章 Conformist(合わせるしかない)😌🌧️
- ねらい:外部サービスや既存システムで起きる現実を知る🌍
- やること:「相手に合わせる」代わりに守るべきことを整理🛡️
- 成果物:合わせる対象と、影響範囲メモを書く📝
第26章 Shared Kernel(共有コア)🧬⚠️
- ねらい:共有は“最小”が鉄則だと理解する😵💫防止
- やること:共有が増えると調整地獄になる理由を見る💥
- 成果物:共有するとしたら何を最小にするか決める✂️
第27章 ACL(腐敗防止層)導入:痛い例を見る😇➡️😱🧼
- ねらい:外部のクセがドメインを汚す感覚を掴む🧽
- やること:命名・単位・欠損値・状態…が混ざる事故例を見る🚑
- 成果物:「翻訳が必要な差分リスト」を作る📝✨
第28章 ACL設計:何をどう翻訳する?🌍➡️🏠🛡️
- ねらい:ACLを“変換の置き場”として設計できるようにする🧩
- やること:外部DTO⇔内部モデル、状態変換、単位変換などを決める📦
- 成果物:ACLの責務(変換ルール)を書き起こす🧾😊
Part 5:TypeScriptで “境界をコードに固定” する📁🔒(29〜33)
第29章 まずフォルダで分ける(物理境界)📁✂️
- ねらい:混ざりにくい形を先に作る(初心者に超効く)💪
- やること:contexts/listing, contexts/trading…みたいに分ける📦
- 成果物:境界フォルダがあるプロジェクト構成を作る🧱✨
第30章 各BCの “公開API” を決める🚪✨
- ねらい:外から触っていい入口を絞る🛡️
- やること:公開関数/公開型だけをまとめる(窓口)📮
- 成果物:BCごとに “入口ファイル” を用意する📄
第31章 同名でもOK:BCごとに型を持つ🧩🙂
- ねらい:「Userが2種類あっても正しい」って慣れる😄
- やること:ListingUser / TradingUser みたいに意味で分ける🏷️
- 成果物:BCごとの型スケッチ(プロパティ案)を書く📝
第32章 依存の向きを決める(依存関係ルール)➡️📏
-
ねらい:時間が経っても境界が崩れないようにする🧱
-
やること:「他BCの内部をimportしない」などルールを文章化📜
-
成果物:依存ルールを1枚にまとめる📝✨
- AI相棒🤖:ルールの“抜け”をAIにレビューさせるのが超おすすめ😊
第33章 境界を守る運用(レビュー観点)👀✅
- ねらい:人間の運用で守れる“チェック観点”を持つ🧠
- やること:PRで見るポイント(import/DTO直参照/共有増殖)を整理⚠️
- 成果物:境界チェックリストを作る🧾✅
Part 6:BCの中身を “設計しすぎず” 作れるようにする🧸🏗️(34〜38)
第34章 Entity / Value Object 入門(BC内の型づくり)💎🧱
- ねらい:IDで追うもの・値そのものを分ける感覚を掴む🙂
- やること:価格(Money)や期間(Period)を値として扱う話🪙📅
- 成果物:値オブジェクト候補を3つ決める📝✨
第35章 不変条件(Invariants)を入口で守る🔒🚪
- ねらい:壊れた状態を作れない設計の入口を作る🛡️
- やること:生成/更新時にチェックする(BC内のルールを集中)📌
- 成果物:守りたいルールを5つ書き出す📝😊
第36章 状態(ステータス)と遷移を明文化する🚦🔁
- ねらい:取引の流れが抜け漏れないようにする🧠
- やること:取引状態(出品中→取引中→発送→完了)を表にする📋
- 成果物:状態遷移図(簡易でOK)を作る📝✨
第37章 ユースケース(アプリ層)とCQS(読み/書き)🎮📚
- ねらい:BCの“入口ロジック”をきれいに持てるようにする😊
- やること:更新はCommand、参照はQueryで分ける練習🧩
- 成果物:ユースケースを2つ(出品する/購入する)に分ける📝✨
第38章 DIP/DIの超ミニ:外部都合をBCに入れない🛡️🔌
- ねらい:DB/HTTPを後回しにしても設計できる感覚をつかむ😊
- やること:RepositoryやClientを“抽象”として置く📦
- 成果物:インターフェース案(Repository)を1つ書く📝✨
Part 7:BC同士を安全に繋ぐ(統合)🔗🧼(39〜40)
第39章 統合①:同期API + DTO(まず王道)📡📦
-
ねらい:境界を越えるときは“運搬用の形”にする感覚を固める🛡️
-
やること:どこでDTOに変換する?(入口/出口/ACL)を決める🧭
-
成果物:BC間の受け渡しDTO案を作る📦✨
- AI相棒🤖:DTOのフィールド案をAIに提案させて、不要を削る✂️😊
第40章 統合②:ACL実装 + まとめ発表会🎉🛡️
-
ねらい:翻訳層(ACL)で中心モデルを守り切る✨
-
やること:外部のクセ(命名/単位/欠損/状態)を変換ルールとして固定🧼
-
成果物:完成セット🎁
- Context Map(最終版)🗺️
- 各BCの責務・用語集📚
- ACLの翻訳ルール🧾
- 「なぜこの境界?」を3分で説明できる原稿🎤😊
必要なら次のステップとして、ここから各章を「本文教材」に展開していけるよ😊✨ たとえば各章に ①やさしい説明 ②図(文章で)③TypeScriptミニ演習 ④AIへの質問テンプレ🤖 を付けて、すぐ授業に使える形にする感じ🎀
続けてやるなら、次は 第11〜18章(境界案づくり) を本文化すると一気に理解が進むよ🌸