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

イベントソーシング(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分くらいを想定🌸
  • “重いテーマ”は必ず 概念→最小実装→発展 に分割済みだよ✂️✨