GEMINI LABEN
OUTAGE — Geminiが過去最大級の障害(error 1076/1099)から回復へ。エンジニアリングチームの緩和策で影響は縮小中DAILY-BRIEF — 新エージェント「Daily Brief」が登場。夜間にinbox・カレンダー・タスクを分析し、朝のパーソナルダイジェストを生成GEMINI-OMNI — Geminiと生成メディアモデルを統合した動画AI「Gemini Omni」。プロンプトから一貫性のある高品質動画を生成ENTERPRISE — Gemini Enterpriseで3.5 Flashが6/8からデフォルト固定に。機能管理トグルは廃止され全ユーザーで有効DEPRECATION — 画像previewモデル(3.1-flash-image/3-pro-image)は6/25に停止。GA版への移行はお早めにFILE-SEARCH — File Searchがマルチモーダル検索に対応。gemini-embedding-2で画像をネイティブに埋め込み・検索OUTAGE — Geminiが過去最大級の障害(error 1076/1099)から回復へ。エンジニアリングチームの緩和策で影響は縮小中DAILY-BRIEF — 新エージェント「Daily Brief」が登場。夜間にinbox・カレンダー・タスクを分析し、朝のパーソナルダイジェストを生成GEMINI-OMNI — Geminiと生成メディアモデルを統合した動画AI「Gemini Omni」。プロンプトから一貫性のある高品質動画を生成ENTERPRISE — Gemini Enterpriseで3.5 Flashが6/8からデフォルト固定に。機能管理トグルは廃止され全ユーザーで有効DEPRECATION — 画像previewモデル(3.1-flash-image/3-pro-image)は6/25に停止。GA版への移行はお早めにFILE-SEARCH — File Searchがマルチモーダル検索に対応。gemini-embedding-2で画像をネイティブに埋め込み・検索
記事一覧/API / SDK
API / SDK/2026-06-12上級

深夜のポーリングをやめる — Gemini Batch API を Webhook 駆動に作り替えた設計記録

Gemini Batch API の完了監視を 60 秒間隔のポーリングから Webhook 駆動へ移行した実作業の記録です。static/dynamic の使い分け、署名検証、実測値をまとめました。

Gemini API132Batch API2Webhook2イベント駆動2運用設計3Python35

プレミアム記事

明け方 4 時のサーバーログを眺めていて、手が止まりました。

夜間に流している Gemini Batch API のジョブはとっくに終わっているのに、結果の取り込みが始まったのは 58 秒後。理由は単純で、完了確認のポーリングが 60 秒間隔だったからです。

ログの大半は「まだ終わっていません」という応答の記録でした。一晩分をざっと数えると、status 確認の GET だけで 1,000 回を超えています。仕事をしていない通信が、ログの約 90% を占めている状態。

2026 年 5 月に Gemini API へ Webhooks が正式に入ったのを機に、この監視層を作り替えることにしました。本稿はその実作業の記録です。

ポーリング監視の実測コスト

作り替えの前に、現状を数字で押さえておきます。私の夜間パイプラインは、個人開発しているアプリの App Store・Google Play 向け説明文と、アプリ内テキストの多言語ローカライズ文言を Batch API でまとめて生成するもので、毎晩 3 ジョブを流しております。

  • ポーリング間隔: 60 秒
  • 1 ジョブの平均所要時間: 約 2 時間(Batch API はベストエフォートのため夜によって大きく揺れます)
  • 一晩の GET 回数: 約 120 回 × 3 ジョブ × リトライ込みで 約 1,080 回
  • 完了から検知までの遅延: 平均 30 秒、最悪 60 秒

GET 自体は無料に近いとはいえ、cron とポーリングスクリプトという「動き続ける部品」を一つ抱えることになります。実際、過去にはポーリング側の例外処理の不備で監視だけが静かに死んでいた朝がありました。ジョブは成功しているのに結果が取り込まれていない。あの空振りの感覚は、いまも指先に残っております。

static と dynamic、どちらで受けるか

Gemini API の Webhook には 2 種類あります。最初にここの設計判断を誤ると後で作り直しになるため、丁寧に整理します。

static webhook はプロジェクト単位の登録です。webhooks.create で一度エンドポイントを登録すると、購読したイベント(batch.succeededbatch.failed など)がプロジェクト全体から飛んできます。署名は対称鍵(signing secret)の HMAC 方式。

dynamic webhook はジョブ単位の指定です。batches.createwebhook_config に URI を渡すと、そのジョブの完了通知だけが届きます。署名は JWKS による非対称鍵方式で、user_metadata に任意のルーティング情報を載せられます。

私の環境では次のルールに落ち着きました。

  1. 定常の夜間バッチ → static。エンドポイントが固定で、Slack 通知やデータベース更新のような「全ジョブ共通の後処理」に繋がるため
  2. 臨時・実験ジョブ → dynamicuser_metadata{"job_group": "experiment"} のような目印を載せ、本番の後処理に混ざらないよう専用エンドポイントで受けるため

逆にしないことが肝心だと感じております。臨時ジョブのために static の購読を増やすと、レシーバー側の分岐が際限なく育ちます。

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

この記事の続きを読む

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

この記事で得られること
一晩あたり約 1,080 回あった status 確認の GET をゼロにした移行手順と、移行後も薄いフォールバックポーリングを残した判断基準
static webhook と dynamic webhook をジョブの性質でどう使い分けるか — 私の環境で固まった具体的な振り分けルール
standardwebhooks ライブラリによる署名検証・5 分の replay 対策・webhook-id での重複排除まで含めた、そのまま動く Flask レシーバーの実装
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API / SDK2026-04-02
Gemini API の月額5万円を8,400円まで下げた運用設計 — キャッシュ・モデル使い分け・Batch API の組み合わせ方
Gemini API の月額費用を52,000円から8,400円まで下げた実装と運用の記録です。暗黙・明示キャッシュの使い分け、Flash/Pro の自動ルーティング、Batch API への移行、usage_metadata による実測まで、本番で動かしているコードとともに整理します。
API / SDK2026-06-11
Gemini 3.2 API 実装ガイド — 正しいモデルID・3.1 からの移行と本番チェックポイント
Gemini 3.2 を API から呼び出すための正しいモデルID、Gemini 3.1 からの移行時の変更点、Python・TypeScript の実装例、本番環境への移行チェックリストをまとめました。
API / SDK2026-05-24
Gemini File API でアップロードしたファイルが48時間後に消える問題への対処法
Gemini File API のファイルは48時間で削除される仕様です。突然 PERMISSION_DENIED や NOT_FOUND が返るようになった原因と、再アップロードを前提とした実装パターンを整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →