エンティティ/値オブジェクトの切り分け 24章:詳細アウトライン 📘✨
(Windows+VS Code前提/CopilotやCodex系AI拡張導入済み前提👍)
全体構成(24章)🌈
- Part 1(1〜6章):概念の土台づくり(Entity/VOの芯)🧠✨
- Part 2(7〜11章):Value Objectを作って感覚を固める💎🧱
- Part 3(12〜17章):Entity・境界・エラー・状態遷移まで入門🪪🚪⚠️
- Part 4(18〜24章):永続化/変換/ACL/テスト/総合演習で実務形へ🚀🧪
Part 1:概念の土台づくり(1〜6章)🧠✨
第1章:はじめに(この学習のゴール)🎯😊
-
ねらい:EntityとVOを「迷ったときに判断できる」状態にする✨
-
学ぶこと:同一性/値/不変/責務の分離(超やさしく)🙂
-
やること:題材(ミニ注文 or サークル会計)を選ぶ🛒📒
-
成果物:学習ゴールメモ(判断軸を3つ書く)📝
-
AIプロンプト例🤖:
- 「初心者向けに“EntityとVOの違い”を、例3つで説明して」
第2章:Windows+VS Code+TypeScript環境づくり💻🪟
-
ねらい:学習で詰まらない“最低限の開発セット”を作る🛠️
-
学ぶこと:TSプロジェクト、Lint/Format、テストの導入感覚🧩
-
やること:VS Code拡張・AI拡張の基本設定(使いすぎ注意も)🤖⚠️
-
成果物:空プロジェクト+テストが動く状態✅
-
AIプロンプト例🤖:
- 「TypeScript学習用の最小構成フォルダ案を出して。テストも入れて」
第3章:題材の“業務ルール”を決めよう(超ミニ仕様)🧾✨
-
ねらい:設計は“ルール”がないと始まらないのを体験🙂
-
学ぶこと:名詞(もの)と動詞(操作)を分けて考える🧠
-
やること:仕様を10行くらいで書く(箇条書きでOK)📝
-
成果物:ミニ仕様+用語リスト(ユビキタス言語ごっこ)📘
-
AIプロンプト例🤖:
- 「この仕様から“名詞候補”と“ルール候補”を抜き出して」
第4章:Entity/VOを分ける前に…「同一性」ってなに?🪪🧸
-
ねらい:Entityの芯=同一性(時間をまたいで同じ)を理解⏳
-
学ぶこと:IDは手段/本質は“追跡が必要か”🔍
-
やること:題材から「追跡したいもの」を3つ挙げる📝
-
成果物:Entity候補リスト(理由つき)✅
-
AIプロンプト例🤖:
- 「この候補がEntityっぽい理由を“同一性”の観点で説明して」
第5章:Value Objectの芯=不変+自己検証+値の等価性💎✅
-
ねらい:VOの“気持ちよさ”を先に味わう🍰
-
学ぶこと:不変(Immutable)/不変条件(Invariants)/等価性🔒
-
やること:題材から「値そのもの」候補を5つ挙げる💡
-
成果物:VO候補リスト(守りたいルールつき)🛡️
-
AIプロンプト例🤖:
- 「このVOに必要な“不変条件”を、初心者向けに箇条書きで」
第6章:Entityの芯=更新の入口を絞って“壊れない”設計🧱🪪
-
ねらい:Entityは変わる。でも壊れない。ここが設計ポイント🙂
-
学ぶこと:直接書き換え禁止/メソッドで更新/ルールは中へ🚧
-
やること:題材の「更新イベント」を3つ書く(例:支払う、取消す)📝
-
成果物:Entityが守るルール一覧(やっていい/だめ)🚦
-
AIプロンプト例🤖:
- 「このEntityの“やってはいけない状態”を想像して例を出して」
Part 2:Value Objectを作って感覚を固める(7〜11章)💎🧱
第7章:迷わないための“判定フロー”を作る🗺️✨
-
ねらい:判断がブレない“質問リスト”を持つ🙂
-
学ぶこと:①追跡?②不変が自然?③置き換え?の3点セット🧠
-
やること:判定フローを自分の言葉で作る📝
-
成果物:判定チートシート(1枚)📄
-
AIプロンプト例🤖:
- 「この判定フローに抜けがないかレビューして。改善案も出して」
第8章:VO実装①「Email」や「PostalCode」みたいな“形式の値”📧📮
-
ねらい:VOの基本形(生成時チェック)を作れるようにする✅
-
学ぶこと:生成時バリデーション/無効値を作らない🚫
-
やること:Email VOを作り、成功/失敗をテストする🧪
-
成果物:Email VO+テスト✅
-
AIプロンプト例🤖:
- 「Emailの境界値テスト(OK/NG例)を20個出して」
第9章:VO実装②「Money」みたいな“計算する値”💰➕
-
ねらい:VOに“ふるまい(メソッド)”を持たせる感覚を掴む🙂
-
学ぶこと:加算/減算/通貨/丸め、ルールをVO側で守る🛡️
-
やること:Moneyの add() / multiply() などを作る🧩
-
成果物:Money VO+計算テスト🧪
-
AIプロンプト例🤖:
- 「Moneyの設計で初心者がやりがちなバグ例を出して、回避策も教えて」
第10章:VO実装③「Period」みたいな“範囲の値”📅↔️
-
ねらい:開始/終了の整合性を“型で守る”体験✨
-
学ぶこと:start <= end、空範囲OK?などの判断🧠
-
やること:Period VO+contains() などのメソッド🧩
-
成果物:Period VO+境界テスト🧪
-
AIプロンプト例🤖:
- 「期間のルール候補(業務でありがち)を10個出して」
第11章:VOの“等価性”と“コレクション”設計(Set/List)🧺💎
-
ねらい:VOが増えたときに破綻しない扱い方を知る🙂
-
学ぶこと:値の比較/重複禁止/順序が意味を持つか🔍
-
やること:Tagの集合、LineItemの一覧…を整理してみる🧩
-
成果物:VO集合のルール(重複/順序/最大数)📋
-
AIプロンプト例🤖:
- 「このコレクションはSet向き?List向き?理由も説明して」
Part 3:Entity・境界・エラー・状態遷移(12〜17章)🪪🚪⚠️
第12章:Entity実装①「基本のEntity骨格」を作る🪪🧱
-
ねらい:ID/生成/更新の入口を作れるようにする🙂
-
学ぶこと:コンストラクタをむやみに公開しない考え方🚪
-
やること:Member or Order のEntityを作る(最小)🧩
-
成果物:Entity+生成テスト🧪
-
AIプロンプト例🤖:
- 「Entityの責務が増えすぎないための分割案を提案して」
第13章:Entity実装②「VOを持たせる」+“更新は差し替え”🔁💎
-
ねらい:Entity × VO の組み合わせが自然にできる✨
-
学ぶこと:住所変更=Address VOを新しく作って差し替える🙂
-
やること:Entityに Email/Money/Period を組み込む🧩
-
成果物:EntityがVOを使う形+更新テスト🧪
-
AIプロンプト例🤖:
- 「VOを差し替える更新設計になってるかチェックして」
第14章:Aggregateの入口(更新ルートを1つに絞る)🚪👑
-
ねらい:“誰が誰を更新していいか”で事故を減らす🚑
-
学ぶこと:集約ルート経由でのみ更新(DDDの入口)📦
-
やること:Order→LineItemsの更新を「Orderメソッド経由」にする🧩
-
成果物:更新経路が整理されたモデル✅
-
AIプロンプト例🤖:
- 「このモデルの“直接触っちゃダメなところ”を指摘して理由も言って」
第15章:不変条件を“入口”で守る(作れない状態を作らない)🛡️🚪
-
ねらい:チェックが散らばるのを止める🙂
-
学ぶこと:生成/更新メソッドで保証、内部は前提を信頼✅
-
やること:無効状態が作れないようにコードを整える🔧
-
成果物:不変条件チェックが一箇所に集まった設計✨
-
AIプロンプト例🤖:
- 「この不変条件、どこで守るのが一番安全?理由も」
第16章:状態遷移(超入門のState Machine)🚦🔄
-
ねらい:Entityの“状態”を整理するとバグが減るのを体験🙂
-
学ぶこと:状態・遷移・ガード条件(許可/禁止)🚫✅
-
やること:OrderStatus(Draft→Submitted→Paid→Cancelled)を設計📋
-
成果物:遷移表+遷移テスト🧪
-
AIプロンプト例🤖:
- 「この状態遷移で抜けてそうなケースを5つ出して」
第17章:境界(DTO→ドメイン)とエラーの基本(Result/例外)🚪⚠️
-
ねらい:外から来たデータを“安全に”中へ入れる🙂
-
学ぶこと:入力DTO変換/ドメインエラーとシステムエラーの分離🧯
-
やること:CreateOrderRequest DTO → Order に変換、失敗を表現🧩
-
成果物:境界変換+エラー表現の雛形✅
-
AIプロンプト例🤖:
- 「この失敗はユーザー入力?システム障害?分類して理由も」
Part 4:永続化/変換/ACL/テスト/総合演習(18〜24章)🚀🧪
第18章:永続化とドメインは別物(分離の考え方)💾🧼
-
ねらい:DB都合でモデルが歪むのを防ぐ🙂
-
学ぶこと:SoC(関心の分離)・依存の向きの感覚🧠
-
やること:DBっぽい形(Record)とドメイン型の違いを整理📋
-
成果物:ドメインはドメインの形でOK、という設計方針メモ📝
-
AIプロンプト例🤖:
- 「このDB設計から“ドメインに持ち込みたくない要素”を指摘して」
第19章:Repositoryの入口(interfaceで守る:DIP入門)🧩🧱
-
ねらい:ドメインがDBに依存しない形を作る✨
-
学ぶこと:Repositoryは“約束(抽象)”、実装は外側へ🔁
-
やること:Repositoryのメソッド設計(save/find)を決める📝
-
成果物:Repository interface案✅
-
AIプロンプト例🤖:
- 「このRepository、やりすぎ?責務が重い?改善案も」
第20章:Mapper(変換)入門:Domain ↔ Persistence🔁💾
-
ねらい:変換は“地味だけど超重要”を体験🙂
-
学ぶこと:DTO/Recordとドメインの変換責務を固定する🧩
-
やること:toRecord/fromRecord を作ってテスト🧪
-
成果物:Mapper+変換テスト✅
-
AIプロンプト例🤖:
- 「変換で起きやすいバグ(null/単位/丸め)を列挙して」
第21章:ACL(外部APIの歪みを入れない翻訳層)🌉🧼
-
ねらい:外部都合を“中に入れない”防波堤を作る🙂
-
学ぶこと:外部DTOの命名/単位/欠損値を吸収する考え方🧯
-
やること:外部レスポンス→ドメイン型へ翻訳するAdapterを作る🧩
-
成果物:ACL(翻訳)クラスの雛形✅
-
AIプロンプト例🤖:
- 「この外部データの“危険ポイント”を指摘して、吸収方法を提案して」
第22章:テスト戦略(VO・Entity・境界・変換)🧪🍰
-
ねらい:1人開発でも壊れない“守り”を作る🙂
-
学ぶこと:VOは単体テストが最強/Entityはルールテスト中心✅
-
やること:テストの粒度を4段に分けて整える📋
-
成果物:テスト方針+最低限のテストセット✅
-
AIプロンプト例🤖:
- 「この機能のテスト、足りない観点をチェックして追加案を出して」
第23章:リファクタ演習(Entity→VO化でバグを減らす)🔧✨
-
ねらい:既存コードを“安全に改善する手順”を身につける🙂
-
学ぶこと:小さく直す/テストを盾にする/責務を戻す🛡️
-
やること:住所/金額/期間などをVOに分離して置き換える🔁
-
成果物:VO化されたコード+回帰テスト✅
-
AIプロンプト例🤖:
- 「このコードをVO化する手順を“3ステップ”で提案して。リスクも」
第24章:総合ミニプロジェクト(統合)+実務チェックリスト🎒🏁✅
-
ねらい:設計→境界→永続化→テストまで“1本”でつなぐ🚀
-
学ぶこと:依存の向き/境界で守る/変更に強い構造の手触り🙂
-
やること:仕様変更1個を入れて、影響範囲が小さいことを確認🔁
-
成果物:完成ミニプロジェクト+判断チートシート最終版📄✨
-
AIプロンプト例🤖:
- 「仕様変更が来た。どこを直す?影響範囲と理由を説明して」
おまけ:この24章で“最終的にできるようになること”🌟😊
- Entity/VOの判定が理由つきで言える🗣️✨
- VOで不変条件を守って、バグを型と設計で減らせる🛡️
- Entityの更新が安全な入口に集まる🚪
- DTO/DB/外部APIの都合がドメインを汚さない🧼
- テストがあるから、安心してリファクタできる🧪💪