メインコンテンツまでスキップ

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を始められる✨