第01章:冪等性ってなに?まずは超ざっくり🙂📌
🎯 この章のゴール
- 「冪等性(Idempotency)」を一言で言える🙂✨
- 連打すると壊れる例/連打しても壊れない例を自分で出せる🔁
- 「壊れる」って何が困るのか(二重作成・二重決済・二重送信など)をイメージできる😱➡️😌

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エディタ)