CQS(コマンド・クエリ分離)教材アウトライン(全15章)🌸💻✨
(TypeScript 2026/Windows+VS Code/AI導入済み前提🤖)
第1章:CQSってなに?超ざっくりつかむよ〜🧸✨
- Command / Query の言葉の意味
- 「混ぜると事故る」直感を作る💥
- 今日のゴール:CQSの一文ルールを覚える📝
第2章:混ぜ混ぜ関数が起こす“あるある事故”集😇→😱
- 1つの関数で「保存・取得・表示用整形」までやる例
- 副作用が読めない/デバッグがしんどい
- “何が起きた?”を説明できない状態を体験🎮
第3章:CQSの基本ルール(初心者版)✅✨
- Command:状態を変える(副作用あり)🔧
- Query:状態を読む(副作用なし)📖
- 例外:どうしても迷うケースの判断(軽く)🧠
第4章:TypeScriptでCQSを書く時の型(戻り値の決め方)🧩
- Queryは
Tを返す /Promise<T>を返す - Commandは
void/Promise<void>が基本 - 「Commandは何を返してもいい?」の答え(最小限だけOK)🎁
第5章:題材スタート(ToDoミニアプリ)をベタに作る📝💖
- 追加・完了・一覧の機能を“まず混ぜて”作る
- あえて混ぜて、後で良さを感じる作戦😎
- VS Codeで動かす準備(最低限)🪟
第6章:分類ゲーム!これはCommand?Query?🎯✨
- 例題で仕分け(10〜15問くらいのイメージ)
- “更新っぽいけど参照っぽい”の罠(カウンタ・ログ等)🧨
- 自分で判断できるミニ基準を作る🧠
第7章:リファクタ① まず関数を分ける(CQSの第一歩)✂️✨
addTodo()/completeTodo()(Command)getTodos()(Query)- 名前付けルール:動詞で迷わないコツ📛
第8章:リファクタ② “境界”を作る(UIとロジックを分ける)🚪🧱
- UI(入力/表示)とロジック(判断)を混ぜない
- 「ロジックは純度高め」がテストと相性抜群🧪
- どこまで分ければOK?やりすぎ防止🧯
第9章:Query設計:副作用ゼロにするコツ🍃✨
- Query内でやらない:保存・更新・外部送信🙅♀️
- “隠れ副作用”チェック(Date/乱数/グローバル)👀
- どうしてもログが必要な時の置き場所📍
第10章:Command設計:返していいもの/ダメなもの🎁⚠️
- 返してOK:ID、成否、最小の情報
- 返しすぎ注意:「更新後の一覧を返す」問題🐘
- 基本パターン:Command → Queryで再取得🔁
第11章:非同期のCQS(Promise版の基本だけ)🌐⏳
Promise<void>とPromise<T>の分け方fetchを使った超シンプル例(1個に絞る)🎯- “非同期でもルールは同じ”を体感する✨
第12章:発展おまけ:キャッシュしやすいQuery🍯
- Queryが安定するとキャッシュが楽になる話
- 「キャッシュしていい条件」ざっくり理解
- 仕組みは深入りしない(発想だけ)🧠💡
第13章:テスト① Queryはテストが超簡単🧪🥳
- Queryのテスト=入力→出力を比べるだけ
- サンプル:
getTodos()の並び替えやフィルタ - AIでテスト雛形を作るミニコーナー🤖✍️
第14章:テスト② Commandは“副作用”を分離してテストする🧩🧪
- Commandのテストが難しい理由(副作用)
- 依存を外から渡す(DIの超入門だけ)📦
- AIでモック案を出させるミニコーナー🤖🪄
第15章:総まとめ:よくある失敗・実務の落とし所・次の一歩🚀💖
-
失敗トップ3
- Queryが更新してる😱
- Commandが返しすぎ🎁💥
- 分けたのに命名が微妙で読めない📛
-
CQSとCQRSは別物(やりすぎ注意)⚖️
-
次に学ぶと強い:SoC / DI / テスタブル / エラーモデリング📚✨
追加:AI(Copilot/Codex)を“教材に自然に混ぜる”運用案🤖💡
各章の最後に小さく入れるのがおすすめです☺️
- 「この章のコードをCQSに直して」
- 「Command/Queryを分類して理由つけて」
- 「このQueryに副作用がないかチェックして」
- 「テストケースを3つ提案して」