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-04中級

Gemini APIで「FAILED_PRECONDITION」エラーが出る — ケース別の原因診断と解決策

Gemini APIのFAILED_PRECONDITIONエラーは「今の状態では実行できない」を意味します。課金設定・APIの有効化・コンテキストキャッシュの有効期限など、ケース別の原因と具体的な解決手順を解説します。

gemini-api279エラー対処3FAILED_PRECONDITIONトラブルシューティング30課金4

Gemini APIを使い始めてしばらくすると、ある日突然こんなエラーメッセージに遭遇することがあります。

FAILED_PRECONDITION: Request contains an invalid argument.

あるいは、もう少し具体的に:

FAILED_PRECONDITION: Billing account not found. Please set up a billing account.

このエラーで厄介なのは、「前提条件が満たされていない」という意味のエラーコードなのに、その前提条件が何なのかが状況によって全く異なることです。同じエラーコードで「課金設定の問題」のこともあれば、「キャッシュの有効期限切れ」のこともあります。公式ドキュメントを見てもなかなかすっきり整理されていないので、実際に開発していてかなり戸惑いやすいエラーのひとつです。

ここでは私が実際に遭遇したパターンも含めて、FAILED_PRECONDITIONエラーのケース別の原因と解決策を整理しました。

FAILED_PRECONDITIONとは何か — 他のエラーとの違い

まず、混乱しやすい他のエラーコードと比較しておきます。

  • PERMISSION_DENIED(403):APIキーや認証情報そのものが無効か、権限が不足している
  • RESOURCE_EXHAUSTED(429):クォータやレート制限に達した
  • NOT_FOUND(404):モデルやリソースが存在しない
  • FAILED_PRECONDITION(400):認証は通っているが、今の状態では実行できない

FAILED_PRECONDITIONは「あなた自身は問題ないけれど、実行する前提となる状態が整っていない」というニュアンスです。HTTPステータスコードは400で、INVALID_ARGUMENT(無効な引数)とは別物です。

このエラーが返ってくる主なケースは4つあります。

ケース1:課金アカウントが設定されていない

Gemini APIには無料枠がありますが、無料枠でもGoogle Cloudプロジェクトに課金アカウントが紐づいていることを要求するケースがあります。特に以下の状況でこのエラーが出やすいです。

  • 新規で作成したGoogle Cloudプロジェクトをそのまま使っている
  • 無料トライアル期間が終了した
  • AI Studio側のAPIキーを流用しているが、対応するGCPプロジェクトに課金設定がない

診断方法

import google.generativeai as genai
 
try:
    genai.configure(api_key="YOUR_API_KEY")
    model = genai.GenerativeModel("gemini-2.5-pro")
    response = model.generate_content("Hello")
    print(response.text)
except Exception as e:
    # エラーの詳細を確認する
    print(f"Error type: {type(e).__name__}")
    print(f"Error message: {str(e)}")
    # "Billing account not found" が含まれていればケース1
    if "billing" in str(e).lower():
        print("→ 課金設定の問題です")

解決方法

  1. Google Cloud Console にアクセス
  2. 「お支払い」→ 「課金アカウントをリンク」
  3. 課金アカウントがない場合は新規作成(クレジットカード登録が必要)

Google AI StudioのAPIキーを使っている場合、課金設定はGoogle AI Studio側から「Get API key」→ 該当プロジェクトの設定で確認できます。

ケース2:Gemini APIが有効化されていない

Google Cloudプロジェクトを使っている場合、APIは個別に「有効化」する操作が必要です。課金設定が完了していても、APIが有効でなければFAILED_PRECONDITIONが返ることがあります。

# Cloud SDKでAPIの有効化状態を確認
gcloud services list --enabled | grep generativelanguage
 
# 有効化されていない場合
gcloud services enable generativelanguage.googleapis.com

Vertex AI経由で使っている場合はさらに:

# Vertex AI APIも有効化が必要
gcloud services enable aiplatform.googleapis.com

Vertex AI特有のエラーとして、FAILED_PRECONDITION: The Vertex AI API is not enabled for this project というメッセージが出ることもあります。こちらはほぼこのケースです。

ケース3:コンテキストキャッシュの前提条件違反

Gemini APIのコンテキストキャッシュ機能(Context Caching)を使っているときにFAILED_PRECONDITIONが出る場合、以下のいずれかが原因です。

最小トークン数の不足

コンテキストキャッシュは、最低でも32,768トークン(約5万文字)以上のコンテンツに対してのみ有効です。それ以下のコンテンツをキャッシュしようとするとエラーになります。

import google.generativeai as genai
 
# ❌ 短すぎるコンテンツはキャッシュ不可
short_content = "これは短いシステム指示です。"  # 数十トークン
 
try:
    cache = genai.caching.CachedContent.create(
        model="gemini-2.5-pro",
        system_instruction=short_content,  # 32,768トークン未満でエラー
    )
except Exception as e:
    print(e)  # FAILED_PRECONDITION: ...minimum token count...
 
# ✅ 十分なコンテンツ量を確保する
# 実用的にはPDFや長文ドキュメントに使うのがコンテキストキャッシュの正しい用途

キャッシュの有効期限切れ

FAILED_PRECONDITION: The cached content has expired. というメッセージが出た場合、参照しているキャッシュがTTL(有効期間)を過ぎて削除されています。

import google.generativeai as genai
from datetime import datetime
 
def get_or_recreate_cache(cache_name, model, content, ttl_seconds=3600):
    """キャッシュが期限切れなら再作成するユーティリティ"""
    try:
        # 既存のキャッシュを参照してリクエスト
        model_with_cache = genai.GenerativeModel.from_cached_content(
            cached_content=cache_name
        )
        response = model_with_cache.generate_content("質問")
        return response
    except Exception as e:
        if "expired" in str(e).lower() or "FAILED_PRECONDITION" in str(e):
            print("キャッシュが期限切れです。再作成します...")
            # キャッシュを再作成
            new_cache = genai.caching.CachedContent.create(
                model=model,
                contents=content,
                ttl={"seconds": ttl_seconds}
            )
            model_with_cache = genai.GenerativeModel.from_cached_content(
                cached_content=new_cache
            )
            return model_with_cache.generate_content("質問")
        raise  # その他のエラーは再スロー

デフォルトのTTLは1時間です。長時間のバッチ処理でキャッシュを使い回す場合は、明示的にTTLを延長するか、処理途中でキャッシュを再作成するロジックが必要です。

ケース4:プレビューモデルへのアクセス権限がない

Gemini 3.xの一部モデルはプレビュー段階で、特定の条件を満たしたGoogleアカウント・プロジェクトのみが利用できます。通常のAPIキーでアクセスしようとするとFAILED_PRECONDITIONが返ることがあります。

FAILED_PRECONDITION: This model is not available for general access. 
Please contact Google for access.

この場合の確認手順です。

  1. Google AI Studioでモデルが選択可能か確認
  2. AI Studioで動くがAPIで動かない場合、APIキーのプロジェクトと Studio のプロジェクトが異なる可能性
  3. Vertex AI経由での利用を検討(Enterprise契約ではアクセスできるモデルが増えることがある)

エラーハンドリングのベストプラクティス

FAILED_PRECONDITIONは設定の問題なので、リトライしても解決しません。ただ、コンテキストキャッシュの期限切れなど「状態依存」のエラーは再試行が有効な場合もあります。

import google.generativeai as genai
from google.api_core import exceptions as google_exceptions
import time
 
def call_gemini_with_error_handling(prompt: str, max_retries: int = 1) -> str:
    """
    FAILED_PRECONDITIONを適切にハンドリングするラッパー
    - 課金・API有効化のエラー: 即座に終了(リトライ不可)
    - キャッシュ期限切れ: 再試行ロジックを別途実装
    - その他: エラーメッセージをログに残す
    """
    genai.configure(api_key="YOUR_API_KEY")
    model = genai.GenerativeModel("gemini-2.5-pro")
    
    for attempt in range(max_retries + 1):
        try:
            response = model.generate_content(prompt)
            return response.text
            
        except google_exceptions.FailedPrecondition as e:
            error_msg = str(e)
            
            # 課金・API設定の問題 → リトライ不要
            if any(keyword in error_msg.lower() for keyword in 
                   ["billing", "not enabled", "not available for general access"]):
                raise RuntimeError(
                    f"設定の問題です(リトライ不可): {error_msg}\n"
                    "Google Cloud Console で課金設定とAPIの有効化を確認してください。"
                ) from e
            
            # キャッシュ期限切れ → 上位ロジックで再作成が必要
            if "expired" in error_msg.lower():
                raise RuntimeError(
                    "コンテキストキャッシュが期限切れです。キャッシュを再作成してください。"
                ) from e
            
            # その他のFAILED_PRECONDITION
            if attempt < max_retries:
                print(f"予期しないFAILED_PRECONDITION: {error_msg}")
                print(f"30秒後にリトライします... ({attempt + 1}/{max_retries})")
                time.sleep(30)
            else:
                raise
    
    return ""  # 到達しない(型チェック用)

診断チェックリスト

FAILED_PRECONDITIONが出たときは、まず以下を順番に確認するのが最速です。

エラーメッセージに billing が含まれる場合は課金設定の問題、expired が含まれる場合はキャッシュの期限切れ、not enabled が含まれる場合はAPI有効化の問題、not availablegeneral access が含まれる場合はモデルへのアクセス権限の問題です。

エラーメッセージに該当するキーワードがなく、状況が判断しにくい場合は、Gemini APIエラーのリファレンス集でエラーコードから原因を逆引きするのも有効です。

また、認証関連のエラーと混同しやすい場合はGemini API認証エラーの解決ガイドも合わせて参照してください。

全体を振り返って — 次に取るべきアクション

FAILED_PRECONDITIONはリトライで解決するエラーではなく、設定や状態を修正することで解消します。

今日すぐにできることとして、まずエラーメッセージを正確に読んで、課金・API有効化・キャッシュ・モデルアクセスのどのケースに該当するかを判断してみてください。エラーメッセージを丁寧に見るだけで、大抵は原因が絞り込めます。

コンテキストキャッシュを使っている場合は、長時間処理でのキャッシュ期限切れが起きないよう、あらかじめ再作成ロジックを組み込んでおくことをおすすめします。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

API / SDK2026-06-21
Gemini API implicit caching が効かない・課金がおかしい — 原因別トラブルシューティング
Gemini API の implicit caching が効かない、キャッシュヒット率が低い、コスト削減を期待したのに請求が変わらないといった問題を、原因別に整理して解決策をコード付きで紹介します。
API / SDK2026-05-14
Gemini Code Execution で詰まった3パターン — import エラー・タイムアウト・出力が空になるときの対処法
Gemini APIのCode Execution機能でよく出るエラーを実例で解説。importエラー・タイムアウト・出力が空になる3パターンの原因と修正コードを紹介します。
API / SDK2026-04-01
Gemini API の料金・課金の仕組み【2026年版】:無料枠からトークン課金まで
Gemini API の無料枠・有料プランの料金体系をわかりやすく解説。トークン課金の仕組み、モデル別料金比較、コスト試算方法、支出上限設定まで初心者にもわかる2026年最新ガイド。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →