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-04-10上級

Gemini API 実践トラブルシューティング — 2.5 Pro のレート制限・タイムアウト・レスポンスエラーを実践

Gemini 2.5 Pro API で発生する 429(レート制限)、504(タイムアウト)、400(バリデーション)エラーを体系的に解説。実装済みの修正コード、指数バックオフ戦略、Safety Filter 対策、コスト最適化まで、本番環境で使える実践的なガイド。

gemini-api279troubleshooting57gemini-2.5-pro13rate-limit4error-handling8

プレミアム記事

深夜に鳴った 429 の通知から

個人開発しているアプリの画像分類バッチが、ある晩まとめて 429 を返して止まっていたことがありました。ログを追うと、並列に投げていたリクエストが分間上限を一気に超えていたのです。原因を掴むまで小一時間。あの夜の手詰まりが、この記事の出発点です。

Gemini API を本番で回していると、429(レート制限)・504(タイムアウト)・400(バリデーション)といったエラーは避けて通れません。ただ、これらは「運が悪かった」で片づく類のものではなく、発生の仕組みを理解すればアーキテクチャの側で先回りできるものがほとんどです。

ここで扱うのは、小手先でエラーを潰す話ではありません。なぜそのエラーが出るのかという構造から入り、私自身が個人開発の本番運用で実際に使っている実装パターンと、そこで測った数値を添えてお伝えします。gemini-flash-latest(現在は Gemini 3.5 Flash が実体)のように使うモデルが変わっても効き続ける考え方を、中心に据えました。

Error 1: 429 Too Many Requests(レート制限エラー)

発生の仕組み

Gemini API には、1分間あたりまたは1時間あたりの API呼び出し数に制限があります。この制限を超えると 429 エラーが返されます。

API Pro・Enterprise のプランによってレート制限は異なります:

  • 無料枠: 1時間に60リクエスト、1分間に15リクエスト
  • Pro: 1分間に300リクエスト、1日に1,500,000リクエスト

根本原因

  1. 並列リクエストの過多: 複数の API 呼び出しを同時に実行している
  2. バッチ処理の最適化不足: 本来まとめられるリクエストをバラバラに送信している
  3. ポーリング間隔が短すぎる: 短間隔でポーリングを繰り返している
  4. 複数アプリケーションの干渉: 同じ API キーで複数のアプリが独立して呼び出している

実装例: 指数バックオフ + リトライロジック

async function callGeminiAPIWithRetry(
  prompt: string,
  maxRetries: number = 5,
  baseDelayMs: number = 1000
): Promise<string> {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const response = await fetch(
        'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent',
        {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'x-goog-api-key': process.env.GEMINI_API_KEY,
          },
          body: JSON.stringify({
            contents: [{ parts: [{ text: prompt }] }],
          }),
        }
      );
 
      if (response.status === 429) {
        // レート制限: 指数バックオフで待機
        const delayMs = baseDelayMs * Math.pow(2, attempt) + Math.random() * 1000;
        console.log(`Rate limited. Retrying after ${delayMs}ms (attempt ${attempt + 1}/${maxRetries})`);
        await new Promise(resolve => setTimeout(resolve, delayMs));
        continue;
      }
 
      if (response.ok) {
        const data = await response.json();
        return data.candidates[0]?.content?.parts[0]?.text || '';
      }
 
      throw new Error(`API Error: ${response.status}`);
    } catch (error) {
      if (attempt === maxRetries - 1) throw error;
      
      const delayMs = baseDelayMs * Math.pow(2, attempt);
      console.log(`Attempt ${attempt + 1} failed. Retrying in ${delayMs}ms...`);
      await new Promise(resolve => setTimeout(resolve, delayMs));
    }
  }
 
  throw new Error('Max retries exceeded');
}

対策: リクエスト単位での調整

複数リクエストを1つにまとめる

// 悪い例: 複数リクエストを並列実行
Promise.all([
  callGeminiAPI(prompt1),
  callGeminiAPI(prompt2),
  callGeminiAPI(prompt3),
]);
 
// 良い例: 順序実行またはキューイング
const prompts = [prompt1, prompt2, prompt3];
for (const prompt of prompts) {
  const result = await callGeminiAPIWithRetry(prompt);
  // 次のリクエストへ(間隔は自動的に調整される)
}

バッチ処理の活用

Gemini API のバッチ処理エンドポイントは、複数のリクエストを効率的に処理し、レート制限の影響を軽減します:

async function batchGenerateContent(prompts: string[]) {
  const requests = prompts.map(prompt => ({
    model: 'models/gemini-2.5-pro',
    contents: [{ parts: [{ text: prompt }] }],
  }));
 
  const response = await fetch(
    'https://generativelanguage.googleapis.com/v1beta/batch:generateContent',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-goog-api-key': process.env.GEMINI_API_KEY,
      },
      body: JSON.stringify({ requests }),
    }
  );
 
  return response.json();
}

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

この記事の続きを読む

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

この記事で得られること
リトライ増幅率を実測して数値で管理する設計手順
429・503・504・400・Safety を初動から切り分ける判断表
キャッシュ×バッチ×モデル使い分けで API 呼び出し数を削減する実務パターン
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API / SDK2026-06-12
Gemini API の空応答を finish_reason から逆引きする — 診断フロー・再試行分類・監視の実務
response.text が空になる問題は candidates・prompt_feedback・finish_reason の3層で診断できます。思考トークンによる出力枯渇の検出、再試行可否の分類器、空応答率の監視まで、本番で運用している実装をまとめました。
API / SDK2026-05-12
Gemini File APIのファイルが「PROCESSING」のまま止まる:タイムアウト処理とリトライ設計
Gemini File APIでアップロードしたファイルがPROCESSING状態のまま進まない問題を解説。ポーリングの正しい実装・タイムアウト設計・失敗時のクリーンアップまで、実際のコードで解決します。
API / SDK2026-05-03
Gemini APIで突然の「RECITATION」エラー — 著作権ブロックの正体と回避法
Gemini APIが応答を途中でカットして finish_reason に RECITATION を返すエラーの原因と、再現性のある回避策を実装パターン付きで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →