イベントソーシング(Event Sourcing):36章アウトライン(詳細)📘😊
- 最低限の テスト・競合・永続化・運用観測 まで触れて「実戦の入口」へ🚪✨
全体の狙い(この36章でできるようになること)🎯✨
- イベントの設計(過去形・粒度・不変条件)を“怖くなく”できる😊
- **イベント列から状態を復元(Rehydrate)**できる🔁
- Command → Event の流れを型として書ける📮✅
- **読みやすい画面用データ(Projection)**を作れる🔎
Part 0:準備と導入(1〜6章)🧰🌱
1章:このコースのゴールと進め方🎒✨
- ねらい:イベントソーシングの全体像を“安心して”掴む😊
- 内容:状態保存との違い/学びの順番/よくある挫折ポイント
- ミニ演習:身近な例(家計簿・カート等)を「出来事」で書き出す📝
- AI活用:例え話を3パターン作ってもらう🤖💭
2章:イベントソーシングって何?(超入門)🌸🧠
- ねらい:「状態」じゃなく「出来事」を積む感覚をつかむ
- 内容:状態=スナップ、イベント=履歴/“なぜ嬉しいか”
- ミニ演習:残高(状態)vs 入出金(イベント)を比べる💰
- AI活用:あなた向けの“やさしい説明”に言い換えさせる🤖✨
3章:題材ドメイン決め(小さく!)🧺✅
- ねらい:学習用の題材を固定して迷子防止🧭
- 内容:おすすめ題材(カート/ToDo/家計簿)と選び方
- ミニ演習:要件を5つだけ決める(増やさない!)🖐️
- AI活用:要件を「Command候補」に変換させる🤖📮
4章:環境セットアップ(VS 2026)🪟🛠️
- ねらい:最短で動く土台を作る🚀
- 内容:Visual Studio 2026+.NET 10 SDK、テストプロジェクト追加(Microsoft Learn)
- ミニ演習:テンプレから起動確認(Hello + テスト1本)✅
- AI活用:プロジェクト構成案を出してもらう🤖🧩
- VS Code分岐:後でOK(付録扱い)📝(Visual Studio Code)
5章:GitHubとAI拡張の“使い方の型”🤖🧠✨
-
ねらい:AIに丸投げじゃなく「上手に使う」
-
内容:
- ①下書き生成 → ②レビュー → ③テスト追加 → ④手直し
-
ミニ演習:AIに「レビュー観点チェックリスト」を作らせる✅
-
AI活用:プロンプト雛形(目的/制約/入出力/例)を固定📌
6章:まずCRUDを作って“限界”を見る😺🧱
-
ねらい:イベントソーシングが欲しくなる理由を体験
-
内容:履歴・監査・巻き戻しが弱い/変更に弱い
-
ミニ演習:
- 「過去の状態を見たい」要求を追加して苦しむ😵💫
-
AI活用:将来要求を10個出させて“壊れ方”を想像🔮
Part 1:言葉と設計の芯(7〜12章)📚🌟
7章:用語セット(Command / Event / State / Projection)📮📜🧠🔎
- ねらい:会話ができる最小語彙を揃える
- 内容:それぞれの役割/混ぜたときの事故例
- ミニ演習:題材の要件を4分類する🗂️
- AI活用:分類の理由まで説明させる🤖✨
8章:イベント命名(過去形)と“粒度”の感覚⏳✅
- ねらい:良いイベント名を付けられるようにする
- 内容:過去形/「でかすぎ・細かすぎ」問題
- ミニ演習:命名候補を10個出し、3つに絞る🎯
- AI活用:ダメ例も作らせて違いを学ぶ🙅♀️🤖
9章:不変条件(Invariants)超入門🧷🛡️
- ねらい:“絶対守るルール”を入口で守る
- 内容:不変条件を散らさない/無効状態を作らない
- ミニ演習:不変条件を3つ決め、自然言語で書く📝
- AI活用:不変条件→テスト観点へ変換させる🧪🤖
10章:Aggregate(集約)と境界の決め方🐣🧩
- ねらい:「イベントのまとまり」を決める
- 内容:1集約=1ストリームの感覚/境界がブレると地獄
- ミニ演習:境界案を2つ作って比較⚖️
- AI活用:境界ごとのメリデメを箇条書き化🤖📌
11章:状態遷移を“手書き”してみる✍️🔁
- ねらい:イベントが状態をどう変えるかを可視化
- 内容:状態(簡易)+イベントでどう変化?
- ミニ演習:遷移を表にする(紙でもOK)🗒️
- AI活用:抜け漏れイベントを指摘させる🤖👀
12章:イベントの中身(Payload)とメタデータ🍱🏷️
- ねらい:イベントに入れる情報を整理
- 内容:事実(payload)/発生日時・ID等(metadata)
- ミニ演習:イベントごとにpayloadを決める🧾
- AI活用:“入れすぎ”チェックをしてもらう🩺🤖
Part 2:最小実装で理解する(13〜20章)🧪🚀
13章:最小EventStore(インメモリ)を作る①:読み書きだけ📦✅
- ねらい:仕組みを体で理解
- 内容:Append / ReadStream(保存はListでOK)
- ミニ演習:Append→Readで戻るのを確認🔁
- AI活用:最小実装の叩き台を出させる🤖🧱
14章:最小EventStore②:ストリームIDと順番(version)📼🔢
- ねらい:イベントは順番が命!
- 内容:streamId/version(通し番号)
- ミニ演習:2つの集約を別ストリームで積む🧺🧺
- AI活用:図解(テキスト図)を作らせる🧠🤖
15章:復元(Rehydrate)入門:Applyで状態を作る🔁🧠
- ねらい:イベント列→現在状態 を作れるようにする
- 内容:
Applyの考え方/Apply漏れの危険 - ミニ演習:イベント3つで状態を再現する🎬
- AI活用:Apply漏れチェック観点を出させる🤖✅
16章:Command処理の“型”①(Load → Decide → Append)📮✅
-
ねらい:設計の形を固定して迷わない
-
内容:
- Load(過去イベント読む)
- Decide(不変条件チェック→新イベント生成)
- Append(保存)
-
ミニ演習:コマンド1個だけ通す🚶♀️
-
AI活用:テンプレ生成(雛形固定)🧰🤖
17章:Command処理の“型”②(不変条件で弾く)🛡️🚧
- ねらい:ルール違反を正しく止める
- 内容:ドメインエラーの扱い(例外にしない準備)
- ミニ演習:NGケースを1つ作って弾く🙅♀️
- AI活用:エラーメッセージ案を作らせる🗣️🤖
18章:ユースケース実装①(作成系)🆕✨
- ねらい:1つ“動く成功体験”を作る
- 内容:Created系イベント、初期状態の作り方
- ミニ演習:Createコマンド→Createdイベント→復元✅
- AI活用:イベント名とpayloadレビューをさせる🤖🔎
19章:ユースケース実装②(更新系)🔧✨
- ねらい:よくある更新をイベント化
- 内容:追加・削除・数量変更など
- ミニ演習:更新コマンド2つ追加📌
- AI活用:更新イベントの粒度診断🤖⚖️
20章:テストの型①(Given-When-Then)🧪🌸
- ねらい:イベントソーシングのテストが怖くなくなる
- 内容:Given(過去)When(コマンド)Then(新イベント)
- ミニ演習:テスト2本(成功/失敗)✅✅
- AI活用:テスト生成→あなたが読みやすく整える🤖✍️
Part 3:現実っぽい課題(21〜27章)🧨📸🔎
21章:エラーモデリング超入門(Result型っぽい考え)🚦😊
- ねらい:例外を暴れさせない
- 内容:ドメインエラー vs インフラエラーの分離
- ミニ演習:エラー種別を3つ決める🗂️
- AI活用:分類と責任範囲をレビューさせる🤖👀
22章:競合って何?(同時更新を体験)⚔️😵
- ねらい:楽観ロックの必要性を体感
- 内容:同時に更新すると壊れる例
- ミニ演習:疑似的に2回更新して競合を起こす💥
- AI活用:競合シナリオ案を出させる🤖🧪
23章:楽観ロック(expectedVersion)で守る🔒✅
- ねらい:壊れない保存ができる
- 内容:expectedVersionチェック→違ったら失敗
- ミニ演習:競合時に保存が止まるのを確認🛑
- AI活用:失敗時のメッセージや復旧案を提案させる🤖💡
24章:競合したとき、どうする?(方針だけ)🧯🧠
- ねらい:実務の判断を知る
- 内容:リトライ/ユーザーに再入力促す/マージ(難)
- ミニ演習:方針を1つ選んで実装する(最小)✅
- AI活用:方針ごとのメリデメ表を作る🤖📋
25章:スナップショット概念(なぜ必要?)📸⚡
- ねらい:イベントが増えたときの対策を知る
- 内容:復元コスト/どのタイミングで取る?
- ミニ演習:イベント100件相当を想定して“遅さ”を想像😵💫
- AI活用:簡易ルール案(n件ごと/時間ごと)を出させる🤖📈
26章:スナップショット実装(最小)📸🧪
- ねらい:スナップショットで復元を短くする
- 内容:最新スナップ+残りイベント適用
- ミニ演習:スナップ有/無で復元ステップ差を確認🔁
- AI活用:実装漏れ(保存/読み出し)のレビュー🤖🔍
27章:性能の超入門(計測のしかた)⏱️🔧
- ねらい:“遅い”を雰囲気で言わない
- 内容:簡易計測/どこが重い?(復元/保存/投影)
- ミニ演習:復元回数を増やして時間差を見る⌛
- AI活用:ボトルネック候補の推理をさせる🤖🕵️♀️
Part 4:Projection(読みモデル)を作る(28〜32章)🔎📚
28章:Projectionって何?(読みやすい形を別で作る)🔎✨
- ねらい:画面・検索・一覧をラクにする
- 内容:書き込みモデルは厳密、読みモデルは表示最適
- ミニ演習:画面に必要な項目を列挙🖥️
- AI活用:画面要件→必要Projection案を出させる🤖🧾
29章:Projection実装①(同期で更新)⚡🧱
- ねらい:最小の読みモデルを作る
- 内容:イベントを受けたらProjectionも更新
- ミニ演習:一覧表示用Projectionを1つ作る📋
- AI活用:Projectionの更新漏れチェック🤖✅
30章:Query API(読むためのAPI/画面)を作る📮👀
- ねらい:読み側の使い方を確立
- 内容:読み取り専用のエンドポイント/整形
- ミニ演習:一覧取得と詳細取得を作る🔎
- AI活用:DTO設計のレビュー(入れすぎ注意)🤖🍱
31章:Projection実装②(非同期更新の入口)📬⏳
- ねらい:最終的整合性の“肌感覚”を知る
- 内容:バックグラウンド更新/遅延の見せ方
- ミニ演習:疑似キューで遅延更新してみる⌛
- AI活用:ユーザー体験の注意点を出させる🤖💬
32章:Projection再構築(リプレイ)🔁🧹
- ねらい:読みモデルは壊れても作り直せる!
- 内容:イベントを最初から流して再生成
- ミニ演習:Projectionを消して再構築✅
- AI活用:再構築手順のチェックリスト作成🤖📋
Part 5:永続化・進化・運用(33〜36章)🗄️🧬📊🎓
33章:イベント永続化(まずはSQLiteでOK)🗄️✨
- ねらい:インメモリ卒業(でも簡単に)
- 内容:Eventsテーブル設計(streamId, version, type, data, meta)
- ミニ演習:Append/ReadをSQLiteに差し替え✅
- AI活用:SQL/スキーマのレビュー&生成🤖🧰
34章:シリアライズ(JSON)と互換性の第一歩🧾🧊
- ねらい:保存形式を安定させる
- 内容:イベントtype名/dataの形/メタ情報
- ミニ演習:イベントを保存→読み戻し→復元を確認🔁
- AI活用:破壊的変更になりそうな点を指摘させる🤖🚨
35章:イベントの進化(バージョニング)+冪等性(最小)🧬🧷
-
ねらい:現実の「変更」と「リトライ」に耐える
-
内容:
- イベントは基本“変えない”、増やす/新イベント/変換の考え
- 二重実行対策(Idempotency Key、重複排除)
-
ミニ演習:
- “項目追加”の変更をやってみる(壊さずに)✅
- 同じコマンドを2回投げても壊れないようにする🔁
-
AI活用:変更案の安全度チェック🤖🧯
36章:卒業制作(ミニプロダクト完成)🎓🎉
-
ねらい:小さくても「筋が通った設計」を完成させる
-
必須要件(最低ライン)✅
- イベント保存(永続化)
- 復元(Rehydrate)
- Projection 1つ
- Given-When-Then テスト数本
- 競合・冪等性どちらか1つ
-
追加チャレンジ⭐
- タイムトラベル🕰️/Projection再構築ボタン🔁/簡易メトリクス📊
-
AI活用:README、設計メモ、レビュー、改善案まで一緒に仕上げる🤖📚
章のボリューム感(目安)⌛😊
- 1章あたり:講義10〜15分+演習20〜40分くらいを想定🌸
- “重いテーマ”は必ず 概念→最小実装→発展 に分割済みだよ✂️✨