GEMINI LABEN
API — Gemini 3.5 Flashが一般提供。gemini-flash-latestの実体となり、エージェント・コーディングで持続的に高性能を出しますAGENT — Managed Agentsが公開プレビュー。Googleホストの隔離Linuxサンドボックスでステートフルな自律エージェントを構築できますSEARCH — File Searchがマルチモーダル対応。gemini-embedding-2で画像をそのまま埋め込み・検索できますRESEARCH — Deep Researchの新版が協調プランニング・可視化・MCPサーバー連携・File Searchに対応しましたSHEETS — Gemini in Sheetsが周辺データ構造を解析し、数式エラーを1クリックで診断・修正しますROADMAP — Gemini 3.5 Proは品質調整のため7月へ延期。最新の主力はFlash系ですAPI — Gemini 3.5 Flashが一般提供。gemini-flash-latestの実体となり、エージェント・コーディングで持続的に高性能を出しますAGENT — Managed Agentsが公開プレビュー。Googleホストの隔離Linuxサンドボックスでステートフルな自律エージェントを構築できますSEARCH — File Searchがマルチモーダル対応。gemini-embedding-2で画像をそのまま埋め込み・検索できますRESEARCH — Deep Researchの新版が協調プランニング・可視化・MCPサーバー連携・File Searchに対応しましたSHEETS — Gemini in Sheetsが周辺データ構造を解析し、数式エラーを1クリックで診断・修正しますROADMAP — Gemini 3.5 Proは品質調整のため7月へ延期。最新の主力はFlash系です
記事一覧/高度な活用
高度な活用/2026-06-27上級

Gemini の完了イベントは二度届きます — Webhook と照合ポーラーを「実質1回」にする冪等な受け口

Gemini の長時間オペレーションを Webhook で受けつつ照合ポーラーで二重化すると、同じ完了イベントが二度届き、公開や課金が二度走ります。冪等キーの取り方と claim→実行→確定の三相で「実質1回」にする受け口を実装します。

gemini90webhook2idempotency2batch-api2production96

プレミアム記事

長時間オペレーションをポーリングから Webhook へ移し、さらに取りこぼし対策として照合ポーラーを足した直後に、別の不具合が顔を出します。同じバッチの完了が二度処理され、生成済みの記事が二度公開されたり、完了通知が二通飛んだりするのです。

これは照合を足したことの副作用ではなく、二重路を持った時点で構造的に避けられない現象です。Webhooks に移してもデプロイの瞬間にイベントは落ちる、という照合の話が「欠落を拾い直す」側だとすれば、本記事は「拾い直した結果、同じものを二度掴んでしまう」側の手当てです。受け口を冪等にして、何度届いても副作用は一度だけ、という状態を作ります。

なぜ二度処理が起きるのか — 二重路は「事故」ではなく前提

Gemini の Webhook 配信は at-least-once です。受信側が 2xx を返す前にコネクションが切れれば、Google 側は配信成功を確認できず、同じイベントを再送します。受信は成功していたのに 2xx の返却だけ失敗した、というケースでも再送は起きます。つまり Webhook 単体でも、同じ完了が二度届く前提で組む必要があります。

そこへ照合ポーラーが加わると、重複の経路はさらに増えます。

重複が生まれる経路何が起きているか
Webhook の再送2xx 返却前に切断 → Google が同一イベントを再配信
Webhook と照合ポーラーの衝突Webhook 受信処理中に、低頻度ポーラーが同じ完了を独立に検知
デプロイ中の二度受け旧インスタンスが処理開始 → 切替で応答できず → 新インスタンスへ再送
手動リトライ運用者がポーラーを手で再実行し、確定前の完了を再投入

ここで大事なのは、これらを「異常系」として individually 潰そうとしないことです。どの経路も塞ぎきれません。代わりに、受け口を「何回呼ばれても結果が変わらない」形にしておけば、経路の数を気にせず済みます。冪等性とは、入口の数を減らす努力ではなく、出口を一本にする設計です。

全体像 — 受け口を「判定」と「副作用」に割る

二度処理を防ぐ鍵は、完了イベントを受け取ってから副作用(公開・課金・通知)を起こすまでの間に、一つの関門を置くことです。関門の役割は「この完了は、まだ誰も副作用を起こしていないか」を原子的に判定することです。

設計を三相に分けます。

  1. 正規化 — 届いたイベントから安定した冪等キーを取り出す
  2. クレーム(claim) — 「自分がこの完了を処理する」と先に主張し、競合を弾く
  3. 確定(commit) — 副作用を起こし切ってから、処理済みを記録する

Webhook レシーバーも照合ポーラーも、最後はこの同じ受け口を呼ぶだけにします。入口は複数でも、副作用を起こす関数は一つです。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Webhook と照合ポーラーの二重路で完了処理が二度走り、公開や通知が重複していた人が、実質1回に収める設計を手に入れられる
operation name から冪等キーを正規化し、SQLite の UNIQUE 制約で競合を弾く claim→実行→確定の三相を、動くコードで導入できる
副作用が途中で落ちたときの再試行と、クレームの有効期限の決め方まで含めて、無人パイプラインを安心して回せるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

高度な活用2026-06-14
Gemini の構造化出力を本番で信用するために — スキーマ設計・二重検証・抑制つきリトライの実装メモ
Gemini の構造化出力は「パースできるJSON」は保証しても「正しい値」までは保証しません。@google/genai での新しいスキーマ設計、propertyOrdering の効き目、Zod による二重検証、MAX_TOKENS 切れの扱い、抑制つきリトライの実装をまとめました。
高度な活用2026-06-13
Gemini の GA 画像モデルは端末解像度ちょうどに出力できない — 縦横比とセーフエリアを揃える壁紙パイプライン
GA 版の画像モデルに切り替えたら壁紙が端末画面に収まらない。1枚のマスターから全デバイス分を正確に切り出し、生成回数を台数分の1に抑える壁紙パイプラインの実装を、Pillow のコードとともにまとめます。
高度な活用2026-04-27
Gemini Computer Use の自己修復アーキテクチャ — 失敗するブラウザ自動化を本番で安定稼働させる設計パターン
Gemini Computer Use のブラウザ自動化を本番で運用すると、要素消失・モーダル割り込み・ネットワーク遅延で頻繁に失敗します。失敗を「自己修復」させる回復戦略を、検出・分類・リトライ・人間介入のレイヤーに分けて、Pythonの動くコードで設計します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →