GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/API / SDK
API / SDK/2026-05-24上級

Gemini API のリクエスト Hedging で p99 レイテンシのテールを抑える設計

Gemini API のテールレイテンシ問題を、二重リクエスト方式の Hedging で攻略する設計記録です。個人開発の本番アプリ運用で得た p50/p95/p99 の実数値と、課金増を 18% に抑えた節度ある実装パターンを公開します。

Gemini API191LatencyHedgingProduction3iOS13Cloudflare Workers6

プレミアム記事

import { ArticleSchema } from '@/components/ArticleSchema';

iPhone アプリのレビュー画面に「読み込みが遅すぎる」という低評価が並び始めたのは、2026年1月のことでした。AdMob の月収が 150 万円を超え、月間アクティブユーザーが伸び続けるなかで、Gemini API を裏で呼ぶ機能のクラッシュは出ていないのに、ユーザー体験だけが静かに崩れていました。Firebase Crashlytics には何も上がってこありません。クラッシュではなく、p99 のテールレイテンシだけが伸びていたからです。

Cloudflare Workers のログを掘り返すと、Gemini API のレスポンスが 90 パーセンタイルまでは 2.1 秒に収まっているのに、p99 だけが 8.4 秒という壁にぶつかっていました。中央値の 4 倍以上のテール。月に 1〜2 回ずつ全ユーザーが遭遇する計算です。私自身、個人開発を長く続けてきましたが、テールレイテンシをアプリ側で吸収するのはここまで難しいのかと思い知らされた数字でした。

この記事は、その問題を リクエスト Hedging(先勝ち二重リクエスト) で攻略した 4 ヶ月の記録です。公式ドキュメントには載っていない「キャンセル後も課金される」という Gemini API の挙動を正面から扱い、コスト増を月 18% 以内に抑えながら p99 を 8.4 秒から 6.0 秒に短縮した具体的な設計と実装、そして運用で踏んだ落とし穴を共有します。

なぜ「リトライ」では p99 が下がらないのか

最初に試したのは、よくある指数バックオフ付きリトライでした。タイムアウトを 5 秒に設定して、超えたら 1 秒待って再送します。シンプルで分かりやすい。しかし計測結果は残酷で、p99 はむしろ 9.2 秒に悪化 しました。理由は明確で、リトライは「失敗してから次を投げる」直列処理だからです。タイムアウト 5 秒 + 待機 1 秒 + 2 回目のレスポンス 3 秒 = 9 秒という算数になります。

Hedging の発想は逆です。最初のリクエストが 遅れている兆候を見せた瞬間に、結果を待たずに 2 本目を並行で投げる。先に返ってきた方を採用して、もう一方はキャンセルします。Google の SRE Book で広く知られた手法ですが、実装時の細かい挙動が公式ドキュメントから読み取りにくく、特に課金体系との兼ね合いで判断が難しい。だからこそ、運用の知見をまとめる価値があると考えました。

設計の全体像とパラメータ

Hedging を発動する 3 つのトリガー

私の実装では、次の 3 条件のいずれかを満たしたときに 2 本目のリクエストを投げます。

  1. 時間しきい値: 最初のリクエストから p95 タイムを超えた瞬間(今回の場合 3.2 秒)
  2. 接続失敗: 最初のリクエストが TLS ハンドシェイクで 1.5 秒以上停滞
  3. 明示的シグナル: API レスポンスヘッダ x-goog-request-paramsretry-after が返ってきた直後

3 本目以降は投げません。これは経験則で、2 本でカバーできない遅延は Gemini 側のリージョン障害かネットワーク全体の問題で、それ以上投げてもキャンセル待ち時間と課金だけが増えていくからです。

キャンセル順序の決定原則

ここが Hedging 実装で一番悩むところでした。「先に返ってきた方を採用、もう片方をキャンセル」と書くのは簡単ですが、実際には次の選択肢があります。

  • A 案: 最初に返ってきたレスポンスを採用、もう一方は AbortController.abort() で即キャンセル
  • B 案: 2 本とも最後まで完了させ、レスポンス品質スコアの高い方を採用
  • C 案: 最初に ストリーミングで意味のあるトークンが返ってきた 方を採用

私は最終的に A 案で運用しています。B 案は品質スコアリングのオーバーヘッドで p99 がむしろ伸び、C 案はストリーミングの opening token が同じパターンになりがちで判断材料にならなかったためです。シンプルな A 案で十分に効きました。

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

この記事の続きを読む

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

この記事で得られること
p99 を 8.4 秒 → 6.0 秒に短縮した二重リクエスト設計のしきい値とキャンセル順序を、Swift と TypeScript の実装ごと公開します
キャンセル後も課金される Gemini API の挙動を正面から扱い、月のコスト増を 18% 以内に収める控えめな hedging パラメータを示します
個人開発の本番アプリで Crashlytics のテール検知を起点に hedging を導入した実装手順と、運用 4 ヶ月の落とし穴を共有します
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API / SDK2026-06-28
Managed Agents が静かに止まった朝、ログに手がかりが何も残っていなかった — 走行を外側から追える観測層の設計
Gemini Managed Agents はサンドボックスが Google 側にあるため、止まったときに自分のログ基盤へ手がかりが残りません。ストリームイベントを刻んで台帳化し、無音の停止を検知し、後から読める事後ログに畳む観測層を、そのまま動く TypeScript で設計します。
API / SDK2026-05-26
iOS の URLSession で Gemini API のストリーミングがバックグラウンド復帰時に途切れる原因と対処
iOS アプリで Gemini API のストリーミング応答を受け取っている最中にアプリを一旦バックグラウンドに送って戻ると、接続が切れて続きが返ってこない――そんな現象に遭遇したときの原因切り分けと、URLSession 周りの最小修正をまとめます。
API / SDK2026-05-25
Gemini API でアプリのローカリゼーションを自動QAする: 翻訳ドリフトを早期検出する構造化出力パイプライン
累計5,000万DLの個人開発アプリで多言語ローカリゼーションを運用するなかで見えた、翻訳ドリフトを早期検出する Gemini 2.5 Pro × 構造化出力の評価パイプラインを設計から実装まで整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →