冪等性 - エンジニア御用達の言葉と文化
オープニング
(雨音のSE)
皆さんこんにちは。「雨宿りとWEBの小噺」へようこそ!パーソナリティの Keeth こと桑原です。 この番組では,目まぐるしく変化するWeb業界の中,ちょっと一息つける裏話や小噺などをお届けします.
「同じことを繰り返してもいいんだろうか?」 という問いに対し,皆さんはどう感じますか?おそらく多くの方はNOだと思いますが,ことエンジニアの場合,むしろ同じことが望ましいケースが良くあります.
今回の話題は「冪等性 - エンジニアがよく使う言葉」です 英語で「idempotency」と書きます。聞き慣れない方も多いと思いますが、実はこの言葉、私たちの日常生活にも密接に関わっているんです。
本編
Part 1: 冪等性って何? - 日常に潜む数学的概念
まず「冪等性」という言葉の意味から説明しましょう。これは「同じ操作を何度繰り返しても結果が変わらない性質」のことです。数学では x² = x となる演算のことを指します。
例えば、皆さんの家のリビングにある電気のスイッチを考えてみてください。これは冪等ではありません。なぜなら、押すたびに状態が変わりますよね。一回押すと点灯、もう一回押すと消灯。
一方で、エレベーターのボタンはどうでしょう?一度押しても、焦って10回連打しても、エレベーターは同じ階に来てくれますよね。これは冪等な操作の代表例です。
(軽い笑い)
私、先日コンビニのATMで焦って引き出しボタンを二度押ししてしまい、「二重に引き落とされたらどうしよう」とヒヤッとした経験があります。結果的には大丈夫でしたが、これこそ冪等性が重要になる場面ですよね。
Part 2: エンジニアの世界での冪等性 - HTTPメソッドの物語
さて、この冪等性という概念、実はWebの基本技術である「HTTPメソッド」にも深く関わっています。
GET、PUT、DELETEなどのHTTPメソッドは冪等、POSTは非冪等とされています。これにはちょっと面白い歴史があるんです。
インターネット黎明期、ネットワークの信頼性はかなり低かった。ブラウザでページを読み込んでいる途中で切れてしまうことも珍しくなかったんです。そこで「再読み込みしますか?」というダイアログが出てきますよね。
(悩んだ声で)「これ押して大丈夫かな...もう一回注文されちゃったりしないよね?」
そんな不安を解消するために、HTTPの設計者たちは「同じリクエストを何度送っても安全なメソッド」と「一度だけ実行すべきメソッド」を明確に分けることにしたんです。
Part 3: 冪等性が救った100万ドル - 実話
ここで一つ実話をご紹介します。
ある大手ECサイト(名前は言えませんが、アメリカの大手です)で、支払い処理システムに問題が発生しました。ネットワークのタイムアウトが起きると、顧客に二重請求が発生するバグがあったんです。
「支払いが完了しませんでした。もう一度お試しください」というメッセージを見た顧客が再度決済ボタンを押すと、実は裏では二重に課金されていたというわけです。
この問題が明るみに出たとき、数百件の二重請求が発生していました。返金対応と信頼回復のためのキャンペーンで、推定100万ドル以上の損失が出たと言われています。
この一件をきっかけに、この会社では全てのトランザクションに「冪等性キー」という仕組みを導入することになりました。各取引に一意のIDを付与して、同じIDのリクエストが来た場合は「あ、これは二回目のリクエストだな」と判断して実行をスキップする仕組みです。
(驚いた声で)「たった一つの概念の実装漏れで、100万ドル...!」
Part 4: エンジニアの冪等性ジョーク
エンジニアの間では「冪等性」にまつわるジョークもあります。
「良いエンジニアは冪等性を理解している。素晴らしいエンジニアは冪等性を理解している。」
(間を置いて)
分かりました?同じことを二度言うことで冪等性を表現するジョークなんです。エンジニアのユーモアってこんな感じなんですよ...
(照れ笑い)
もう一つ。あるエンジニアが「家のドアを開ける操作は冪等だが、電気のスイッチを押す操作は冪等ではない」と説明していたところ、友人から「でも私の家のドアは押すたびに開いたり閉まったりするよ?」と反論されて絶句した...というエピソードもあります。
確かに、家によってはドアが回転式だったり、押すたびに開閉するタイプもありますよね。冪等性の説明って、意外と難しいんです。
Part 5: 分散システムと冪等性 - Amazonの教訓
クラウドサービスで有名なAmazon Web Services(AWS)の設計思想には、冪等性が深く関わっています。
Amazonのシステム設計における有名な教訓に「メッセージは一度だけ配信されるとは思うな、メッセージは必ず一度は配信されると思うな、メッセージの順序は保存されると思うな」というものがあります。
分かりにくいですよね(笑)。つまり「システムは必ず失敗する前提で設計しなさい」ということです。
この教訓から、彼らは全てのシステム操作を冪等に設計するという原則を採用しました。同じリクエストが複数回来ても問題ないように作る。これによりAmazonの分散システムは他社に比べて高い信頼性を実現できたと言われています。
Part 6: 雨の日と冪等性 - 私の体験談
ここでちょっと個人的な体験談を。
先日の大雨の日、私はタクシー配車アプリを使っていました。雨でネットワークの調子が悪かったのか、「配車中」の表示が止まってしまい、不安になって何度も「配車」ボタンを押してしまったんです。
結果、5台のタクシーが次々と配車されてしまいました。キャンセル料の嵐ですよ...(泣)。
この経験から学んだのは、「雨の日こそ冪等性の重要さが身に染みる」ということ。不安だからといって何度もボタンを連打するのは危険です。特に決済や予約のような重要な操作では。
Part 7: 冪等性の未来 - ブロックチェーンとの関係
最後に、冪等性の未来についても少し触れておきましょう。
ブロックチェーン技術では、トランザクションの一意性と不変性が重要です。一度記録された取引は変更できないため、システム全体としては冪等性を担保する工夫が必要になります。
実は、仮想通貨の世界での二重支払い問題(ダブルスペンディング)も、冪等性の考え方で解決されているんです。
また、最近話題のWeb3やスマートコントラクトの設計でも、冪等性は重要な概念として扱われています。特に分散型の金融サービス(DeFi)では、ネットワークの遅延や障害に強いシステム設計が求められるため、冪等性の原則が広く採用されています。
クロージング
(雨音のSE)
さて、今日は「冪等性」という一見難しそうな概念について話してきました。
「同じ操作を何度繰り返しても結果が変わらない」という単純な原則が、私たちのデジタル生活の安全と信頼性を支えている。エンジニアが当たり前に使うこの言葉の背景には、たくさんの試行錯誤と失敗の歴史があるんですね。
また、雨の日にネットショッピングをしていて「あれ?決済完了したかな?」と不安になったら、「冪等性」という言葉を思い出してください。優れたシステムなら、ボタンを連打しても二重請求はされないはずです...たぶん。
(笑い)
この番組面白かったよーという方は,ぜひチャンネル登録もお願いします.もし聴いていて気になることや、話してほしいトピック,感想などありましたら、概要欄のフォームや,𝕏 でハッシュタグ「WEB 小噺」でつぶやいてください!web はアルファベット,「小噺」は漢字でもひらがなでも大丈夫です!
今回もお聴きくださりありがとうございました!雨宿りをしながら考える技術の変遷.次回もどうぞお楽しみに.「雨宿りと WEB の小噺」お相手は Keeth でした。さようなら!