本稿では、Googleの強力な生成AIモデルであるGemini API、特にAI Studio経由で取得したAPIキーを用いてREST APIを直接呼び出す際のセットアップ手順と、開発者が直面しがちなエラー、そしてその具体的な解決策について詳述するものである。
Step 1: APIキーの選択 – AI Studioキー vs GCPキー
まず理解すべきは、Gemini APIを利用するためのキーには大きく分けて2種類が存在する点である。
- Google AI Studio キー:
https://ai.google.dev/で発行されるキーである。- 主にSDK(例:
google.generativaiライブラリ)での利用を想定しており、REST API (generativelanguage.googleapis.com) をAPIキー認証 (?key=...またはX-goog-api-keyヘッダー) で直接呼び出す場合に適している。 - 利用には課金アカウントのリンクによる有効化が必要となる場合がある。
- Google Cloud Platform (GCP) キー:
https://console.cloud.google.com/で発行されるキーである。- GCPの各種サービス(Vertex AI APIなど)と連携する本番環境向けのキーであり、有効な課金アカウントが必須である。
- Vertex AI API (
aiplatform.googleapis.com) を呼び出す際は、APIキー認証ではなく**OAuth 2.0 (Bearer トークン)**による認証が必要となる。
本稿で解説するPythonコードのように、generativelanguage.googleapis.comエンドポイントをAPIキー認証で直接叩く場合は、Google AI Studioで発行したキーを使用するのが正しいアプローチである。GCPキーでこのエンドポイントを呼び出すと 404 Not Found (権限なし) エラーが発生する。
Step 2: AI Studioでのキー発行と有効化 (アクティベーション)
Google AI Studio (https://ai.google.dev/) にアクセスし、新しいプロジェクトを作成してAPIキーを発行する。
重要: キー発行直後、キー一覧画面で「お支払い情報を設定」というリンクが表示される場合がある。これはキーがまだ有効化されていない状態を示す。このリンクをクリックし、既存のGoogle Cloud課金アカウント(GCPプロジェクトで使用しているものと同じでよい)をリンクさせる必要がある。リンクが完了すると、表示が Tier 1 や 無料枠 に変わり、キーがアクティブになる。この有効化を行わないと、API呼び出し時に 400 Bad Request (API key expired) エラーが発生する。
Step 3: APIエンドポイントとモデル名の確認
config.py やコード本体で指定するAPIエンドポイントとモデル名は、極めて重要である。
- エンドポイント:
gemini-flash-latestのような最新モデル群は、多くの場合v1betaエンドポイントでのみ提供される。AI Studioキーを使用する場合、基本的には以下のエンドポイントを指定する。https://generativelanguage.googleapis.com/v1betaPythonコード内では、これに/models/{モデル名}:generateContentを付加して完全なURLを構築する。 - モデル名: 利用したいモデル名を正確に指定する必要がある。
gemini-1.5-flash-latestとgemini-flash-latestは異なるモデルとして扱われる。どちらが正しいかは、APIキーで利用可能なモデル一覧を確認するのが最も確実である。以下のcurlコマンドで確認できる ([YOUR_API_KEY]は自身のAI Studioキーに置き換える)。Bashcurl "https://generativelanguage.googleapis.com/v1beta/models" ^ -H "Content-Type: application/json" ^ -H "X-goog-api-key: [YOUR_API_KEY]"実行結果のJSONから、"name": "models/..."の部分を確認し、generateContentメソッドをサポートしているモデル名(例:gemini-flash-latest)を特定する。
Step 4: よくあるエラーとその原因・解決策
セットアップ中に遭遇しやすいHTTPエラーコードとその原因を解説する。
404 Not Found
- 原因1: APIキーの種類とURLのミスマッチ。GCPキーで
generativelanguageURLを呼び出している、またはその逆。 → 解決策: Step 1に戻り、キーとURLの組み合わせを確認する。AI StudioキーにはgenerativelanguageURLを使用する。 - 原因2: モデル名が不正。指定したモデル名(例:
gemini-1.5-flash-latest)が、APIキーで利用可能なモデル一覧に存在しない。 → 解決策: Step 3のcurlコマンドで正しいモデル名を確認し、config.py等を修正する。 - 原因3: APIが有効になっていない。GCPプロジェクト側で「Generative Language API」が有効化されていない。 → 解決策: GCP ConsoleでAPIを有効化する。
- 原因4: APIキーの制限。GCP/AI Studioのキー設定で、IPアドレス制限やAPI制限がかかっており、アクセスが拒否されている。 → 解決策: キー設定を見直し、制限を解除または正しく設定する。
- 原因5: 設定変更の反映遅延。GCP ConsoleやAI Studioでの設定変更(API有効化、キー制限解除、課金リンク)がシステム全体に反映されるまで最大5分程度かかることがある。 → 解決策: 設定変更後、5分以上待ってから再試行する。
400 Bad Request
- 原因1: APIキーが有効化されていない/期限切れ。AI Studioキー発行後、「お支払い情報を設定」リンクを解消していない。 → 解決策: Step 2に戻り、キーを有効化し、5分待つ。
curlでAPI key expiredメッセージを確認する。- 原因2: ペイロード(JSONリクエスト本体)の形式が不正。
v1エンドポイントにv1beta専用のパラメータ(例:responseMimeType)を含めている、またはその逆。 → 解決策: Step 3で確認した正しいエンドポイント(通常v1beta)と、それに合致したペイロード構造を使用する。 - 原因3: 出力トークン数不足 (
finishReason: MAX_TOKENS)。APIに指定したmaxOutputTokensの値が小さすぎて、AIが応答を生成しきる前に上限に達した。 → 解決策: Pythonコードのpayload定義内でmaxOutputTokensの値を十分に大きくする(例:2048)。
- 原因2: ペイロード(JSONリクエスト本体)の形式が不正。
Step 5: curlによる直接テストの重要性
問題が発生した場合、Pythonコードの問題か、APIキー/エンドポイントの問題かを切り分けるために、curlコマンドによる直接テストは非常に有効である。
Bash
curl "https://generativelanguage.googleapis.com/v1beta/models/[モデル名]:generateContent" ^
-H "Content-Type: application/json" ^
-H "X-goog-api-key: [AI Studioキー]" ^
-X POST ^
-d "{'contents': [{'parts': [{'text': 'Hello'}]}]}"
このコマンドが成功すれば、APIキーとモデル名は正しく、問題はPythonコード側(URLの組み立て方、ペイロード、config.pyの読み込み等)にあると判断できる。コマンド自体がエラーを返す場合は、APIキーの有効性、モデル名、エンドポイント設定を再確認する必要がある。
Conclusion
Google Gemini APIは非常に強力なツールであるが、そのセットアップ、特にAPIキーの種類、エンドポイント、モデル名の正確な指定には注意が必要である。本稿で示した手順とエラー解決策が、開発者各位の一助となれば幸いである。正確な情報に基づき、慎重に設定を進めることが成功の鍵となる。
参考までに、2025年10月時点のAPIで呼び出せる正しいGeminiモデル名を記載しておく。
Gemini モデル:
gemini-2.5-pro-preview-03-25gemini-2.5-flash-preview-05-20gemini-2.5-flashgemini-2.5-flash-lite-preview-06-17gemini-2.5-pro-preview-05-06gemini-2.5-pro-preview-06-05gemini-2.5-progemini-2.0-flash-expgemini-2.0-flashgemini-2.0-flash-001gemini-2.0-flash-exp-image-generation(画像生成も含む)gemini-2.0-flash-lite-001gemini-2.0-flash-litegemini-2.0-flash-preview-image-generation(画像生成も含む)gemini-2.0-flash-lite-preview-02-05gemini-2.0-flash-lite-previewgemini-2.0-pro-expgemini-2.0-pro-exp-02-05gemini-exp-1206gemini-2.0-flash-thinking-exp-01-21(= gemini-2.5-flash-preview-05-20)gemini-2.0-flash-thinking-exp(= gemini-2.5-flash-preview-05-20)gemini-2.0-flash-thinking-exp-1219(= gemini-2.5-flash-preview-05-20)gemini-2.5-flash-preview-tts(TTS=Text-to-Speech)gemini-2.5-pro-preview-tts(TTS=Text-to-Speech)gemini-flash-latest(現在成功しているモデル)gemini-flash-lite-latestgemini-pro-latestgemini-2.5-flash-litegemini-2.5-flash-image-preview(画像生成も含む)gemini-2.5-flash-image(画像生成も含む)gemini-2.5-flash-preview-09-2025gemini-2.5-flash-lite-preview-09-2025gemini-robotics-er-1.5-previewgemini-2.5-computer-use-preview-10-2025
LearnLM モデル:
learnlm-2.0-flash-experimental
Gemma モデル:
gemma-3-1b-itgemma-3-4b-itgemma-3-12b-itgemma-3-27b-itgemma-3n-e4b-itgemma-3n-e2b-it
重要な点:
gemini-1.5-flash-latestは含まれていないので注意。