Skip to content
sho10case
Go back

Gemini APIで動かない?よく出るエラー3選の解決策【429 / SAFETY / 504】

こんにちは、ショウです!

最新モデル Gemini 3.1 Pro が登場し、その圧倒的な推論能力やコーディング性能に驚かされる毎日ですが、開発現場では「APIが思うように動かない!」という悲鳴もよく聞こえてきます。

特に「コードは合っているはずなのにエラーが出る」「特定のプロンプトだけ返ってこない」といったトラブルは、AI API特有の仕様が原因であることがほとんどです。

今回は、Google検索でも特に多く相談されている 「Gemini APIの3大エラー」 と、その決定的な対策をまとめました!


1. 【最多】429 Too Many Requests(レート制限)

無料枠(Free Tier)や低ティアのプランを使っていると、必ずぶち当たる壁です。1分あたりのリクエスト数(RPM)やトークン数(TPM)の上限に達すると発生します。

対策:指数関数的バックオフ(Exponential Backoff)

エラーが出た瞬間にすぐ再試行するのではなく、「1秒、2秒、4秒、8秒……」と間隔を倍々に広げてリトライするのが定石です。

Node.jsのライブラリ(p-retryなど)を使うか、以下のような簡易的なループを組み込みましょう。

// 簡易的なリトライ処理のイメージ
for (let i = 0; i < maxRetries; i++) {
  try {
    const result = await model.generateContent(prompt);
    return result;
  } catch (error) {
    if (error.status === 429) {
      await new Promise(res => setTimeout(res, Math.pow(2, i) * 1000));
      continue;
    }
    throw error;
  }
}

2. 【謎】Candidate was blocked due to SAFETY(安全フィルター)

「エラー文は出ないのに、レスポンスのテキストが空(undefined)になる」という現象の正体です。Gemini 3.1 Proの強力な安全フィルターが、プロンプトや回答案を「不適切」と判定してブロックしています。

対策:SafetySettingsの調整

デフォルト設定はかなり厳しめです。開発中のユースケースに合わせて、安全設定を明示的に指定することで回避できます。

const { HarmCategory, HarmBlockThreshold } = require("@google/generative-ai");

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH, // 重大なものだけブロック
  },
  // 他のカテゴリも同様に設定
];

const model = genAI.getGenerativeModel({ model: "gemini-3.1-pro", safetySettings });

3. 【難敵】504 Gateway Timeout(接続時間切れ)

最新の Gemini 3.1 Pro は非常に賢い反面、複雑なタスク(大量のソースコード解析など)を依頼すると、回答生成に数十秒かかることがあります。

サーバー(VercelやNginx等)のタイムアウト設定(通常10〜30秒)をGeminiが超えてしまうと、この504エラーが発生します。

対策:ストリーミング(Streaming)で「沈黙」を破る

回答をすべて待ってから返そうとするからタイムアウトします。generateContentStream を使い、生成されたそばからデータを細切れに送ることで、サーバーに「まだ生きてますよ!」と伝え続けましょう。

const result = await model.generateContentStream(prompt);

for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  // クライアントへ即座に送信(Server-Sent Eventsなど)
  sendToClient(chunkText); 
}

これだけで、タイムアウトを劇的に減らせるだけでなく、ユーザーの体感待ち時間もほぼゼロになります。


4. まとめ:AIとの「待ち合わせ」をマスターしよう

Gemini API、特に最新の3.1 Proを使いこなすコツは、APIを「ただ呼ぶ」のではなく、**「AIの機嫌(制限や推論時間)を伺いながら呼ぶ」**ことにあります。

  • 429: 焦らず間隔を空けてリトライ。
  • SAFETY: フィルター設定を正しくコントロール。
  • 504: ストリーミングで接続を維持。

これらを実装に組み込むだけで、あなたのアプリの信頼性は一気に「本番クオリティ」になりますよ。

「自分の環境ではこう解決した!」といった事例があれば、ぜひSNSなどで教えてくださいね。

それでは、また!



Related Posts