TypeScriptによるDDD学習ロードマップ:全100章
第1部:準備と全体像(第1〜10章)🌸🧭
第01章 DDDってなに?(一言でいうと)💡
- 🎯 ねらい:DDDの「目的(複雑さに勝つ)」をつかむ
- 🧩 やること:例題(カフェ注文)で“どこが複雑か”を見る
- 🤖 AI:例題の「困りごと」を箇条書きにしてもらう
- ✅ ゴール:「DDDは流行りじゃなく道具」って理解する✨
第02章 戦術DDDと戦略DDDの距離感🧭
- 🎯 ねらい:今回は“現場でコードを書く設計”中心と確認
- 🧩 やること:戦略は最小限(境界の考えだけ先取り)
- 🤖 AI:用語の違いを「中学生向け」に言い換えさせる
- ✅ ゴール:迷子にならない地図を持つ🗺️
第03章 例題ドメイン紹介:カフェ注文☕🧾
- 🎯 ねらい:題材を固定して積み上げやすくする
- 🧩 やること:注文・明細・支払い・提供の流れを確認
- 🤖 AI:ユースケースの候補を10個出させる
- ✅ ゴール:学習中に「何作ってるんだっけ?」が起きない
第04章 学び方の型(毎章のテンプレ)📖✅
- 🎯 ねらい:毎回の学習手順を固定してラクにする
- 🧩 やること:概念→図→TS→テスト→振り返りの型
- 🤖 AI:章ごとの“理解チェック質問”を作らせる
- ✅ ゴール:自走できる学習サイクルができる🔁
第05章 開発環境:Windows+VS Code最小セット🪟🧰
- 🎯 ねらい:迷わない環境に統一
- 🧩 やること:フォーマット・Lint・テスト実行の導線づくり
- 🤖 AI:設定ファイル案を出させて差分だけ採用
- ✅ ゴール:「保存したら整う」状態にする✨
第06章 TypeScript(2026想定)の設計で大事な所🧡
- 🎯 ねらい:型と不変性がDDDに効く理由を知る
- 🧩 やること:readonly、union、型ガードの役割を整理
- 🤖 AI:よくある型ミス例を作らせて学ぶ
- ✅ ゴール:“型=ルールの一部”の感覚を持つ
第07章 プロジェクト構成(domain/app/infra/test)📦
- 🎯 ねらい:DDDでよくある層分けに慣れる
- 🧩 やること:importの向き(依存の流れ)を先に決める
- 🤖 AI:フォルダ構成案を複数出させ比較する
- ✅ ゴール:後から崩れにくい骨組みを作る🦴
第08章 “設計”の超基礎:責務・境界・依存🎯
- 🎯 ねらい:DDD以前に必要な「設計の空気」を掴む
- 🧩 やること:1クラス1責務/境界を越えるな を体験
- 🤖 AI:悪い例コード→改善案を出させる
- ✅ ゴール:“なぜ分ける?”に答えられる
第09章 仕様の書き方:ユースケースを短く書く📝
- 🎯 ねらい:設計の材料(言葉)を揃える
- 🧩 やること:「誰が/何を/結果」を1〜3行で書く
- 🤖 AI:ユースケース文を整形させる(冗長さカット)
- ✅ ゴール:実装前に“やること”がブレない
第10章 受け入れ条件(Given/When/Then)✅🧪
- 🎯 ねらい:テストできる仕様にする
- 🧩 やること:正常系と異常系を最低1つずつ書く
- 🤖 AI:境界値や例外ケースを提案させる
- ✅ ゴール:あとで「テスト書けない…」が減る
第2部:ドメイン理解と言葉づくり(第11〜20章)🗣️📘
第11章 ドメインってなに?(UI/DBより先)🌱
- 🎯 ねらい:“ルールが住む場所”を意識する
- 🧩 やること:画面・DB・APIより「業務ルール」を先に書く
- 🤖 AI:ドメインの重要語を抽出させる
- ✅ ゴール:設計の中心がブレない
第12章 ユビキタス言語:言葉をそろえる🗣️✨
- 🎯 ねらい:同じ単語を同じ意味で使う
- 🧩 やること:用語辞書(短文定義つき)を作る
- 🤖 AI:似た言葉(注文/オーダー等)を統一案に整理
- ✅ ゴール:会話とコードの距離が縮む
第13章 イベントの列挙(イベントストーミング風)⚡🗒️
- 🎯 ねらい:「何が起きる?」で流れを掴む
- 🧩 やること:注文作成→確定→支払い→提供…を並べる
- 🤖 AI:抜けがちなイベント(キャンセル等)を提案させる
- ✅ ゴール:状態の変化が見える
第14章 状態と遷移(ステート図の下書き)🚦
- 🎯 ねらい:不変条件の“置き場”を見つける
- 🧩 やること:状態(Draft/Confirmed/Paid…)と遷移を整理
- 🤖 AI:遷移表(許可/禁止)を作らせる
- ✅ ゴール:「いつ何ができる?」が明確になる
第15章 不変条件(絶対守るルール)🔒📏
- 🎯 ねらい:DDDの芯=守るべきルール
- 🧩 やること:「支払い後は変更不可」みたいなルールを列挙
- 🤖 AI:不変条件の“曖昧さ”を指摘させる
- ✅ ゴール:ルールがコードに落ちる形になる
第16章 例外ケース(失敗の道)😵💫🧯
- 🎯 ねらい:失敗を先に設計して事故を減らす
- 🧩 やること:在庫切れ/二重確定/期限切れなどを追加
- 🤖 AI:異常系のテストケース案を作らせる
- ✅ ゴール:実装が“想定外”で崩れにくい
第17章 境界の気配:モジュール分けの種📦🌿
- 🎯 ねらい:大きくなる前に分割の考えを持つ
- 🧩 やること:「注文」「支払い」「メニュー」の塊を意識
- 🤖 AI:分割案を2〜3パターン出させる
- ✅ ゴール:将来の拡張に耐える
第18章 仕様を図にする(最小のドメイン図)🧩🖼️
- 🎯 ねらい:言葉→構造へ変換する練習
- 🧩 やること:主要オブジェクトと関係線だけ描く
- 🤖 AI:図の説明文(なぜこう分けたか)を作らせる
- ✅ ゴール:チームに説明できる
第19章 “何を作らないか”を決める(スコープ)✂️
- 🎯 ねらい:学習で詰まらない範囲に絞る
- 🧩 やること:今回は「決済API連携」はダミーでもOK等
- 🤖 AI:MVPスコープ案を作らせる
- ✅ ゴール:完成体験を優先できる🎉
第20章 AIの使いどころ(設計の補助輪)🤖🚲
- 🎯 ねらい:AIを“答え”じゃなく“壁打ち”にする
- 🧩 やること:質問テンプレ(目的/制約/例/NG)を作る
- 🤖 AI:レビュー観点(不変条件・依存)を固定化
- ✅ ゴール:AIで理解が浅くならない
第3部:TypeScriptでDDDしやすい基礎体力(第21〜30章)🏋️♀️🧡
第21章 不変(immutable)の基礎:変更より生成🧊
- 🎯 ねらい:VOや集約で超大事な感覚を作る
- 🧩 やること:readonly/破壊的変更を避ける書き方
- 🤖 AI:mutableな悪例→immutable改善案を出させる
- ✅ ゴール:状態バグが減る
第22章 型で守る:プリミティブ地獄から脱出🧱
- 🎯 ねらい:number/string乱用を卒業する
- 🧩 やること:IDや金額に専用型(VO)を使う発想
- 🤖 AI:型がないと起きる事故例を作らせる
- ✅ ゴール:バグが“コンパイルで止まる”
第23章 エラーの表現:例外 vs Result型⚖️
- 🎯 ねらい:失敗をどう流すか決める
- 🧩 やること:ドメインは例外、アプリ層はResult…など方針
- 🤖 AI:チーム方針のメリデメ表を作らせる
- ✅ ゴール:例外地獄にならない
第24章 バリデーションの置き場(UI/アプリ/ドメイン)📍
- 🎯 ねらい:二重実装・抜け漏れを減らす
- 🧩 やること:ドメイン=不変条件、UI=入力補助 など整理
- 🤖 AI:どこに置くべきか判定クイズを作らせる
- ✅ ゴール:ルールが散らばらない
第25章 テストの入口:AAA(Arrange/Act/Assert)🧪
- 🎯 ねらい:後半で詰まらないための先行投資
- 🧩 やること:小さな関数でテストの型を覚える
- 🤖 AI:テストケース候補を出させる
- ✅ ゴール:テストが怖くない
第26章 命名と意図(読みやすさの最短ルート)🏷️
- 🎯 ねらい:“何をしてるか”が一瞬で分かる
- 🧩 やること:動詞/名詞のルール、曖昧語を避ける
- 🤖 AI:命名案を複数出させて比較
- ✅ ゴール:設計が伝わる
第27章 モジュール境界とimportの向き🔁
- 🎯 ねらい:依存逆流(ぐちゃぐちゃ化)を防ぐ
- 🧩 やること:domainはinfraを知らない、を徹底
- 🤖 AI:依存関係チェックリストを作らせる
- ✅ ゴール:大きくしても崩れにくい
第28章 DTOの感覚:外に出す箱📦
- 🎯 ねらい:ドメイン型をそのまま返さない理由を知る
- 🧩 やること:UI/API向けの形とドメインの形を分ける
- 🤖 AI:DTO設計案を出させる(余計な情報を削る)
- ✅ ゴール:境界が守れる
第29章 例題の下地:フォルダと空ファイルを用意📁
- 🎯 ねらい:実装へスムーズに入る準備
- 🧩 やること:domain/app/infra/testの骨だけ作る
- 🤖 AI:ディレクトリ案+役割説明を作らせる
- ✅ ゴール:迷わず書き始められる
第30章 小まとめ:DDDに効くTS要素を復習🧡🔁
- 🎯 ねらい:ここまでの基礎を固める
- 🧩 やること:不変・型・例外・境界・テストの要点を再確認
- 🤖 AI:理解チェック10問を作らせる
- ✅ ゴール:次の“戦術DDD本体”に入れる
第4部:Value Object(第31〜40章)💎🧊
第31章 Value Object入門:値そのものが主役💎
- 🎯 ねらい:VOの強さ(不変+意味)を知る
- 🧩 やること:金額/数量/メールなどをVO候補にする
- 🤖 AI:VO候補リストを洗い出させる
- ✅ ゴール:型でルールを守る土台ができる
第32章 VOの鉄則:不変・等価性・自己完結🧊
- 🎯 ねらい:VOっぽいだけを防ぐ
- 🧩 やること:比較は値、変更は新規生成、検証は生成時
- 🤖 AI:VOのダメ例(setterあり等)を作らせる
- ✅ ゴール:VOが“バグ除去装置”になる
第33章 Money VO:通貨・丸め・ゼロ禁止?💴
- 🎯 ねらい:現実っぽいVOで慣れる
- 🧩 やること:整数で持つ/丸め方/通貨コードなど
- 🤖 AI:境界値(0/負/巨大値)のテスト案を出させる
- ✅ ゴール:金額バグを型で殺す
第34章 Quantity VO:数量と単位📏
- 🎯 ねらい:数量のルールを閉じ込める
- 🧩 やること:最小1、最大、単位(杯/個)など
- 🤖 AI:単位の混乱例を出させる
- ✅ ゴール:数の意味がコードに残る
第35章 Email VO:形式+正規化✉️
- 🎯 ねらい:入力のゆらぎを吸収する
- 🧩 やること:小文字化、空白除去、形式チェック
- 🤖 AI:壊れたメール例を大量生成させる
- ✅ ゴール:バリデーションが散らばらない
第36章 日時のVO:時間は地雷⏰🧨
- 🎯 ねらい:時間系の事故を減らす
- 🧩 やること:タイムゾーン方針、比較、期限判定
- 🤖 AI:時間のバグ例(境界跨ぎ)を出させる
- ✅ ゴール:時間の扱いに筋が通る
第37章 VOの合成:Address/Receiptなど📦
- 🎯 ねらい:VOはVOを含んでOKを理解
- 🧩 やること:複合VOの作り方(検証の責務)
- 🤖 AI:複合VOの責務分割案を出させる
- ✅ ゴール:モデルが自然に育つ
第38章 “VOに入れすぎ”問題(境界線)⚖️
- 🎯 ねらい:VOが巨大化するのを防ぐ
- 🧩 やること:不変条件だけ、I/OやDB知識は入れない
- 🤖 AI:VO肥大化の兆候チェックを作らせる
- ✅ ゴール:VOが綺麗に保てる
第39章 VOのテスト:最小で強く🧪💎
- 🎯 ねらい:VOはテストしやすいを体感
- 🧩 やること:生成成功/失敗、等価性、境界値
- 🤖 AI:テスト名(it should...)案を出させる
- ✅ ゴール:テストが設計を支える
第40章 まとめ演習:VOだけで仕様の半分を守る🎯
- 🎯 ねらい:VOが“守備力”だと理解する
- 🧩 やること:VOを追加してバグが減る体験を作る
- 🤖 AI:追加すべきVO候補を提案させる
- ✅ ゴール:次のEntityへ進める✨
第5部:Entity(第41〜50章)🪪🧍
第41章 Entity入門:同一性(ID)が主役🪪
- 🎯 ねらい:VOとの違いをハッキリさせる
- 🧩 やること:注文は「同じ注文」と言える基準=ID
- 🤖 AI:Entity/VO分類クイズを作らせる
- ✅ ゴール:迷わず分類できる
第42章 Entityの設計:ID生成と比較ルール🆔
- 🎯 ねらい:比較はID、値の一致は別問題
- 🧩 やること:OrderIdをVOとして扱う
- 🤖 AI:ID周りの落とし穴(再生成等)を列挙させる
- ✅ ゴール:同一性が壊れない
第43章 Entityの不変条件:どこで守る?🔒
- 🎯 ねらい:ルールはEntity自身が守る
- 🧩 やること:setter禁止に近い設計へ
- 🤖 AI:ガード節の設計を提案させる
- ✅ ゴール:Entityが“自衛”できる
第44章 Order(注文)Entityのたたき台☕🧾
- 🎯 ねらい:例題の中心を作る
- 🧩 やること:状態、明細、合計、作成者などを整理
- 🤖 AI:プロパティ候補と理由を出させる
- ✅ ゴール:モデルの芯が立つ
第45章 Entityの振る舞い:データよりメソッド🕹️
- 🎯 ねらい:手続きではなく“意図”で操作する
- 🧩 やること:addItem/confirm/cancel など
- 🤖 AI:メソッド名案を出させる(自然な言葉)
- ✅ ゴール:“やりたいこと”が表現できる
第46章 状態遷移を閉じ込める(setStatus禁止)🚫🚦
- 🎯 ねらい:不正な遷移を防ぐ
- 🧩 やること:transitionメソッドでのみ変更
- 🤖 AI:許可/禁止遷移表をコードに落とす案を作らせる
- ✅ ゴール:状態バグが激減する
第47章 EntityとVOの境界:どこまでVO化?🧩
- 🎯 ねらい:モデリングが自然に進む
- 🧩 やること:LineItemはVO?Entity?を考える
- 🤖 AI:判断基準(同一性/変更頻度)を整理させる
- ✅ ゴール:設計の理由が言える
第48章 Entityのテスト:状態と振る舞い🧪🧍
- 🎯 ねらい:Entityのルールを壊さない
- 🧩 やること:遷移の成功/失敗を中心にテスト
- 🤖 AI:異常系の網羅リストを出させる
- ✅ ゴール:安心して変更できる
第49章 小演習:OrderLineの扱い(VO寄りで設計)🧾
- 🎯 ねらい:集約前の準備として練習
- 🧩 やること:明細の追加・削除・数量変更のルール化
- 🤖 AI:仕様の抜け(重複追加など)を指摘させる
- ✅ ゴール:次のAggregateがスムーズ
第50章 ここまで総整理:VO+Entityで守る範囲🎯✨
- 🎯 ねらい:戦術DDDの基礎2本柱を固める
- 🧩 やること:どのルールがどこで守られてるか確認
- 🤖 AI:設計レビュー観点(VO/Entity)を固定化
- ✅ ゴール:Aggregateへ進む準備OK
第6部:Aggregate(第51〜60章)🏯🛡️
第51章 Aggregate入門:変更の単位を決める📦
- 🎯 ねらい:“一緒に守るルール”でまとめる発想
- 🧩 やること:注文と明細は同時に守りたい?を考える
- 🤖 AI:集約境界の案を複数出させる
- ✅ ゴール:安全な変更単位が分かる
第52章 Aggregate Root:外部の入口は1つ🚪👑
- 🎯 ねらい:外から触る窓口を限定する
- 🧩 やること:Order以外を外から直接変更させない
- 🤖 AI:外部公開すべきメソッド一覧を出させる
- ✅ ゴール:不変条件が守りやすい
第53章 集約境界の決め方:不変条件ドリブン🔒
- 🎯 ねらい:DBや画面じゃなくルールで決める
- 🧩 やること:「支払い後は明細変更不可」などを基準にする
- 🤖 AI:境界を変えた場合のメリデメを作らせる
- ✅ ゴール:境界に理由がある
第54章 他集約の参照:ID参照が基本🔗🪪
- 🎯 ねらい:オブジェクト参照で絡まない
- 🧩 やること:MenuItemはMenuItemIdだけ持つ など
- 🤖 AI:依存が増えるパターンを警告させる
- ✅ ゴール:巨大オブジェクト地獄を回避
第55章 トランザクション感覚(超入門)🧾⏱️
- 🎯 ねらい:一括で成功/失敗を扱う範囲を意識
- 🧩 やること:「注文確定」はどこまで一気にやる?
- 🤖 AI:ユースケース別に“原子性”が必要か整理させる
- ✅ ゴール:後でDB入れても破綻しにくい
第56章 Order集約を実装①:構造を固める🏯
- 🎯 ねらい:ルールを守る箱を作る
- 🧩 やること:OrderRoot+明細+状態+合計計算
- 🤖 AI:設計ミス(外から配列を弄れる等)をレビューさせる
- ✅ ゴール:集約が“安全な城”になる
第57章 Order集約を実装②:遷移とガード節🚦🛡️
- 🎯 ねらい:不正操作を完全ブロック
- 🧩 やること:confirm/pay/cancel でルールを閉じ込める
- 🤖 AI:例外メッセージ案をユーザー向けに整えさせる
- ✅ ゴール:仕様違反が起きない
第58章 集約のテスト:不変条件が守れるか🧪🔒
- 🎯 ねらい:集約は“仕様を守る装置”なのでテスト重要
- 🧩 やること:遷移・明細操作・合計の整合性を確認
- 🤖 AI:テストケースの抜け(順序違い等)を追加提案させる
- ✅ ゴール:壊れない安心感が出る
第59章 集約のアンチパターン集(よくやる)😂⚠️
- 🎯 ねらい:成長スピードを落とす罠を回避
- 🧩 やること:巨大集約、外部参照ベタ張り、setter祭り
- 🤖 AI:今のコードに当てはまる臭いを診断させる
- ✅ ゴール:DDDっぽいだけを卒業
第60章 中間まとめ:戦術DDDの核3点(VO/Entity/Agg)🎒✨
- 🎯 ねらい:一旦“基礎の完成”まで持っていく
- 🧩 やること:どのルールがどこにいるかを図にする
- 🤖 AI:レビュー観点(境界/依存/不変条件)を固定化
- ✅ ゴール:次はアプリ層へ進める!
第7部:ユースケース(Application)を作る(第61〜70章)🎬🧑🍳
第61章 Application Service入門:ユースケース担当🎬
- 🎯 ねらい:ドメインを“使う側”を理解する
- 🧩 やること:入力→取得→ドメイン操作→保存 の流れ
- 🤖 AI:ユースケースの手順(疑似コード)を作らせる
- ✅ ゴール:役割が混ざらない
第62章 ユースケース設計:Command/Queryを分ける🧾🔎
- 🎯 ねらい:更新と参照を分けて混乱を減らす
- 🧩 やること:PlaceOrder(更新)とGetOrder(参照)を分離
- 🤖 AI:どっちに分類?クイズを作らせる
- ✅ ゴール:設計がスッキリする
第63章 DTO設計:入出力の形を決める📦🔁
- 🎯 ねらい:外部とドメインを分離する
- 🧩 やること:入力DTOと出力DTOを分ける
- 🤖 AI:DTOに入れすぎな項目を指摘させる
- ✅ ゴール:境界が守れる
第64章 PlaceOrder実装①:最小の成功ルート✅
- 🎯 ねらい:まず動く、を作る
- 🧩 やること:注文作成→保存まで最短で
- 🤖 AI:コード生成は“骨格だけ”頼む(ロジックは自分で)
- ✅ ゴール:完成への足場ができる
第65章 PlaceOrder実装②:異常系とメッセージ🧯
- 🎯 ねらい:失敗時の扱いを整える
- 🧩 やること:入力不正、状態不正、存在しない商品など
- 🤖 AI:ユーザー向け文言と開発者向けログ案を分けさせる
- ✅ ゴール:現場っぽい実装になる
第66章 支払いユースケース:PayOrder 💳
- 🎯 ねらい:状態遷移と外部連携の前段を作る
- 🧩 やること:支払い前提チェック→支払い済みにする
- 🤖 AI:支払い失敗ケース(再試行など)を提案させる
- ✅ ゴール:次の統合で困らない
第67章 提供ユースケース:FulfillOrder ☕📦
- 🎯 ねらい:現実のフロー(準備→提供)を入れる
- 🧩 やること:提供可能条件(支払い済み等)を厳密に
- 🤖 AI:状態遷移のテスト観点を増やさせる
- ✅ ゴール:仕様が固くなる
第68章 参照ユースケース:GetOrder(読み取り)🔎
- 🎯 ねらい:参照は軽く、ドメインを汚さない
- 🧩 やること:表示用DTOに整形(必要なら直読みも検討)
- 🤖 AI:表示項目の優先順位を整理させる
- ✅ ゴール:更新系と混ざらない
第69章 アプリ層のアンチパターン(ルールの漏れ)⚠️
- 🎯 ねらい:アプリ層にルールを書きすぎない
- 🧩 やること:不変条件はドメインへ、手順はアプリへ
- 🤖 AI:いまの実装で“漏れたルール”を探させる
- ✅ ゴール:DDDの効果が出る
第70章 ここまで統合:ユースケースが回る状態🎉
- 🎯 ねらい:モデル→ユースケースまで繋がった!
- 🧩 やること:Place/Pay/Fulfill/Get を一通り通す
- 🤖 AI:操作シナリオ(デモ台本)を作らせる
- ✅ ゴール:中盤の到達点クリア✨
第8部:Repository / Factory / Domain Service(第71〜80章)🧰🏭🧙♀️
第71章 Repository入門:保存・取得の抽象化📚
- 🎯 ねらい:ドメインがDBを知らない状態を作る
- 🧩 やること:OrderRepositoryのinterfaceをdomain側に置く
- 🤖 AI:メソッド粒度(save/findById等)案を出させる
- ✅ ゴール:infraを差し替えられる
第72章 InMemory Repositoryで先に進む🧪📦
- 🎯 ねらい:DB抜きで動作確認できる
- 🧩 やること:Mapで保存、テストが速い
- 🤖 AI:InMemoryの落とし穴(共有状態)を注意喚起させる
- ✅ ゴール:開発速度が上がる
第73章 Repositoryの粒度:集約単位📦
- 🎯 ねらい:何でもRepositoryにしない
- 🧩 やること:集約ルート単位で扱うルールを守る
- 🤖 AI:余計なRepositoryを作ってないか診断させる
- ✅ ゴール:設計が太らない
第74章 Factory入門:生成が複雑なら任せる🏭
- 🎯 ねらい:生成ロジックの散らばりを防ぐ
- 🧩 やること:注文作成時の初期状態・ID生成・初期値
- 🤖 AI:Factory候補の見つけ方を例で作らせる
- ✅ ゴール:生成が綺麗になる
第75章 Static factoryとFactory classの使い分け⚖️
- 🎯 ねらい:道具の選び方に慣れる
- 🧩 やること:小さいうちはstatic、増えたらclass化
- 🤖 AI:将来増える条件の予測を出させる
- ✅ ゴール:過剰設計を避ける
第76章 Domain Service入門:どこにも属さないルール🧙♀️
- 🎯 ねらい:無理にEntityへ押し込めない
- 🧩 やること:複数集約にまたがる判断などに限定
- 🤖 AI:Domain Service多用の危険を説明させる
- ✅ ゴール:必要な時だけ使える
第77章 例:割引計算はどこに置く?🏷️
- 🎯 ねらい:置き場所の判断力をつける
- 🧩 やること:VO/Entity/Domain Serviceの候補を比較
- 🤖 AI:比較表(保守性/変更頻度)を作らせる
- ✅ ゴール:“理由ある配置”ができる
第78章 依存の向き:内側が強い🏰➡️🧱
- 🎯 ねらい:壊れにくい構造を守る
- 🧩 やること:domainはapp/infraを知らない
- 🤖 AI:依存図を自動生成させて確認
- ✅ ゴール:大規模化しても崩れにくい
第79章 モジュール境界の実戦:禁止importルール🚧
- 🎯 ねらい:口約束じゃなく仕組みで守る
- 🧩 やること:境界を越える参照を検知できるようにする
- 🤖 AI:チェック項目をテンプレ化
- ✅ ゴール:チーム開発でも守れる
第80章 中間演習:Repository差し替え体験🔁🎮
- 🎯 ねらい:抽象化の価値を体感する
- 🧩 やること:InMemory→(仮)永続化実装に切り替える
- 🤖 AI:差分レビューをしてもらう
- ✅ ゴール:「分けてよかった!」を実感
第9部:Specification / Policy / 時間 / エラー(第81〜90章)🧠📏🧯
第81章 ルールの分離:if地獄を見つける👀
- 🎯 ねらい:複雑さの形を認識する
- 🧩 やること:割引・キャンペーン条件が増える未来を想定
- 🤖 AI:if地獄の未来予測を出させる
- ✅ ゴール:次の道具が必要な理由が分かる
第82章 Specification入門:条件をオブジェクト化🔎📄
- 🎯 ねらい:条件を再利用・合成しやすくする
- 🧩 やること:isSatisfiedBy(entity)の形を理解
- 🤖 AI:条件の合成案(AND/OR/NOT)を出させる
- ✅ ゴール:条件設計に強くなる
第83章 Specification実装①:単体条件を作る🧩
- 🎯 ねらい:小さく作って感覚を掴む
- 🧩 やること:例:支払い済みか?期限内か?
- 🤖 AI:テストケースを増やさせる
- ✅ ゴール:再利用できる条件ができる
第84章 Specification実装②:合成(AND/OR)🧷
- 🎯 ねらい:条件を組み合わせて読みやすくする
- 🧩 やること:学生割 AND 平日限定…みたいな合成
- 🤖 AI:読みやすい命名案を出させる
- ✅ ゴール:条件が“文章”みたいに読める
第85章 Policy(方針)入門:条件→行動🧠➡️🏃♀️
- 🎯 ねらい:ビジネスの“運用ルール”を表現
- 🧩 やること:条件を満たしたら何をする?を整理
- 🤖 AI:Policy候補(自動通知等)を提案させる
- ✅ ゴール:ルールが増えても整理できる
第86章 時間の設計:Clock注入⏰🧪
- 🎯 ねらい:テストできる「今」を作る
- 🧩 やること:Date.now直呼びを避ける方針
- 🤖 AI:時間バグの例(期限判定)を出させる
- ✅ ゴール:時間系が壊れにくい
第87章 エラー設計①:ドメイン例外の作法🧯📌
- 🎯 ねらい:例外を“仕様の一部”にする
- 🧩 やること:例外型、メッセージ、原因の持ち方
- 🤖 AI:例外メッセージを分かりやすく整形させる
- ✅ ゴール:デバッグが楽になる
第88章 エラー設計②:Result型で返す場合の型設計📦
- 🎯 ねらい:UIやAPIに返す失敗を整理
- 🧩 やること:errorCode、userMessage、details の形
- 🤖 AI:エラーコード案を作らせる
- ✅ ゴール:例外とResultを混ぜて地獄にならない
第89章 エラー設計③:ユーザー向けと開発者向けを分ける👤🛠️
- 🎯 ねらい:優しい表示+解析できるログ
- 🧩 やること:表示メッセージとログメタ情報を分離
- 🤖 AI:ログに必要な項目を提案させる
- ✅ ゴール:運用で詰まらない
第90章 まとめ演習:割引+期限+エラーを統合🎓✨
- 🎯 ねらい:難所を1回まとめて体験
- 🧩 やること:Specification+Clock+エラーを同時に使う
- 🤖 AI:抜けてる仕様を指摘させる
- ✅ ゴール:後半(イベント/統合)へ行ける
第10部:Domain Event と連携(第91〜100章)⚡📮🧩
第91章 Domain Event入門:「起きた事実」📣
- 🎯 ねらい:状態変更を“出来事”として扱う
- 🧩 やること:OrderPlaced/PaymentCompleted を定義
- 🤖 AI:イベント名をユビキタス言語に揃える提案をさせる
- ✅ ゴール:イベント思考の入口に立つ
第92章 いつ発行する?どこで発行する?📍⚡
- 🎯 ねらい:イベント発行タイミングの基本を掴む
- 🧩 やること:集約内で発行→アプリ層で配る、の流れ
- 🤖 AI:発行ポイントの候補をレビューさせる
- ✅ ゴール:責務が混ざらない
第93章 イベントの持つ情報:入れすぎ注意📦⚖️
- 🎯 ねらい:イベント肥大化を防ぐ
- 🧩 やること:必要最小限(ID/時刻/重要値)にする
- 🤖 AI:イベント項目の妥当性チェックをさせる
- ✅ ゴール:疎結合が保てる
第94章 同期処理でのイベント購読(まずは簡単に)🔔
- 🎯 ねらい:難しくしないで体験する
- 🧩 やること:イベント受信→処理(例:レシート作成)
- 🤖 AI:購読側の責務(副作用)を指摘させる
- ✅ ゴール:イベント連携が動く
第95章 非同期の考え方(なぜ必要?)⏳🌍
- 🎯 ねらい:将来のスケールを理解
- 🧩 やること:重い処理、外部連携、再試行の必要性
- 🤖 AI:同期で困る例をシナリオで出させる
- ✅ ゴール:後のOutbox/冪等性の布石
第96章 冪等性入門:同じ要求が来ても安全🔁🛡️
- 🎯 ねらい:リトライ前提の世界に慣れる
- 🧩 やること:二重払い防止、同一イベント二重処理防止
- 🤖 AI:冪等キー設計案を出させる
- ✅ ゴール:運用で壊れにくい
第97章 Outbox入門:更新と通知のズレ対策📤📬
- 🎯 ねらい:DB更新したのに通知失敗…を減らす
- 🧩 やること:“後で確実に送る”設計の基本を学ぶ
- 🤖 AI:失敗パターン(ネットワーク断等)を列挙させる
- ✅ ゴール:実務で強い設計が見える
第98章 ACL入門:外部の都合を内側に入れない🛡️
- 🎯 ねらい:外部APIの変化からドメインを守る
- 🧩 やること:外部DTO→ACL変換→ドメイン、の形
- 🤖 AI:変換ルールの雛形を作らせる
- ✅ ゴール:境界が守れる
第99章 統合演習:注文→支払い→レシート(イベント連携)🎉
- 🎯 ねらい:イベントが“役立つ体験”を作る
- 🧩 やること:PaymentCompleted → ReceiptIssued の流れ
- 🤖 AI:デモシナリオ+チェックリストを作らせる
- ✅ ゴール:「イベント便利!」になる
第100章 ここまでの卒業チェック+次の一歩🎓🚀
- 🎯 ねらい:DDDっぽいだけを確実に卒業
- 🧩 やること:不変条件/境界/依存/テスト/イベントの最終確認
- 🤖 AI:レビュー観点テンプレを完成させる
- ✅ ゴール:自分の題材でDDDを始められる✨