CQS(コマンド・クエリ分離)教育コンテンツ:15章アウトライン😊✨
第1章:CQSってなに?まずは超ざっくり掴もう🧠🌱
- CQSの一言:**「変更するなら返さない/返すなら変更しない」**📌
- 何が嬉しい?(バグ減る・読みやすい・テストしやすい)✨
- 今日からのゴール:まず「混ぜない」を意識する😊
第2章:準備(Windows+Visual Studio)とミニプロジェクト作成🪟🛠️
-
Visual StudioでConsole/Minimal APIどっちでやる?(教材は両対応)🎮🌐
-
テストプロジェクトも一緒に作る(後で超ラク)🧪
-
AI拡張(Copilot/Codex)を“教材用に安全設定”する🤖🧷
- 命名提案OK、設計判断は人が確認、などルール作り
第3章:CommandとQueryの見分け方(判断の軸)🎯🧩
- Command:状態変更(Create/Update/Delete)🔧
- Query:参照(Get/List/Search)🔍
- 「曖昧な例」も練習:ログ、キャッシュ、時刻取得など🌀
- 覚え方:“データが変わった?”で判断👀
第4章:アンチパターンを体験しよう(混ぜると何が起きる?)😇💥
- “Queryっぽいのに内部で更新”の怖さ👻
- “Commandなのに値を返しまくり”のモヤモヤ📦
- デバッグで「副作用の追跡が地獄」体験🪦
- ここでCQSの価値が腹落ちする✨
第5章:戻り値の基本ルール(Commandは何を返す?)📦✅
-
Commandは基本
void/Task(+失敗は別で扱う) -
例外:IDだけ返したい/作成結果を知りたい🪪
-
落とし所パターン:
- ID返却パターン
- Result返却パターン(成功/失敗)🎁
-
“返しすぎ”を避けるコツ🧠
第6章:副作用の整理(見えない変更を見える化)👻⚠️
-
副作用の種類:DB・外部API・ファイル・メール・イベント📨
-
Query側に副作用が混ざる典型例(キャッシュ更新等)🧊
-
設計超入門の落とし所:
- Queryは原則ピュア寄り
- どうしても必要なら“例外として明示”📝
第7章:まずは小さい題材でCQS(ToDoで分ける)📝🍰
- Query:一覧/詳細/検索🔍
- Command:追加/完了/削除✅🗑️
- 命名のコツ(動詞・目的語・対象)✍️
- “分けるだけで読みやすい”を体験する😊✨
第8章:最小の設計型(Commands/Queriesクラスで分離)🏗️🧱
TodoCommandsとTodoQueriesの作り方- 依存(Repositoryなど)を外から渡す(DIの入口)🔌
- 「newしない」のメリットを軽く体験✨
- 初学者向け:まずはコンストラクタ注入だけでOK👌
第9章:CQSとエラー設計①(失敗の種類を分ける)😵💫🧠
- 予測できる失敗(バリデーション等)📋
- 予期しない障害(DB落ち等)💥
- 「どこまでが仕様で、どこからが障害?」境界の考え方🚧
- 初学者向けの基準を固定する📌
第10章:CQSとエラー設計②(例外/Resultの使い分け)🎁🧯
- Queryの失敗:null?例外?Result?🤔
- Commandの失敗:Resultで返すと何が嬉しい?✨
- “ユーザー向けエラー”と“ログ向け詳細”の分離🪞📝
- 実装の型:
Result<T>/Resultみたいな考え方(入門)📦
第11章:CQSとテスト①(Queryはラク勝ち🧪🏆)
- Queryは入力→出力のテストが書きやすい😍
- テスト観点:境界値、空、並び順、フィルタなど🔍
- Visual Studioのテスト実行・デバッグの基本🛠️
- AIでテストケース案を出す方法🤖📝
第12章:CQSとテスト②(Commandの副作用を確かめる🎭🧪)
- Commandは“何が変わったか”を確認する✅
- スタブ/モック超入門(難しい言葉は最小限)🎭
- 外部I/O(DB/HTTP)を差し替えてテストする感覚🔌
- AIにモック案を出させる時の注意⚠️
第13章:実務っぽい形へ①(Command/Queryオブジェクト化)📦🚚
CreateTodoCommand/GetTodosQueryみたいなDTO風の形- “引数が増えると辛い”問題を解決する✨
- バリデーションを置く場所の考え方📍
- 命名とフォルダ構成の例🗂️
第14章:実務っぽい形へ②(Handler化で責務を固定)👩🍳📨
Handlerの役割(1機能=1ハンドラ)🎯- Controller/Endpointは薄く、Handlerに寄せる🧼
- 規模が大きくなっても崩れにくい理由🧱
- “依存の向き”を軽く意識(設計の入口)🧭
第15章:AI活用+総合演習(卒業制作🎓🎉)
-
演習:注文ミニ版(Order)💳📦
- Query:注文一覧/詳細
- Command:作成/支払い/キャンセル
-
AI活用:
- 雛形生成の指示テンプレ🤖
- “事故らない”レビュー質問テンプレ🧷
-
最終チェックリスト✅
- Queryが状態変更してない?
- Commandが値を返しすぎてない?
- 失敗の扱いが統一されてる?
- テストが書きやすい形?🧪✨
-
次に進む道:CQRSはいつ?(触るだけ)👣📚
必要なら、この15章アウトラインをさらに授業っぽくして、各章に👇を付けた「完全シラバス」にできます😊✨
- 学習ゴール🎯/やることリスト🧾/ミニ演習🧩/AIへの指示例🤖/よくある詰まりポイント🧱
次は「Console版で進める」か「Minimal API版で進める」か、どっち寄りでシラバス化します?😊