Skip to main content

第01章:冪等性ってなに?まずは超ざっくり🙂📌

🎯 この章のゴール

  • 「冪等性(Idempotency)」を一言で言える🙂✨
  • 連打すると壊れる例連打しても壊れない例を自分で出せる🔁
  • 「壊れる」って何が困るのか(二重作成・二重決済・二重送信など)をイメージできる😱➡️😌

Concept


1) 冪等性を一言でいうと?🗣️✨

冪等性は、ざっくり言うと…

**「同じ操作を何回やっても、結果(状態)が壊れないこと」**🔁✅

もうちょいカタい言い方だと、HTTPの標準(RFC 9110)では「同じリクエストを複数回しても、1回と同じ効果になる」みたいなニュアンスで語られます📚✨ (RFCエディタ)


2) 「壊れる」ってどういうこと?😵‍💫💥

「壊れる」=やった回数ぶんだけ結果が増えたり、ズレたりすることだよ〜😇

よくある事故👇(全部あるある…!)

  • 🧾 注文が 2回作られた(二重作成)
  • 💳 決済が 2回通った(二重課金)
  • 📩 通知が 2回飛んだ(二重送信)
  • 🎫 クーポンが 2回消費された
  • 📦 在庫が 2回減った

このへんは「連打」「通信の再送」「タイムアウト後のリトライ」で起きがち💦 (成功したのに、返事だけ届かなくて、もう一回送っちゃう…とかね🙃)


3) いちばん速い理解:ミニ例で体感しよ🔁🧠

❌ 連打すると壊れる例(非冪等)

「カウントを1増やす」は、やるたび結果が変わるよね😵‍💫

let likes = 0;

// 👍ボタン(押すたび増える)= 非冪等
function addLike() {
likes += 1;
return likes;
}

addLike(); // 1
addLike(); // 2 ← 同じ操作なのに結果が変わった!

これは「同じ操作を繰り返すほど結果が進む」タイプなので、連打に弱い💥😱


✅ 連打しても壊れない例(冪等)

「状態をこの値に“する”」は、2回やっても同じ結果になりやすい🙂✨

let isSubscribed = false;

// 📌「購読状態を true にする」= 冪等になりやすい
function setSubscribedTrue() {
isSubscribed = true;
return isSubscribed;
}

setSubscribedTrue(); // true
setSubscribedTrue(); // true ← 何回やっても結果が壊れない

ポイントは「増やす」じゃなくて「この状態に固定する(セットする)」感じ✅🔁


4) ここ超大事:「結果」って“画面の返事”じゃないよ👀🧩

冪等性でいう「結果」は、だいたい サーバー側の状態(データ) のことが多いよ📦🗄️

  • ✅ 注文テーブルに 注文が1つだけ できている
  • ✅ 決済が 1回だけ 記録されている
  • ✅ 通知ログが 1回分だけ になっている

そしてややこしいのが👇 レスポンス(返事)が毎回完全に同じとは限らないけど、 “サーバー状態が同じ効果”なら冪等って扱いになりやすい、ということ🧠✨ (このへんは後の章で「レスポンス設計」もやるよ〜📨)


5) 現実のAPIでも超重要:Idempotency-Key🔑✨

世の中の決済系APIとかは、冪等性が命…💳😇 たとえばStripeは、Idempotency-Key を使って「同じ操作のリトライ」を安全にします🔁🔑 しかも「最初の結果(成功/失敗のレスポンス)を保存して、同じキーなら同じ結果を返す」みたいな動きが明記されています📦📤 (Stripe ドキュメント)

「通信は失敗するもの」前提で、リトライできる設計にしておくのが実務ではめちゃ強い💪✨


📝 ミニ演習:身近な「連打で事故る例」を3つ書こう🖊️💞

次のフォーマットで、3つ書いてみてね🙂

  • 例①:〇〇を連打すると、△△が××回起きて困る😱
  • 例②:〇〇を再送すると、△△が二重になる😵
  • 例③:タイムアウト後にもう一回押すと、△△が増えちゃう💥

ヒント:買い物、予約、登録、送信、課金、ポイント、在庫…あたりが出やすいよ🛒📩🎫📦


🤖 AI活用:冪等性が必要な場面を5つ出してもらおう💬✨

AIにこう聞くとサクサク出るよ(コピペOK)👇

  • 「冪等性が必要な操作の例を5つ、理由つきで出して」
  • 「二重実行が起きる典型パターンを、タイムラインで説明して」
  • 「“冪等”と“ただの再実行”の違いを、中学生にもわかる言葉で」

✅ 出てきた答えに対しては、最後にこれだけチェック!

  • 「それ、連打したら何が増える?何が壊れる?」🔁👀
  • 「サーバーの状態が“1回分”に保てる?」🗄️✅

✅ まとめ(この章で覚えたい一言)🌸

  • 冪等性=同じ操作を何回しても、状態(結果)が壊れない🔁✅
  • 壊れる例=二重作成・二重課金・二重送信😱
  • 現実のAPIはリトライが起きるので、冪等性は超実務スキル💪✨ (HTTPでも「非冪等なものを自動リトライしちゃダメ」的な注意が語られるよ📚) (RFCエディタ)