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

冪等性(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つの王道)🗺️✨

  • ねらい:迷ったときの地図を持つ

  • 学ぶこと:

    1. 自然冪等(指定状態にする)
    2. 冪等キー(Idempotency Key)
    3. DB一意制約
    4. 状態遷移ガード
    5. 非同期・イベント(発展)
  • ミニ演習:題材の各操作に「どの戦略が合うか」ざっくり選ぶ✅

  • AI活用:

    • 「この操作はどの戦略が合う?理由も」

第9章:戦略① 自然冪等(“上書き型”の発想)✍️🔁

  • ねらい:「増やす」から「この状態にする」へ

  • 学ぶこと:

    • PUTっぽい設計の良さ
    • “目標状態”を入力で受ける設計
  • ミニ演習:AddPointSetPoint 的に設計し直す🧠

  • 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活用:

    • 「この実装の冪等性レビュー観点をチェックリスト化して」