冪等性(Idempotency) 教育コンテンツ:24章・詳細アウトライン🔁✨
対象:C#初級〜中級/冪等性は初めて/設計は超入門者🌸
第1章:冪等性ってなに?まずは超ざっくり掴む🔁
-
ねらい:**「同じ要求が何回きても壊れない」**を直感で理解する😊
-
学ぶこと:
- 二重送信・リトライ・タイムアウトの“あるある”📶⌛
- 「壊れる」の具体例(多重課金、在庫マイナス、二重予約)💥
-
ミニ演習:ボタン連打で発生する事故の例を3つ書き出す📝
-
AI活用🤖:
- 「二重送信で起きる事故例を、EC/予約/決済で各3つ出して」
第2章:なぜ現代は冪等性が必須?(ネットは信用しない)🌧️
-
ねらい:**再送が“普通”**である現実を受け入れる😇
-
学ぶこと:
- クライアント側の再送(ユーザー連打・自動リトライ)
- サーバー側のタイムアウト(成功したのに失敗扱い)
-
ミニ演習:「タイムアウト=失敗じゃない」ケースを説明してみる🎤
-
AI活用:
- 「タイムアウトで“二重実行”になる流れを図解っぽく説明して」
第3章:「冪等」っぽい言葉の整理(混ざると事故る)🧠
-
ねらい:用語の違いをスッキリ🌱
-
学ぶこと:
- 冪等性(結果が同じ)
- 重複排除(同じ要求を1回扱い)
- 二重適用防止(状態遷移で止める)🚦
-
ミニ演習:3つの違いを1行ずつでまとめる📝
-
AI活用:
- 「この3語を初学者向けに比喩で説明して」
第4章:副作用ってなに?(冪等性の敵)💣
-
ねらい:副作用が見えるようになる👀
-
学ぶこと:
- “増やす/減らす/追加する/送る”が危険
- “上書きする/指定状態にする”は安全寄り
-
ミニ演習:自分の経験コードから「副作用あり」を3つ見つける🔍
-
AI活用:
- 「この処理は副作用ありますか?理由も」みたいなレビュー用途
第5章:開発環境セットアップ(Windows+VS)🪟🛠️
-
ねらい:実験できる土台を作る😊
-
学ぶこと:
- Visual Studioで Web API テンプレ(ASP.NET Core)を作る
- ローカル実行・デバッグ・ブレークポイント
- (補足)VS Code+dotnet CLIでも可能✨
-
ミニ演習:APIを1個作って、動くのを確認✅
-
AI活用:
- Copilot/Codexに「最小のWeb API雛形」を出させて比較する🤖
第6章:教材用ミニドメインを決める(注文APIでいくよ)🛒
-
ねらい:一貫した題材で迷子にならない🧭
-
学ぶこと:
- 例:注文作成 → 支払い確定 → メール送信
- “壊れやすい操作”をあえて選ぶ
-
ミニ演習:この教材で扱う「危険操作」を2つ決める📝
-
AI活用:
- 「冪等性教材向けの題材を3案、難易度順に」
第7章:事故を体験する(冪等じゃない実装をわざと作る)😵💫
-
ねらい:痛みで覚える(大事)💥
-
学ぶこと:
- 2回POSTしたら2回注文ができる、など
-
ミニ演習:同じリクエストを2回送って、結果が増えるのを確認🔁
-
AI活用:
- 「このAPIに二重送信が来たときの最悪ケースを列挙して」
第8章:冪等化の全体マップ(5つの王道)🗺️✨
-
ねらい:迷ったときの地図を持つ
-
学ぶこと:
- 自然冪等(指定状態にする)
- 冪等キー(Idempotency Key)
- DB一意制約
- 状態遷移ガード
- 非同期・イベント(発展)
-
ミニ演習:題材の各操作に「どの戦略が合うか」ざっくり選ぶ✅
-
AI活用:
- 「この操作はどの戦略が合う?理由も」
第9章:戦略① 自然冪等(“上書き型”の発想)✍️🔁
-
ねらい:「増やす」から「この状態にする」へ
-
学ぶこと:
- PUTっぽい設計の良さ
- “目標状態”を入力で受ける設計
-
ミニ演習:
AddPointをSetPoint的に設計し直す🧠 -
AI活用:
- 「このPOSTを自然冪等に寄せる設計案を2つ」
第10章:戦略② 冪等キーとは?(仕組みのコア)🔑✨
-
ねらい:冪等キー方式の核を理解
-
学ぶこと:
- 冪等キー=“この操作のチケット”🎫
- 同じキーなら「同じ結果を返す」方針
-
ミニ演習:クライアントがキーを付けて送る仕様を作る📝
-
AI活用:
- 「冪等キーの設計でよくある落とし穴を5つ」
第11章:冪等キーをどこで作る?(クライアント発行 vs サーバー発行)🤔
-
ねらい:設計判断ができるようになる
-
学ぶこと:
- クライアント発行:再送に強いけど管理が必要
- サーバー発行:簡単だけど再送と相性が微妙
-
ミニ演習:今回の教材はどっち採用か決める(理由付き)✅
-
AI活用:
- 「この状況ならどっち?判断基準を箇条書きで」
第12章:冪等キーの保存(まずDBでやる)🗃️🛡️
-
ねらい:初心者が最短で“実務っぽく”作れる
-
学ぶこと:
- リクエストキーと結果(レスポンス)を記録
- 一意制約で“同じキーは1回”を保証
-
ミニ演習:
IdempotencyRequests的なテーブル設計を作る🧾 -
AI活用:
- 「テーブル設計案(カラム)と一意制約案を出して」
第13章:冪等キー保存(Redis/キャッシュ等)発展⚡
-
ねらい:将来の選択肢として知っておく
-
学ぶこと:
- 高速だけど揮発・運用が増える
- “結果の再利用”と相性が良いケース
-
ミニ演習:DB方式とRedis方式のメリデメを1分で説明🎤
-
AI活用:
- 「DB方式とRedis方式の比較表を作って(日本語で簡単に)」
第14章:キーの寿命(TTL)とお掃除(データ肥大化対策)🧹⏳
-
ねらい:「作ったけど運用で死ぬ」を避ける😇
-
学ぶこと:
- どれくらい保持する?(例:24時間/7日など)
- クリーンアップ戦略(バッチ/期限)
-
ミニ演習:題材に合うTTLを決める(根拠付き)📝
-
AI活用:
- 「この業務ならTTL何日が妥当?理由も」
第15章:結果の再利用①(成功時に同じレスポンスを返す)📮✅
-
ねらい:2回目以降は“前回の成功結果”を返せるように
-
学ぶこと:
- 同じキー→同じ成功レスポンス
- レスポンス保存の注意(個人情報、サイズ)
-
ミニ演習:レスポンスを保存→再送で同じ内容が返るのを確認🔁
-
AI活用:
- 「レスポンス保存の注意点(セキュリティ含む)を列挙して」
第16章:結果の再利用②(処理中・失敗・タイムアウトの設計)🌀⚠️
-
ねらい:いちばん実務で揉める所をクリアにする
-
学ぶこと:
- In-Progress(処理中)をどう表す?
- 失敗結果を“再利用するか”の方針
- タイムアウト時の再送の扱い
-
ミニ演習:処理中のとき返すレスポンス案を作る📝
-
AI活用:
- 「処理中を返す設計(ステータス/本文)の案を3つ」
第17章:並行実行の地獄①(レースを理解する)🏎️💥
-
ねらい:“同時に来たら壊れる”を体験する
-
学ぶこと:
- ほぼ同時の2リクエストで二重作成が起きる仕組み
-
ミニ演習:同時リクエストで事故が起きる再現テストをやってみる🧪
-
AI活用:
- 「並行バグが起きるシナリオを図解風に説明して」
第18章:並行実行の地獄②(DBで守る:一意制約+トランザクション)🛡️🗃️
-
ねらい:初心者でも堅い守り方を覚える
-
学ぶこと:
- 一意制約で“同じキーは1件”
- 例外が起きたら既存結果を返す、などの流れ
-
ミニ演習:同時リクエストでも1件に収束するのを確認✅
-
AI活用:
- 「一意制約違反が出たときの処理フローを提案して」
第19章:並行実行の地獄③(アプリ側のロックと判断基準)🔒
-
ねらい:やりすぎず、必要なときだけ使う
-
学ぶこと:
- アプリ内ロックの限界(複数台で効かない)
- “まずDB、次に必要なら分散ロック”の考え方
-
ミニ演習:DB方式が強い理由を説明できるようにする🎤
-
AI活用:
- 「分散ロックが必要な条件を箇条書きで」
第20章:非同期の冪等性①(キューは重複が普通)📬🌧️
-
ねらい:非同期世界の前提を理解する
-
学ぶこと:
- At-least-once(少なくとも1回)
- 重複配信・順序入れ替わり
-
ミニ演習:非同期で起きる事故を3つ挙げる📝
-
AI活用:
- 「キュー処理の失敗パターンを初心者向けに説明して」
第21章:非同期の冪等性②(処理済み記録で重複を潰す)✅🧾
-
ねらい:“同じメッセージは1回だけ適用”を実装
-
学ぶこと:
- 処理済みテーブル(MessageId)
- 二重処理防止の定番フロー
-
ミニ演習:同じMessageIdが2回届いても1回になる確認🔁
-
AI活用:
- 「処理済み記録のDB設計案とフローを出して」
第22章:外部APIの冪等性①(リトライ/タイムアウトの落とし穴)🤝⚡
-
ねらい:外部I/Oで“無限事故”を起こさない
-
学ぶこと:
- 再送が相手に重複を生む
- タイムアウト時の扱い(成功してるかも問題)
-
ミニ演習:外部API呼び出しの「リトライ方針」を1つ作る📝
-
AI活用:
- 「リトライしてよい条件・だめな条件を整理して」
第23章:外部APIの冪等性②(相手が冪等じゃない時の守り)🛡️😵
-
ねらい:現実対応力を付ける
-
学ぶこと:
- 呼び出し前後の記録(呼んだ/結果/トレース)
- “呼び出し回数を減らす”設計
- 必要なら補償(キャンセル等)に発展できる導線
-
ミニ演習:「相手が冪等じゃない決済API」想定の守り案を考える💳
-
AI活用:
- 「相手が冪等でない場合の防衛策を5つ、優先度順に」
第24章:仕上げ(テスト・観測・チェックリスト・卒業課題)🎓✨
-
ねらい:作って終わりじゃなく“守れる”ようにする
-
学ぶこと:
- テスト:同一要求を2回/10回、並列でもOKに✅
- 観測:相関ID+冪等キーをログに出す🔍
- チェックリスト化:実務で見落とさない🧾
-
卒業課題🎁:
- 「注文作成API」を冪等キー方式で冪等化し、並列でも1件に収束させる
- ログに冪等キーと相関IDを出す
- “同じリクエスト10回”テストを用意する
-
AI活用:
- 「この実装の冪等性レビュー観点をチェックリスト化して」