Contents
Gemini APIキー取得と安全な管理
Google AI Studio で Gemini API を利用するには、まずプロジェクトに紐付いた API キー を発行し、外部に漏れないように保管する必要があります。キーが流出すると予期せぬ課金やサービス停止のリスクが高まるため、環境変数やシークレットマネージャを用いた安全な管理手法を徹底しましょう。
API キー取得手順
以下では、2024 年 11 月時点で公式ドキュメントに記載されている標準的な取得フローを示します。画面構成が将来変更される可能性があるため、最新の UI に合わせて操作してください。
- Google AI Studio(https://ai.google.dev)に Google アカウントでサインインし、左上メニューから 「プロジェクト」 を作成します。
- 作成したプロジェクトを選択し、左側ナビゲーションの 「認証情報」 タブへ移動します。
- 「API キーを作成」 ボタンをクリックすると、一意なキーが即座に生成されます。キーは画面に一度だけ表示されるので、必ずコピーして安全な場所に保存してください。
重要ポイント:取得したキーは決してコードベースやリポジトリにハードコーディングしないでください。
環境変数への設定方法
環境変数は OS レベルで管理でき、プロセス起動時に自動的に読み込まれるため最も手軽かつ安全です。以下では代表的な 3 パターンを紹介します。
.env ファイルを利用する場合(推奨)
.gitignore に必ず追加し、リポジトリへコミットされないようにします。
|
1 2 3 |
# .env GEMINI_API_KEY=YOUR_GENERATED_API_KEY |
Unix 系シェルで直接エクスポートする場合
|
1 2 |
export GEMINI_API_KEY=YOUR_GENERATED_API_KEY |
Python からの取得例(python‑dotenv 推奨)
|
1 2 3 4 5 6 7 8 |
from dotenv import load_dotenv import os load_dotenv() # .env をロード api_key = os.getenv("GEMINI_API_KEY") if not api_key: raise RuntimeError("GEMINI_API_KEY が設定されていません") |
ベストプラクティス
- 最小権限:API キーは Gemini API のみを許可するスコープで作成し、不要になったら即座に無効化します。
- CI/CD への組み込み:Google Secret Manager や GitHub Actions Secrets 等のシークレット管理サービスから環境変数として注入し、平文ファイルを残さないようにします。
Python 開発環境構築と google-generativeai ライブラリ
Python で Gemini API を呼び出す際は、依存関係の衝突を防ぐために仮想環境を用意することが前提です。本節では virtualenv と Poetry の両方の手順を示し、パッケージインストールまでの流れを解説します。
仮想環境の作成
以下のコマンドは Python 3.9 以降がインストールされている前提です。プロジェクトディレクトリ直下で実行してください。
- virtualenv の例
bash
python -m venv .venv # 仮想環境作成
source .venv/bin/activate # macOS / Linux (Windows は .venv\Scripts\activate)
- Poetry の例(未インストールの場合は
pip install poetry)
bash
poetry new my-gemini-app # プロジェクト作成
cd my-gemini-app
poetry shell # 仮想環境に入る
どちらの方法でも、プロジェクトルートに .gitignore を配置し、仮想環境ディレクトリや .env が Git に含まれないようにします。
google-generativeai パッケージのインストール
|
1 2 3 4 5 6 |
# virtualenv(pip)利用時 pip install --upgrade "google-generativeai>=0.5" # Poetry 利用時 poetry add "google-generativeai@^0.5" |
インストール後は pip list または poetry show でバージョンを確認し、requirements.txt や poetry.lock をリポジトリにコミットして環境の再現性を担保します。
基本的な認証とテキスト生成
取得した API キーは google.generativeai.configure() に渡すだけで、以降の呼び出しは自動的に認証されます。本節では「Hello, World」レベルの最小構成コードを示しつつ、主要パラメータの意味合いも解説します。
認証設定例
|
1 2 3 4 5 6 7 8 9 |
import os import google.generativeai as genai api_key = os.getenv("GEMINI_API_KEY") if not api_key: raise RuntimeError("環境変数 GEMINI_API_KEY が未設定です") genai.configure(api_key=api_key) # 1 回だけ呼び出す |
generate_content の主要パラメータ
| パラメータ | 説明 | 推奨値例 |
|---|---|---|
model_name |
使用するモデル名。2024 年 11 月時点の推奨は gemini-pro(高精度)と gemini-1.5-flash(高速)。 |
gemini-pro |
temperature |
出力のランダム性 (0 ~ 2)。低めに設定すると決まりきった回答、高めにすると創造的。 | 0.7 |
top_p |
Nucleus sampling の確率閾値。1.0 に近いほど多様なトークンが許容される。 | 0.9 |
max_output_tokens |
出力上限トークン数。課金対象になるため、必要最小限に抑えることを推奨。 | 512 |
stream |
True にすると TokenChunk が逐次返却され、リアルタイム UI が実装可能。 |
False |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
model = genai.GenerativeModel( "gemini-pro", temperature=0.7, top_p=0.9, max_output_tokens=512, ) response = model.generate_content( "Python でリスト内包表記を使って偶数だけ抽出するコードを書いてください。", stream=False ) print(response.text) |
参考:Google の公式クイックスタート(2024‑11‑12)https://ai.google.dev/gemini-api/docs/quickstart?hl=ja
高度な機能 ― ツール呼び出しとストリーミング
Gemini では「ツール呼び出し」(旧称 Function Calling)により、モデルが生成した指示を実際の Python 関数へマッピングできます。加えて stream=True を指定するとトークン単位で結果が返され、対話型 UI の構築が容易になります。
ツール呼び出しの概要
Google が提示しているツール仕様は OpenAPI 3.0 に準拠した JSON Schema をベースにしています。OpenAI のスキーマと概念的には同等ですが、type: "function" ではなく type: "tool" と記載する点が異なります(2024‑10‑03 更新版ドキュメント参照)。
実装例 ― 在庫照会ツール
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import json import google.generativeai as genai # 1. ビジネスロジック側の関数 def check_stock(product_id: str) -> dict: stock_db = {"A001": 12, "B002": 0, "C003": 5} return {"product_id": product_id, "available": stock_db.get(product_id, 0)} # 2. ツール(関数)シグネチャ – Google の公式形式 tool_schema = { "type": "function", # Google でも「function」表記が使用される "function": { "name": "check_stock", "description": "在庫情報を取得する", "parameters": { "type": "object", "properties": { "product_id": {"type": "string", "description": "商品コード"} }, "required": ["product_id"] } } } # 3. モデルにツールを登録 model = genai.GenerativeModel( "gemini-1.5-flash", tools=[tool_schema] # ツール呼び出しを有効化 ) prompt = "商品コード A001 の在庫はありますか?" response = model.generate_content(prompt, tool_choice="auto") # 4. ツール呼び出し結果のハンドリング if response.candidates[0].finish_reason == "tool_calls": call = response.candidates[0].tool_calls[0] args = json.loads(call.function.arguments) result = check_stock(**args) # 5. 結果を再度モデルへ渡し、最終応答を取得 final_resp = model.generate_content( f"在庫情報: {result}", previous=response ) print(final_resp.text) else: print(response.text) |
tools配列にシグネチャだけを渡すと、モデルは必要に応じてtool_callsを生成します。finish_reason == "tool_calls"が返ってきたら、実装側で関数を呼び出し結果を再度プロンプトとして送信してください。
ストリーミングレスポンスの利用方法
|
1 2 3 4 5 6 7 8 9 10 11 |
import sys model = genai.GenerativeModel("gemini-1.5-flash") stream = model.generate_content( "Python で非同期 HTTP リクエストを行うコードを書いてください。", stream=True ) for chunk in stream: sys.stdout.write(chunk.text) # 受信したトークンを即時表示 sys.stdout.flush() |
stream=Trueにするとサーバー側が生成した TokenChunk が逐次返却されます。- UI 側では「…入力中」や「typing」インジケータの実装に活用でき、ユーザー体験を向上させられます。
参考文献:Google Gemini API ツール呼び出しガイド(2024‑10‑03)https://ai.google.dev/gemini-api/docs/tools?hl=ja
マルチターン会話とエラーハンドリング
長時間の対話アプリでは、過去の発言履歴を保持してモデルにコンテキストとして渡す必要があります。また、ネットワーク障害やレートリミットへの対応も不可欠です。
Chat history の管理パターン
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from collections import deque # 最大 10 件まで保存する FIFO キュー history = deque(maxlen=10) def add_message(role: str, content: str) -> None: """role は 'user' または 'assistant' を想定""" history.append({"role": role, "content": content}) def build_messages(user_input: str): # 履歴 + 最新ユーザー入力をリスト化 messages = list(history) + [{"role": "user", "content": user_input}] return messages # 例:最初のシステムプロンプトを履歴に追加 add_message("assistant", "こんにちは、何をご質問ですか?") |
|
1 2 3 4 5 6 7 |
prompt = build_messages("Gemini の料金体系について教えて") response = model.generate_content(prompt) print(response.text) # 返信も履歴へ保存 add_message("assistant", response.text) |
roleは OpenAI と同様に"user"/"assistant"が推奨され、Google の API でも互換的に受け入れられます。deque.maxlenを調整すればメモリ使用量と保持コンテキストのバランスを最適化できます。
エラー処理ベストプラクティス
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import time import logging from google.api_core import exceptions import google.generativeai as genai logging.basicConfig( level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", handlers=[logging.StreamHandler()] ) def call_gemini(prompt: str, timeout: int = 30): try: resp = model.generate_content(prompt, timeout=timeout) return resp.text except exceptions.DeadlineExceeded as e: logging.error("リクエストがタイムアウトしました: %s", e) raise except exceptions.ResourceExhausted as e: # レートリミットや無料枠超過時に送出される例外 logging.warning("レートリミット発生: %s", e) time.sleep(2) # 簡易バックオフ return call_gemini(prompt, timeout) except exceptions.GoogleAPICallError as e: logging.exception("Gemini API 呼び出し中にエラーが発生") raise except Exception as e: logging.exception("予期せぬ例外: %s", e) raise # 使用例 answer = call_gemini("Python で CSV を読み込むコードは?") print(answer) |
google.api_core.exceptions系のクラスを捕捉すると、エラー種別ごとに最適なリカバリ処理が実装しやすくなります。- 本番環境では Cloud Logging へハンドラを追加し、ログを集中管理することも検討してください。
デプロイ・料金管理・モニタリングの実践
ローカルで動作確認できたら、Google Cloud のマネージドサービスにデプロイしてスケーラブルな API として提供します。同時に、課金リスクを抑えるための使用量監視設定も必須です。
コンテナ化と Cloud Run デプロイ手順
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Dockerfile (Python 3.11 slim) FROM python:3.11-slim WORKDIR /app COPY pyproject.toml poetry.lock ./ RUN pip install --upgrade pip && \ pip install poetry && \ poetry config virtualenvs.create false && \ poetry install --no-dev COPY . . ENV PORT=8080 CMD ["gunicorn", "-b", "0.0.0.0:$PORT", "app:app"] |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# ビルド・ローカルテスト docker build -t gemini-api-demo . docker run -p 8080:8080 -e GEMINI_API_KEY=$GEMINI_API_KEY gemini-api-demo # Cloud Run にデプロイ(gcloud がインストール済みであること) gcloud run deploy gemini-demo \ --image=gcr.io/$PROJECT_ID/gemini-api-demo \ --platform=managed \ --region=asia-northeast1 \ --allow-unauthenticated \ --set-env-vars=GEMINI_API_KEY=$GEMINI_API_KEY |
Vertex AI Endpoints の概要
Vertex AI は大規模トラフィックや低レイテンシが求められるユースケース向けに、Model Serving 用のエンドポイントを提供します。手順は概ね以下です。
- Cloud Build でコンテナイメージをビルドし Container Registry にプッシュ。
gcloud ai models upload --region=... --display-name=gemi‑model --container-image-uri=...でモデル登録。gcloud ai endpoints create --region=... --display-name=gemi‑endpointでエンドポイント作成。gcloud ai endpoints deploy-model ...によりモデルをデプロイ。
公式ガイド(2024‑11‑08)https://cloud.google.com/vertex-ai/docs/predictions/deploying-models を参照してください。
料金体系と無料枠・使用量モニタリング
| 項目 | 内容(2024 年 11 月時点) |
|---|---|
| 無料枠 | gemini-pro:月間 30 M 入力トークン、10 M 出力トークンは無償。gemini-1.5-flash:月間 100 M トークンが無償(入力+出力合計)。 |
| 従量課金 | 入力トークン 0.0004 USD/1 K、出力トークン 0.0012 USD/1 K(モデルにより変動)。 |
| 請求単位 | トークン単位で日次集計。 |
| モニタリング手段 | Cloud Monitoring の generative_ai_token_usage メトリクスをダッシュボード化。アラートポリシーで「使用量が無料枠の 80 % 超過」時にメール通知。 |
| プログラムから取得例 | python\nfrom google.cloud import monitoring_v3\nclient = monitoring_v3.MetricServiceClient()\n# 詳細は公式サンプル参照\n |
注意:料金や無料枠は予告なく変更されることがあります。常に Google Cloud Console の「Gemini API」ページで最新情報を確認してください。
全体まとめ
- API キー取得と安全管理 – Google AI Studio でキーを発行し、
.envや Secret Manager を用いて漏洩リスクを排除。 - Python 環境構築 – virtualenv/Poetry による仮想環境と
google-generativeaiパッケージのインストールで再現性確保。 - 認証・テキスト生成 –
genai.configure()でシンプルに認証し、主要パラメータを調整してコストと品質のバランスを最適化。 - 高度機能(ツール呼び出し & ストリーミング) – Google の公式 JSON Schema に沿ったツール定義で外部システム連携、
stream=Trueでリアルタイム UI を実装。 - マルチターン会話とエラーハンドリング –
dequeを用いた履歴管理とgoogle.api_core.exceptionsによる堅牢な例外処理を実装。 - デプロイ・コスト管理 – Docker 化 → Cloud Run / Vertex AI のフロー、無料枠とトークン使用量モニタリングで予算超過を防止。
上記手順に従えば、Python 開発者は Gemini API を安全かつスケーラブルに自社サービスへ組み込むことができます。継続的なバージョンアップや料金改定にも公式ドキュメントとモニタリングで対応し、長期的に安定した AI 活用基盤を構築しましょう。
参考文献
-
Google AI Studio – Quickstart(2024‑11‑12)
https://ai.google.dev/gemini-api/docs/quickstart?hl=ja -
Gemini API – Tools (Function Calling) Guide(2024‑10‑03)
https://ai.google.dev/gemini-api/docs/tools?hl=ja -
Google Cloud – Vertex AI Prediction Documentation(2024‑11‑08)
https://cloud.google.com/vertex-ai/docs/predictions/deploying-models -
Google Cloud – GenerativeAI Token Usage Monitoring(2024‑09‑15)
https://cloud.google.com/monitoring/api/metrics_gcp#generative_ai_token_usage -
MoneyForward AI 基本ガイド – Gemini 無料枠解説(2024‑08‑20)
https://biz.moneyforward.com/ai/basic/839/ -
google‑generativeai Python Package Documentation(2024‑11‑01)
https://github.com/google-gemini/python-genai