フロントエンドでは完結しない?厄介な「2重リクエスト」の攻略HANDBOOK
【19-A-7】2重リクエスト完全攻略HANDBOOK
WebアプリケーションやAPI連携を前提とした現代のシステム開発において、ユーザーの誤操作や外部サービスからの再送によって引き起こされる「2重リクエスト」は、多くのエンジニアを悩ませる古典的かつ極めて厄介な問題だ。特に、決済、送金、あるいは在庫管理といったミッションクリティカルな領域で発生した場合、致命的なシステム障害やセキュリティインシデントへと発展しかねない。このようなシビアな課題に対し、AI家計簿アプリ「ワンバンク」を提供する株式会社スマートバンクでプロダクトエンジニアリング部の部長を務める三谷昌平氏が実践的な解決策を示した。
フィンテックを支える複雑なシステム間連携、絶対条件は「データの整合性を保つこと」
三谷氏が所属するスマートバンクのサービス「ワンバンク」は、単なる支出管理アプリにとどまらず、Visaのプリペイドカード機能がセットになっている点に大きな特徴がある。ユーザーがアプリに入金すれば、コンビニエンスストアやオンラインショッピングなど、Visa加盟店であればどこでも決済が可能だ。
この利便性の裏側には、高度で複雑なシステム間連携が存在する。入金処理や決済処理において、システムは外部の金融機関や決済ゲートウェイと絶えず通信を行っており、データの整合性を保つことが絶対条件となる。
フィンテックという最もデータの正確性が問われるこのドメインにおいて、スマートバンクがどのように2重リクエストの脅威と向き合い、堅牢なシステムアーキテクチャを構築してきたのか。本講演で三谷氏は、2重リクエスト問題の根本原因から、具体的な9つの技術的解決策までを深く掘り下げた。
フロントエンドの制御だけでは、2重リクエストは完全に対策できない
2重リクエストへの対策を講じるにあたり、三谷氏には「フロントエンドの制御だけでは、システムを完全に防御することは不可能である」という仮説があった。
一般的に、2重リクエストと聞くと、ユーザーが決済完了画面で誤ってブラウザの更新ボタンを押してしまったり、処理が遅いことに痺れを切らして送信ボタンを連打してしまったりといった、ユーザー起因のヒューマンエラーを想像しやすい。しかし、実際のシステム運用において直面する現実はそれほど単純ではなかった。
2重リクエストの想定ケースは多岐にわたる
スマートフォンアプリや多様なブラウザ環境からのアクセスはもちろんのこと、悪意を持った第三者がブラウザの開発者ツールなどを利用して意図的にリクエストを連続送信するケースも想定される。さらに厄介なのは、人間が介在しないシステム間の通信だ。
決済代行会社からのWebhook(外部システムでのイベント発生をHTTP経由で通知する仕組み)の再送や、定期実行されるバッチ処理の重複起動など、バックエンド側や外部環境に起因する2重リクエストも頻繁に発生する。これらすべての発生源をクライアント側の改修のみで塞ぐことは現実的ではなく、バックエンドの基盤レベルでデータを守り抜く仕組みが不可欠であるという強い認識が、スマートバンクの取り組みの出発点となった。
三谷氏はこの問題の深刻さについて、単なるバグ対応の枠を超えたリスク管理の観点から次のように語る。「ユーザーが間違えたときのこのような問題を放置しておくと、不正攻撃を受けるセキュリティホールにもなりかねず、この対策は非常に重要でした」。
この言葉が示す通り、2重リクエストの放置はシステムの脆弱性に直結する。特に金銭を取り扱うサービスにおいては、不完全な状態管理を突いて不正に利益を得ようとする攻撃の標的になりやすい。競合他社がひしめくフィンテック市場において、サービスの可用性とセキュリティを両立させることは自社の最大の競争力にもなる。そのため、データベースのテーブル設計から外部APIの呼び出しフローに至るまで、あらゆる層でデータの不整合を検知・遮断する「多層防御」の思想に基づく仮説が立てられ、具体的な対策の実行へと移されていった。
会員登録無料すると、続きをお読みいただけます
この記事は参考になりましたか?
- Developers Summit 2026 セッションレポート連載記事一覧
- この記事の著者
-
中野 佑輔(編集部)(ナカノ ユウスケ)
金融系SIerでの勤務を経て2025年よりCodeZine編集部所属。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
この記事は参考になりましたか?
この記事をシェア
