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

状態機械(State Machine)設計:30章詳細アウトライン

前提の開発環境(2026最新版・Windows)🪟✨

  • Visual Studio 2026 + .NET 10 SDK + C# 14(想定)(Microsoft Learn)
  • (補助)VS Code もOK(ただし基本はVisual Studioで進行)🛠️
  • AI:GitHub Copilot / OpenAI Codex 等が使える前提🤖✨(毎章「AIの使いどころ」あり)

題材(全章で共通)🍙📱

  • 「学食モバイル注文」 状態例:Draft(下書き)→ Submitted(注文)→ Paid(支払い)→ Cooking(調理中)→ Ready(受け取り可)→ PickedUp(受取済)/ Cancelled(キャンセル)/ Refunded(返金済)など✨

第1部:まず“状態機械の考え方”に慣れる(1〜4章)🌱😊

1章:この講座でできるようになること🎓✨

  • ねらい:状態機械を「図・表・コード」で説明できるようにする
  • 学ぶ:状態/イベント/遷移の超基本、学習の進め方
  • 演習:題材の全体フローを一言で説明してみる🗣️
  • AI活用:Copilotに「状態機械って何?」を“自分の言葉”で要約させる🤖📝

2章:開発環境セットアップ(Windows)🪟🛠️

  • ねらい:迷わず動かせる土台を作る
  • 学ぶ:Visual StudioでConsole/Library/Testの作り方、最低限のプロジェクト構成
  • 演習:Consoleアプリで「状態を表示するだけ」を動かす✅
  • AI活用:プロジェクト作成手順を箇条書きにしてもらう(手順書化)📋✨

3章:if文地獄を“わざと”体験😵‍💫🔥

  • ねらい:状態機械が必要になる理由を体感する
  • 学ぶ:フラグ乱立・条件漏れ・追加が怖い、の典型パターン
  • 演習:注文フローをif/elseで書いて、破綻点を3つ探す🔎
  • AI活用:AIに「どこがバグりやすい?」をレビューさせる🕵️‍♀️🤖

4章:用語の超入門(状態・イベント・遷移)📘✨

  • ねらい:用語が怖くなくなる
  • 学ぶ:State / Event / Transition、初学者が混乱しがちなポイント
  • 演習:例を見て「これは状態?イベント?」クイズ🎯
  • AI活用:AIに“例を10個”作らせて分類練習🧠✨

第2部:仕様を“表と図”で固める(5〜10章)🗺️📊

5章:要求から「状態」を抜き出すコツ🏷️😊

  • ねらい:状態名がブレないようにする
  • 学ぶ:画面ではなく“業務の段階”で状態を切る考え方
  • 演習:学食注文の状態候補を洗い出す(7〜10個)📝
  • AI活用:AIに「状態名の候補」と「説明1行」を作らせる🤖✨

6章:要求から「イベント」を抜き出すコツ📣✨

  • ねらい:イベントが“操作”として自然になる
  • 学ぶ:イベント=やりたい操作/起きた事実、命名のコツ
  • 演習:状態を動かすイベントを列挙(支払い、受取など)💳📦
  • AI活用:AIに「イベントに必要な入力(引数)」候補を出させる🧾🤖

7章:遷移表を作る(最重要)📊✨

  • ねらい:網羅性を手に入れる(抜け漏れ防止)
  • 学ぶ:現在状態×イベント→次状態、できる/できないを明確化✅❌
  • 演習:遷移表の“空欄”を埋めていくゲーム🎮
  • AI活用:AIに「遷移表の矛盾チェック」をさせる🔍🤖

8章:状態遷移図を描く(理解が爆速)🗺️✨

  • ねらい:人に説明できる形にする
  • 学ぶ:図の読み書き、粒度の調整、見やすくするコツ
  • 演習:遷移表→図へ変換(ラフでOK)✏️😊
  • AI活用:AIに「図の説明文章」を作らせてREADMEにする📝✨

9章:「禁止の遷移」を仕様として書く🚫🧾

  • ねらい:バグと仕様を分ける
  • 学ぶ:禁止の理由(業務ルール)/ユーザーへの伝え方
  • 演習:禁止遷移ベスト10を決めて理由を書く🔟
  • AI活用:AIに「ユーザー向けメッセージ案」を複数出させる💬🤖

10章:ガード条件(条件つき遷移)🛡️✨

  • ねらい:「同じイベントでも条件で分かれる」を扱える
  • 学ぶ:Guardの置き方(状態の中?遷移の中?)
  • 演習:例:Cancelは“調理開始前のみOK”など条件を追加🍳
  • AI活用:AIに「条件のテストケース」を自動列挙させる🧪🤖

第3部:副作用を整理して“設計っぽく”する(11〜14章)🧹✨

11章:アクション(Entry/Exit/Transition)入門🎬😊

  • ねらい:状態が変わる時に“何をするか”を整理する
  • 学ぶ:Entry/Exit/Transitionの違い、よくある置き場
  • 演習:「Paidになったらレシート発行」などをどこでやるか判断🧾
  • AI活用:AIに「アクション候補」を洗い出させる🤖✨

12章:副作用の分離(ロジック vs I/O)🚪📤

  • ねらい:テストしやすく、事故りにくくする
  • 学ぶ:「遷移の判断」は純粋に/通知・DB・外部APIは外へ
  • 演習:アクションを「純粋」「I/O」に仕分けする🧺
  • AI活用:AIに「副作用が混ざってる匂い」を指摘させる👃🤖

13章:不変条件(Invariants)を決める🔒✨

  • ねらい:“壊れない状態”を入口で守る
  • 学ぶ:例:Paidなら支払日時が必須、などのルール
  • 演習:状態ごとの必須項目チェック表を作る🧾
  • AI活用:AIに「不変条件の候補」と「破ると困る理由」を出させる🤖

14章:状態機械を“仕様書”として整える📘✨

  • ねらい:図・表・文章が一致する状態にする
  • 学ぶ:仕様の粒度、用語統一、例外ケースの書き方
  • 演習:READMEに「状態一覧」「イベント一覧」「禁止ルール」をまとめる📝
  • AI活用:AIに「仕様の言い回しをやさしく」整形してもらう👩‍🎓💖

第4部:まずは動かす(実装v1)→賢くする(15〜18章)🔧🚀

15章:実装v1(enum + switchで最小実装)🧱✨

  • ねらい:最短で“動く状態機械”を作る
  • 学ぶ:状態をenumで持つ、イベント処理をswitchで書く
  • 演習:Submit/Pay/Cancelだけ先に動かす✅
  • AI活用:Copilotに「switchの雛形」を作ってもらう🤖🛠️

16章:switch実装の限界を知る(痛みの観察)👀💥

  • ねらい:なぜ設計が必要か腹落ちする
  • 学ぶ:分岐増殖、漏れ、テスト難、修正怖い
  • 演習:状態を2つ増やして「しんどい点」をメモする📝
  • AI活用:AIに「改善案を3パターン」提案させる💡🤖

17章:テーブル駆動(辞書で遷移を表す)📚✨

  • ねらい:遷移表→コードの距離を縮める
  • 学ぶ:キー(状態,イベント)→次状態のマップ化、禁止はデータで表現
  • 演習:遷移表の一部を辞書で表して動かす🔁
  • AI活用:AIに「遷移表からコードのマップを生成」させる🗺️🤖

18章:イベントを“型”にする(Command化)📦✨

  • ねらい:イベントの入力を安全に扱う
  • 学ぶ:Pay(Amount) みたいに引数を持つ、文字列イベント卒業🎓
  • 演習:PayCommandに金額を持たせる💳
  • AI活用:AIに「コマンド型一覧」を自動生成してもらう🤖🧾

第5部:失敗の扱い・ログ・テスト(19〜23章)🧪📜

19章:遷移の結果を整える(成功/失敗)✅❌

  • ねらい:無効遷移を“事故”にしない
  • 学ぶ:例外にする?Resultで返す?初学者向け落とし所
  • 演習:禁止遷移時に「理由コード+メッセージ」を返す設計🧾
  • AI活用:AIに「失敗理由の分類案」を出させる🗂️🤖

20章:UI/APIへ伝えるエラーメッセージ設計💬✨

  • ねらい:ユーザーに優しい失敗になる
  • 学ぶ:技術用語を出さない、次の行動が分かる文章
  • 演習:禁止遷移10個のメッセージを改善する🫶
  • AI活用:AIに“3段階の言い回し(短い/普通/丁寧)”を作らせる🤖

21章:ログ設計(遷移ログは宝物)📜💎

  • ねらい:あとから原因が追える
  • 学ぶ:旧状態→新状態、イベント名、理由、相関ID
  • 演習:遷移ログを1行で出す(ConsoleでもOK)🖥️
  • AI活用:AIに「ログ項目のチェックリスト」を作らせる✅🤖

22章:単体テスト①(遷移表ベースで作る)🧪✨

  • ねらい:遷移表=テストケースになる体験
  • 学ぶ:正常遷移テスト、禁止遷移テスト
  • 演習:遷移表の行をテストに落とす(まず10ケース)🔟
  • AI活用:AIに「テストケース自動列挙」させる🧠🤖

23章:単体テスト②(網羅の考え方)🎯🧪

  • ねらい:全部テストできない時の優先順位が分かる
  • 学ぶ:重要遷移・境界条件・事故りやすい箇所に集中
  • 演習:優先度A/B/Cでテスト計画を作る📋
  • AI活用:AIに「落ちやすい組み合わせ」を推測させる🔮🤖

第6部:実務の壁(async・並行・時間・保存)(24〜28章)🧱⚡

24章:非同期(async/await)と中間状態⏳⚡

  • ねらい:支払いAPIなど“待ち”がある世界に対応
  • 学ぶ:Processing状態、完了イベントで遷移する考え方
  • 演習:Pay→Processing→Paid をイベントで表す💳⏳
  • AI活用:AIに「中間状態が必要な場面」を挙げさせる🤖

25章:並行実行の事故(連打・二重処理)👆💥

  • ねらい:現実の“連打”で壊れない設計へ
  • 学ぶ:同時イベント、二重適用、排他の基本
  • 演習:Payが2回来たらどうなる?を仕様で決める🧾
  • AI活用:AIに「事故パターン集」を作らせる🧨🤖

26章:冪等性(Idempotency)入門🔁✨

  • ねらい:リトライに強い状態機械へ
  • 学ぶ:冪等キー、重複排除、同じイベントの再適用防止
  • 演習:IdempotencyKeyをイベントに持たせる設計にする🔑
  • AI活用:AIに「冪等性チェックの観点」をまとめさせる📝🤖

27章:時間で動く(Timeout・期限)⏰✨

  • ねらい:期限切れ・自動キャンセルなどを扱う
  • 学ぶ:スケジュールイベント、期限の表現、タイマーの粒度
  • 演習:Submittedのまま30分でExpiredへ、みたいな設計🕒
  • AI活用:AIに「期限がある業務例」を出させる🤖

28章:永続化(保存)①:現在状態をDBへ💾✨

  • ねらい:再起動しても続きから動く
  • 学ぶ:状態を保存するモデル、更新競合(楽なやり方から)
  • 演習:状態をファイル/DB(どちらでも)に保存して復元🔁
  • AI活用:AIに「保存すべき最小項目」を整理させる📦🤖

第7部:発展&実戦投入(29〜30章)🚀🎓

29章:永続化②:履歴(監査ログ)を残す📜✨

  • ねらい:「なぜそうなった?」を後から説明できる
  • 学ぶ:イベント履歴、誰がいつ何をしたか、復元の考え方
  • 演習:遷移履歴を保存して「注文のタイムライン表示」🕰️
  • AI活用:AIに「履歴テーブル/構造の案」を出させる🧠🤖

30章:卒業制作🎓🎉(ミニ実務アプリ完成)

  • ねらい:図・表・コード・テスト・ログまで一気通貫で完成✨

  • 成果物(必須)📦

    • 状態一覧/イベント一覧/遷移表/遷移図🗺️📊
    • 実装(Console or Web API)+単体テスト+遷移ログ🧪📜
    • README(使い方・仕様・禁止遷移の理由)📝
  • 発展(選択)🌟

    • 状態が増えたら「階層状態(サブ状態)」を導入して整理🌳
    • ライブラリ(例:Stateless)導入で書き味を比較📚
    • ASP.NET Core Web API化してHTTP結果(200/409など)にマッピング🌐
  • AI活用:

    • 遷移表→テストケース生成🧪🤖
    • README整形&レビュー(わかりやすさチェック)📝🤖

この30章で、初心者さんでも「状態機械=仕様を壊さず育てる道具」って感覚が持てるようにしてあるよ😊💖

次にやるなら、どっちがいい?✨

  • A:この30章それぞれに「到達目標・演習の具体指示・想定つまずきポイント」を付けて、さらに授業っぽくする📘👩‍🏫
  • B:卒業制作(30章)の題材を「学食注文」以外(ログイン、承認フロー、チケット管理)に差し替えて作りやすくする🎫✅