2026年5月4日,Google在官方博客正式宣布:Event-driven webhooks are now available in Gemini API(Gemini API现已支持事件驱动型Webhook)。两天后的5月6日上午10点(北京时间),这封来自Google AI Studio的邮件抵达了全球开发者的收件箱,标志着Gemini API Webhook功能已向所有用户全面开放。
对于许多从事Deep Research(深度研究)、长视频生成或大规模Batch推理的团队来说,这是一次真正意义上的“基础设施级”更新——它并非新模型或新参数的发布,而是直接重写了“如何与长时间运行的AI任务进行交互”的逻辑。
本文基于Google官方博客和Gemini Cookbook的一手资料,系统拆解了Gemini API Webhook的事件类型、两种配置方式、签名验签机制及上手代码,同时探讨了它对国内开发者意味着什么。

Gemini API Webhookとは:イベント駆動型Webhookをひとことで理解する
Gemini API Webhookは、本質的にHTTP POSTベースのイベント通知メカニズムです。あなたが送信したBatchタスク、動画生成タスク、またはInteractionsによる非同期対話が完了すると、Gemini APIはクライアント側からのGETリクエストによるポーリングを待つことなく、署名付きのJSON通知をあらかじめ登録しておいたサーバーアドレスへ能動的に送信します。
この「逆方向呼び出し」という設計は、従来のソフトウェア開発では珍しいものではありませんが、AI推論のシナリオにおいては非常に大きな意味を持ちます。Geminiが現在注力しているDeep Research、Veoによる長尺動画生成、およびBatch APIは、単一タスクの実行に数分から数時間を要することがあります。もし従来通りポーリング方式を続ければ、クライアント側で長時間の接続維持、タイマー管理、エラーリカバリロジックの実装が必要となり、運用コストやAPIクォータの浪費が倍増してしまいます。
🎯 クイック理解: Gemini API Webhook = 「処理が完了した」という情報を、クライアントが何度も問い合わせるのではなく、サーバー側から能動的に通知してくれる仕組み。開発者はコールバック用のエンドポイントを用意して通知を待つだけです。国内チームがAPIYIなどのAPI中継サービスを通じてGeminiに接続する場合も、Webhook通知を活用することで、国際回線を通じたポーリングリクエストを減らし、遅延や帯域消費を大幅に削減できます。
注意点として、Gemini API Webhookが送信するのは「薄いペイロード(thin payload)」です。タスクID、ステータス、結果ファイルのアクセス先(例:output_file_uri)といった情報は含まれますが、数十MBの動画や数万行のBatch出力結果が直接POSTボディに詰め込まれるわけではありません。これは意図的な設計であり、再試行時のデータコストを抑えつつ、権限管理をより明確にするための工夫です。
Gemini API Webhook が「ポーリング時代」を終わらせた理由
Gemini API Webhook の価値を理解するには、まず「ポーリング」が抱えるコストを知る必要があります。Webhook が登場する前、典型的なバッチ処理の流れは以下のようでした:タスクを送信 → operation ID を受け取る → 30秒ごとに setInterval で GET リクエストを繰り返す → ステータスが SUCCEEDED になるまで帰れない。このフローは単一のタスクならまだしも、本番環境ではすぐに破綻してしまいます。
以下の表は、従来のポーリング方式と、Google が公式ブログでも導入を推奨しているイベント駆動型の Webhook 方式を比較したものです。
| 比較項目 | 従来のポーリング方式 | Gemini API イベント駆動 Webhook |
|---|---|---|
| 通知遅延 | ポーリング間隔に依存 (通常 10-60秒) | ミリ秒単位 (タスク完了と同時にプッシュ) |
| API クォータ消費 | ポーリングのたびに読み取りクォータを消費 | Google 側からのプッシュのため消費なし |
| クライアントの複雑性 | タイマー、ステートマシン、再試行の実装が必要 | HTTP POST エンドポイント + 署名検証のみ |
| 大規模並列処理 | 数千タスクでポーリング嵐が発生 | プッシュは個別に到達し、水平スケーリングが容易 |
| 失敗時の復旧 | クライアント側で実装が必要 | サーバー側で指数バックオフ再試行 (最大24時間) |
| 適したシナリオ | 短いタスク、低並列 | 長いタスク、高並列、エージェント型パイプライン |
この表からわかるように、Gemini API Webhook は単に「ポーリングコードを減らす」だけのものではありません。タスクのオーケストレーションという責任の境界を、クライアント側からサーバー側へ大きくシフトさせるものです。エージェント型のワークフローを運用するチームにとって、Webhook と Cloud Run、Cloud Functions、あるいは国内のサーバーレスサービスを組み合わせれば、完全非同期かつ長時間のコネクションを維持しないシステムを構築できます。
💡 ポーリングからの移行: 現在のコードが
GET /operationsを中心に構築されている場合、Webhook 方式への移行は「ポーリングループ」を「イベントコールバックルーティング」に置き換えるだけで済み、ビジネスロジックの変更はほぼ不要です。国内チームが APIYI (apiyi.com) を経由して Gemini API に接続する場合、Webhook エンドポイントを自社内のネットワークに直接接続できるため、イベント駆動のメリットを享受しつつ、クロスボーダーの長接続による不安定さを回避できます。
Gemini API Webhook の2つの設定方法: Static vs Dynamic
Gemini API Webhook には、「グローバル通知」と「タスクごとのルーティング」という2つの典型的なニーズに対応する登録方法があります。この違いを理解することは、後のキー管理や署名検証戦略を決定づける重要な要素です。

Static Webhook: プロジェクト単位のグローバルイベント購読
Static Webhook は WebhookService API を通じて一度登録すると、そのプロジェクト内のすべての対象イベントに対して有効になります。「どのタスクが完了しても通知する」といったシナリオに適しており、例えばすべての batch.succeeded イベントをチームの Slack に転送したり、すべての video.generated イベントを自社 CMS やオブジェクトストレージに同期したりする場合に最適です。
署名メカニズムについては、Static Webhook は HMAC 対称鍵を使用します。Google は作成時に署名用シークレットを返しますが、これは一度しか表示されません。直ちにキー管理サービスに保存する必要があります。保存し忘れると、削除して再作成するしかありません。
Dynamic Webhook: リクエスト単位の精細なルーティング
Dynamic Webhook はより「粒度の細かい」手法です。タスクを送信するたびに webhook_config フィールドで URL を一時的に指定すると、Google はその特定のタスクのイベントをそのアドレスにプッシュします。これはマルチテナントの SaaS シナリオに最適で、顧客ごとに異なるコールバックエンドポイントへイベントを送信できるため、ビジネス上の分離が非常に明確になります。
また、Dynamic Webhook は設定内に user_metadata フィールド(任意のキーバリューペア、例: {"job_group": "nightly-eval"})を含めることができ、Google はプッシュ時にこれをそのまま返送します。これは非常に実用的な設計で、「タスク → ビジネスコンテキスト」の対応表を別途管理する必要がなくなります。
署名メカニズムについては、Dynamic Webhook は JWKS 非対称公開鍵(RS256)を使用します。公開鍵の URL は generativelanguage.googleapis.com/.well-known/jwks.json であり、サービス側は検証時にこの公開鍵を取得するだけでよいため、対称鍵を保管する必要はありません。
| 項目 | Static Webhook | Dynamic Webhook |
|---|---|---|
| 登録方式 | WebhookService API で一括登録 | 各タスクリクエストで一時指定 |
| 適用範囲 | プロジェクト全体 | タスク単位 |
| 署名アルゴリズム | HMAC 対称鍵 | JWKS / RS256 公開鍵 |
| キー管理 | 作成時に一度だけ表示、自前で保存 | 対称鍵管理不要、公開鍵エンドポイントから取得 |
| user_metadata | 非対応 | 対応(任意のキーバリューペア) |
| 典型的なシナリオ | グローバル通知、Slack 連携、統一アーカイブ | マルチテナントルーティング、タスクごとの結果配布 |
| 推奨対象 | チーム内部の統一パイプライン | SaaS プラットフォーム、外部向けサービス |
🎯 選択のアドバイス: チーム内部で一元管理する場合は Static Webhook を優先し、顧客向けにサービスを提供し、テナントごとにルーティングが必要な場合は Dynamic Webhook を優先してください。APIYI (apiyi.com) を経由して Gemini API を利用する場合、どちらのモードもネイティブにサポートされており、署名ヘッダーやイベントペイロードも公式と完全に一致しているため、移行のハードルはありません。
Gemini API Webhook 入門ガイド: 5行のコードでサブスクリプションを完了
ここでは、静的なWebhookの作成から署名検証によるイベント受信まで、10分で最小限の実行可能なループ(MVP)を構築するための極めてシンプルなコードを紹介します。
Python SDK を使用した Gemini API イベント駆動型 Webhook の作成
from google import genai
import os
client = genai.Client()
# Webhookの作成
webhook = client.webhooks.create(
subscribed_events=["batch.succeeded", "video.generated"],
name="prod_global_notify",
uri="https://your-server.example.com/gemini/webhook",
)
# signing_secret は一度しか返されないため、直ちに永続化してください
os.environ["WEBHOOK_SIGNING_SECRET"] = webhook.new_signing_secret
このコードは2つのことを行っています。1つ目は、バッチ完了と動画生成完了の2種類のイベントをリッスンするグローバルエンドポイントの登録。2つ目は、Googleから返された署名キーを環境変数に保存することです。本番環境では、コードリポジトリやログに直接記述するのではなく、Secret ManagerやVaultなどのサービスに保存することを強く推奨します。
Node.js + Express による受信と署名検証
import express from "express";
import { Webhook } from "standardwebhooks";
const app = express();
const wh = new Webhook(process.env.WEBHOOK_SIGNING_SECRET);
// 署名検証のために raw body を使用
app.post("/gemini/webhook", express.raw({ type: "*/*" }), (req, res) => {
try {
const event = wh.verify(req.body, req.headers);
console.log("event:", event.type, "data:", event.data);
res.status(200).send("ok");
} catch (e) {
res.status(400).send("invalid signature");
}
});
app.listen(8080);
重要なポイントがいくつかあります。署名を検証するには必ず express.raw を使用して生のバイトストリームを取得してください。JSON解析を行うと署名が壊れてしまいます。また、2xxレスポンスは数秒以内に返す必要があり、重い処理(データベースへの書き込みや外部API呼び出しなど)はすべて非同期キューに投げるべきです。さらに、タイムスタンプが5分以上経過したリクエストは拒否することを推奨します。これは Standard Webhooks が推奨するリプレイ攻撃対策です。
🚀 実践ヒント: サービスを国内(日本)で運用しており、WebhookエンドポイントをGoogleから直接アクセスさせる必要がある場合、エンドポイントを海外ノードやCDNエッジノードで公開し、そこから社内ネットワークへ転送することをお勧めします。あるいは、APIYI (apiyi.com) のような、Gemini API呼び出しとコールバックプロキシの両方をサポートする中継サービスを利用してください。Webhookのプッシュを一度中継層で受け取り、そこから社内へ転送することで、NATやSSLの複雑さを回避できます。
Gemini API Webhook がサポートするイベントタイプ一覧
現在、Gemini API の Webhook は主に3つのカテゴリの長時間タスクの状態変化イベントをカバーしており、それぞれが結果ポインタフィールドに対応しています。以下の表は、公式 Cookbook に記載されているイベントリストをまとめたものです。

| イベントグループ | イベント名 | トリガータイミング | 主要ペイロードフィールド |
|---|---|---|---|
| Batch API | batch.succeeded | バッチ処理完了 | id、output_file_uri |
| Batch API | batch.failed | バッチ処理失敗 | id、error |
| Batch API | batch.cancelled | ユーザーによるキャンセル | id |
| Batch API | batch.expired | バッチTTL超過 | id |
| Video Generation | video.generated | 長尺動画生成完了 | file_id、video_uri |
| Interactions API | interaction.requires_action | ツール呼び出し応答が必要 | id、required_action |
| Interactions API | interaction.completed | 非同期対話完了 | id、output |
| Interactions API | interaction.failed | 処理失敗 | id、error |
| Interactions API | interaction.cancelled | ユーザーによるキャンセル | id |
各イベントのペイロードは { "type": "batch.succeeded", "data": { "id": "...", "output_file_uri": "gs://..." } } という統一された構造に従っています。この「type + data」形式は、switch文によるルーティングに最適で、イベントごとに異なるビジネスロジックへ振り分けることができます。
📌 アーキテクチャのヒント: 実装時には、イベントごとにエンドポイントを分けるのではなく、1つのWebhookエンドポイントと内部イベントバス(Pub/Sub、Kafka、Redis Streamなど)を組み合わせることを推奨します。これにより、Googleが推奨する「高速な2xx応答 + 非同期処理」というパターンに適合し、水平スケーリングも容易になります。APIYI (apiyi.com) を通じて Gemini Batch API や Veo 動画生成を呼び出す場合、イベントタイプは公式と完全に一致するため、同じルーティングコードをそのまま再利用可能です。
Gemini API Webhook のセキュリティメカニズムと配信保証
Gemini API Webhook のセキュリティ設計は、コミュニティ主導で維持されているクロスプラットフォームの Webhook 相互運用標準「Standard Webhooks」仕様に厳格に従っています。つまり、Stripe、Svix、Resend などのサービスで Webhook を実装した経験があれば、コードをほぼそのまま再利用可能です。
3つの重要な HTTP ヘッダー
| リクエストヘッダー | 役割 | 推奨される使用方法 |
|---|---|---|
| webhook-id | イベントの一意な ID | 冪等キーとして使用し、重複処理を防止 |
| webhook-timestamp | イベント生成タイムスタンプ(秒) | 5分以上経過したリクエストを拒否し、リプレイ攻撃を防止 |
| webhook-signature | HMAC または JWKS 署名 | standardwebhooks ライブラリを使用して一括検証 |
At-least-once(最低1回)配信とリトライ戦略
Google は「最低1回」の配信を保証しています。エンドポイントには各イベントが少なくとも1回は送信されますが、複数回送信される可能性もあります。あらゆるダウンストリームの書き込み操作は冪等(べきとう)に行う必要があり、Webhook ID をデータベースやキャッシュのユニークキーとして使用するのが最適なアプローチです。
エンドポイントが 2xx 以外のステータスコードを返した場合、Google は24時間のウィンドウ内で指数バックオフを用いて繰り返しリトライを行います。これは、サービスが一時的にダウンしてもイベントが失われないことを意味しますが、同時に「同期的なブロッキング処理」をレスポンスとして使用してはならないことも意味します。レスポンスが遅いと失敗とみなされるためです。
署名キーのローテーション
静的 Webhook の HMAC キーは REVOKE_PREVIOUS_SECRETS_AFTER_H24 モードをサポートしており、24時間以内であれば新旧両方のキーで検証が可能です。これは本番環境でのキーの段階的な切り替えにおいて重要です。新しいキーを生成して全ノードに反映し、すべてのノードが新しいキーを受け入れたことを確認してから古いキーを失効させることで、シームレスなローテーションが完了します。
🔐 セキュリティアドバイス: すべての Webhook エンドポイントは HTTPS を使用し、署名の強制検証、リクエストボディのサイズ制限、低速な呼び出しに対するタイムアウト遮断(サーキットブレーカー)を実装すべきです。APIYI (apiyi.com) を通じて Gemini API や他のモデルを同時に呼び出す場合、すべての Webhook エンドポイントを統一された「イベントゲートウェイ」サービスに集約することをお勧めします。そこで署名検証、重複排除、ルーティングを一元管理し、バックエンドでモデルごとに振り分けることで、コンプライアンス監査やキー管理がより容易になります。
Gemini API Webhook の主要な活用シーン
Gemini API Webhook は、すべての Gemini 呼び出しに適しているわけではありません。ミリ秒単位で応答が返ってくるような同期的な generateContent には不要です。その真価は、公式ブログでも言及されている以下の3つの長時間タスクにあります。
Deep Research(深層リサーチ)の非同期エージェント
Deep Research のようなタスクは、多くの場合数分から数時間かかり、複数回の検索、ツール呼び出し、要約の合成を伴います。Webhook の interaction.requires_action イベントは、このようなマルチターンプロセスに最適です。常駐プロセスでセッション全体を追跡するのではなく、各アクションノードでコールバックを受け取り、非同期に次のステップへ進めることができます。
Batch API による大量推論
Batch API は「数千から数十万件のプロンプト」を処理するための入り口です。送信後にジョブ ID が即座に返され、完了すると batch.succeeded イベントを通じて output_file_uri が通知されます。このモデルでは Webhook のコストメリットが最も顕著です。従来のポーリング方式で数千ものバッチジョブを監視すると、API クォータを瞬時に使い果たしてしまう可能性があるためです。
長尺動画生成 (Veo)
Veo などの長尺動画生成タスクは通常数分かかります。ユーザー体験の観点から、フロントエンドでずっとローディング表示を続けることは現実的ではありません。Webhook を使用すれば、タスクを送信した直後に「生成中、完了したら通知します」とフロントエンドに返し、実際に完了した時点で自社のプッシュシステム(WebSocket、APNs、SSEなど)を通じてユーザーに通知することが可能です。
🎯 国内シーンへの適応: 国内で AI 動画アプリを開発するチームにとって、Gemini Veo を安定して呼び出せるか、そして完了通知をタイムリーに受け取れるかは重要な関心事です。APIYI (apiyi.com) のような Gemini API 中継サービスを利用することで前者の課題を解決し、Gemini API Webhook のイベント駆動メカニズムを活用することで後者の課題を解決できます。これらを組み合わせることで、国内でも運用可能な長尺動画生成パイプラインを構築できます。
意思決定のヒント:Gemini API Webhookへ今すぐ移行すべきか?
Webhookは一見するとポーリング(定期的な問い合わせ)よりも全面的に優れているように見えますが、今すぐ移行すべきかどうかは現在のワークロード次第です。以下の意思決定マトリックスを参考に、判断してみてください。

| 現状 | Gemini API Webhookへの移行推奨度 |
|---|---|
| generateContentによる同期呼び出しがメイン | 不要(Webhookは対象外) |
| Batchをたまに利用(1日数件程度) | オプション(メリットは限定的) |
| 大量のBatchタスク(1日数百件以上) | 強く推奨(ポーリング負荷を解消) |
| Veoによる長尺動画生成を行っている | 強く推奨(体験が大幅に向上) |
| Deep Research / エージェントワークフロー | 強く推奨(非同期処理に必須) |
| マルチテナントSaaSプラットフォーム | 強く推奨(Dynamic Webhookが最適) |
💡 移行のヒント: 全てを一度に変更する必要はありません。まずは新規の業務からWebhookを導入し、既存の業務はポーリングを残すといった段階的な移行が可能です。Googleの2つの実装方式は共存可能であり、クライアント側の
GET /operationsインターフェースも引き続き有効です。もしAPIYI (apiyi.com) を通じて他のモデルも利用しているなら、この機会にすべての非同期タスクのイベントバスを統一し、通知システムの運用コストを削減することをお勧めします。
Gemini API Webhook に関するよくある質問 (FAQ)
Gemini API Webhookは有料ですか?
公式ブログによると、現時点ではWebhookのプッシュ自体に追加料金は発生しません。お支払いいただくのは、送信したGemini APIタスク(トークン、動画生成時間、Batch処理量)の利用料金のみです。WebhookのプッシュはGoogle側から能動的に行われるため、あなたのAPI呼び出しクォータを消費することはありません。
国内(日本)のサーバーで直接Gemini API Webhookを受信できますか?
可能です。ただし、コールバックエンドポイントがGoogleのネットワークから到達可能である必要があります。エンドポイントが完全に国内のプライベートネットワーク内にあり、公開アクセスがない場合、Googleはプッシュできません。一般的な対策としては、エンドポイントをエッジノードや外部からアクセス可能なゲートウェイに配置し、そこから社内システムへ転送する構成にするか、APIYI (apiyi.com) のようなWebhook中継サービスを利用して、中継層で受け取ってから国内システムへ転送する方法があります。
Gemini API Webhookは重複してプッシュされますか?重複排除はどうすればいいですか?
はい、重複する可能性があります。Googleは「少なくとも1回(at-least-once)」の配信を保証しているため、ネットワークの瞬断やエンドポイントでの一時的な5xxエラーが発生すると再送が行われます。標準的な対策は、リクエストヘッダーに含まれる webhook-id を冪等性キーとして利用することです。データベースやRedisでこのIDをチェックし、処理済みであれば即座に2xxを返します。
Static WebhookとDynamic Webhookは併用できますか?
可能です。むしろ併用が推奨されます。よくあるパターンは、Static Webhookで「全体的な通知(例:すべての失敗イベントをアラートに送る)」を行い、重要なタスクにはDynamic Webhookで「専用ルーティング(例:特定のVIP顧客の動画生成結果をその顧客のエンドポイントへ直接送る)」を行う方法です。
本番環境でGemini API Webhookをデプロイするには?
推奨されるアーキテクチャは以下の通りです:
HTTPSゲートウェイ → 検証用ミドルウェア → 即座に2xxを返却 → メッセージキューへ投入 → バックエンドのWorkerで非同期処理。
この構成であればWebhookの突発的なトラフィックにも耐えられ、監視、リトライ、監査も容易になります。すでにAPIYI (apiyi.com) ベースのAI呼び出しゲートウェイを構築済みであれば、Webhookエンドポイントをそこに統合するとよりシンプルになります。
Gemini API WebhookとServer-Sent Events (SSE) の違いは?
両者は異なる課題を解決するためのものです。SSEは「クライアントが開始し、サーバーがコンテンツをストリーミングで送る」ための長期間接続であり、リアルタイムなトークン生成に適しています。一方、Webhookは「サーバーが開始し、サーバー間でイベントを通知する」ための短期間のリクエストであり、タスク完了通知に適しています。エージェント型のアプリケーションでは、ユーザーとの対話層にはSSE、バックエンドの長時間タスクにはWebhookというように、両方を組み合わせて使うのが一般的です。
まとめ:Gemini API イベント駆動型 Webhook の真の意義
Gemini API の Webhook は、一見するとエンジニアリング上の利便性を高めるアップデートに過ぎないように思えます。しかし本質的には、Google が AI アプリケーションの形態に対して示した明確な方針転換です。Google は、今後の主流が「1リクエスト1レスポンス」のチャット形式ではなく、Deep Research、長尺動画解析、バッチ推論などが複雑に絡み合う「エージェント型パイプライン」になると考えています。このようなパイプラインにはイベント駆動が不可欠であり、Webhook はその仕組みを開発者側での実装からプラットフォーム層へと引き上げたに過ぎません。
国内の開発者にとって、Gemini API の Webhook 対応にはもう一つの重要な意味があります。それは、Gemini が OpenAI や Anthropic といった競合他社と同等のエンジニアリング能力を備えたことを意味します(両社はすでに同様の仕組みをサポートしていました)。つまり、どのモデルを選択しても、非同期タスクの開発パラダイムが収束しつつあるということです。APIYI (apiyi.com) のような統一中継サービスを活用すれば、Gemini、Claude、GPT といった各モデルのイベント通知を一つのイベントバスに集約でき、「モデルは切り替え可能、パイプラインは不変」という理想的な開発環境を実現できます。
長尺動画アプリや大量のコンテンツ生成、あるいはエージェントによる自動化に取り組んでいるのであれば、今こそイベント駆動型 Webhook へ移行する絶好のタイミングです。技術は成熟し、公式ドキュメントも整備され、コミュニティライブラリもワンクリックで統合可能です。今すぐ取り組むことで、ポーリングの廃止、レイテンシの低減、クォータの節約といったメリットを即座に享受できます。
📚 関連資料: リリースの背景については公式ブログ(blog.google)をご覧ください。イベントリスト、ペイロードフィールド、SDK のサンプルコードについては Gemini Cookbook(github.com/google-gemini/cookbook)を、署名仕様については Standard Webhooks のドキュメント(standardwebhooks)を参照してください。国内から Gemini API を安定して利用するためのゲートウェイをお探しの場合は、APIYI 公式サイト(apiyi.com)をご確認ください。
著者: APIYI Team — AI 大規模言語モデルの API エンジニアリングと非同期インフラストラクチャに注力。Gemini、Claude、GPT の統一中継サービスを提供中。詳細は apiyi.com まで。
