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

第03章:題材ドメイン決め(小さく!)🧺✅

この章のゴール🎯✨

この章が終わったら、次の3つができるようになります😊

  • 学習用の「題材(ドメイン)」を小さく固定できる🧸
  • 要件を5つだけに絞れる✋
  • 要件を「Command候補」に言い換えられる📮✨

まず「イベントソーシング向きの題材」って?🧠🔎

イベントソーシングは、状態を上書き保存する代わりに、起きた出来事(イベント)を追記(append-only)で積み上げていく考え方です📚✨ そして「いまの状態」は、イベントの列を順番に適用して復元します🔁 この “イベントを積む” という前提があるので、題材は「出来事が自然に出てくるもの」が相性バツグンです😊 (Microsoft Learn)


良い題材の条件 5つ✅😊

題材を選ぶときは、ここだけ見ればOKです👇✨

  1. イベントが自然に出る(追加した/消した/支払った など)📝
  2. 境界が小さい(まずは “1つの対象” に集中)🧩
  3. 不変条件(絶対守るルール)が少しある(0じゃないのが大事)🛡️
  4. 操作が10個以下に収まりそう(増える題材は危険⚠️)
  5. 画面や外部連携を考えなくても成立(最初は “中身” だけ)🏠

おすすめ題材 3選🌟(どれでもOKだよ😊)

なぜショッピングカートなの?

1) 買い物カート🛒✨(いちばん王道)

イベントがとにかく作りやすいです🎉 Azureのイベントソーシング例でも「AddedItemToOrder」「OrderCanceled」みたいな“出来事”が典型として出てきます🧾 (Microsoft Learn)

  • ありがちな Command(やりたいこと)📮

    • 商品を追加する/数量を変える/商品を削除する/確定する
  • ありがちな Event(起きたこと)📜

    • 商品が追加された/数量が変更された/商品が削除された/注文が確定した
  • ありがちな不変条件🛡️

    • 数量は1以上
    • 確定後は変更できない

2) ToDo(タスク管理)🗒️🌸(やさしめ)

シンプルで、失敗しにくいです😊

  • Command📮:タスク追加/完了/取り消し/期限変更
  • Event📜:タスクが追加された/完了した/完了が取り消された/期限が変更された
  • 不変条件🛡️:完了済みをもう一回完了にしない、など

3) 家計簿(入出金)💰📒(イベント感が強い!)

“履歴が大事” な題材なので、イベントソーシングの良さが見えやすいです✨

  • Command📮:入金する/出金する/メモを付ける
  • Event📜:入金された/出金された/メモが付いた
  • 不変条件🛡️:残高がマイナスにならない(など)

避けたい題材🙅‍♀️⚠️(迷子になりやすい)

次のタイプは、学習の最初にやると “広すぎて” ほぼ確実につらいです😵‍💫

  • ユーザー管理(ログイン、権限、メール確認…)👤
  • SNS/チャット(通知、既読、検索、ブロック…)💬
  • 在庫・配送・請求が全部あるEC全体📦🚚💳
  • マルチテナント/組織/承認フローがある業務システム🏢

ミニ演習:要件を「5つだけ」決めよう🖐️✨

ここが超大事ポイントです😊(増やしたくなるけど我慢…!)

手順🥰

  1. 題材を1つ選ぶ(迷ったら「買い物カート🛒」)
  2. 主人公(操作する人)を1人にする(例:ユーザー本人だけ)👩‍🎓
  3. 画面・DB・APIの話は一旦しない(やるのは “中身”)🧠
  4. 要件を 5つだけ 書く(6個目は禁止🙅‍♀️)
  5. その5つを Command候補 に言い換える📮

書き方テンプレ(このまま使ってOK)📝

  • 題材:______

  • 主人公:______(例:1人のユーザー)

  • 要件(5つだけ)

    1. ______
    2. ______
    3. ______
    4. ______
    5. ______

例:買い物カートで「要件5つ」🛒🖐️

要件はこんな感じが “ちょうどいいサイズ” です😊✨

  1. 商品をカートに追加できる
  2. 商品の数量を変更できる
  3. 商品をカートから削除できる
  4. カートを確定(注文確定)できる
  5. 確定後は変更できない

この5つだけで、イベントソーシングのコア(履歴・復元・不変条件)が全部練習できます🎯✨


要件 → Command候補に変換するコツ📮😊

変換のコツはこれだけ👇✨

  • Commandは「〜したい」=命令形(Add / Change / Remove / Confirm)📮
  • Eventは「〜した」=過去形(Added / Changed / Removed / Confirmed)📜
  • “データの形” じゃなくて “出来事” を言う(例:「カート行が更新された」より「商品が追加された」)🌸
  • 不変条件は Command側でチェック(ルール違反なら止める)🛡️

AI活用(コピペOK)🤖✨

ここは GitHub の Copilot や OpenAI 系のAI拡張に、そのまま貼って使える形です😊💕

① 要件 → Command/Event案を作らせるプロンプト📌

あなたはイベントソーシングの講師です。
次の「題材」と「要件(最大5つ)」から、学習用の Command 候補と Event 候補を作ってください。

制約:
- Command は命令形(例: AddItem, ChangeQuantity)
- Event は過去形で、起きた事実(例: ItemAdded, QuantityChanged)
- まずは 1つの集約(1ストリーム)に収める
- 不変条件(守るべきルール)も 2〜3個だけ提案する
- “粒度が大きすぎる/細かすぎる” ものがあれば理由つきで修正案を出す

題材: (ここに題材)
要件:
1) ...
2) ...
3) ...
4) ...
5) ...

② 「広すぎチェック」をさせるプロンプト🔍⚠️

この題材と要件は、イベントソーシング学習の最初の題材として大きすぎませんか?
大きい場合は「何を削ると最小になるか」を具体的に提案してください。
判断基準: 1集約に収まるか / Commandが10個以内か / 不変条件が複雑すぎないか
(題材と要件をここに貼る)

章末チェック✅😊(これができたら合格!)

  • 題材は1つに決まった🧺
  • 主人公は1人に絞った👩‍🎓
  • 要件は5つだけ(増やしてない!)🖐️
  • 要件を Command候補に言い換えた📮
  • Event名は過去形の “出来事” になってる📜✨

ちょい豆知識🪟✨(2026の開発まわり)

この教材は .NET 10(LTS)前提で進めやすい状況になっています(LTSで、サポートも長め)📌 (Microsoft) また Visual Studio 2026 + .NET 10 では、デバッグ起動(F5)など体験面の改善も案内されています🚀 (Microsoft Learn)