すべての記事へ戻る
ガイド

OpenAI SDKでGemini APIを呼び出す:base_url、API Key、モデル名だけを変更する移行チュートリアル

2026年6月14日 · 9分で読めます · Claude / GPT / Gemini

アイボリーの背景に描かれた開発者向け移行イメージ:左側にOpenAI SDKのコードウィンドウ、右側にGemini APIエンドポイントのカード、中央の3本のテラコッタ色の線にはそれぞれbase_url、API Key、modelと記され、チャコールグレーの小さなアイコンでPythonとTypeScriptを表している

2026-06-14 時点で、Google の Gemini OpenAI compatibility ドキュメントは非常に明快です。既存の Python または TypeScript の OpenAI ライブラリコードは、API Key、base_url、モデル名を変更するだけで Gemini に接続できます。ドキュメントのサンプルモデルは gemini-3.5-flash で、互換ページの最終更新日は 2026-05-18 です(Google AI for Developers)。これは「アダプター層の魔法」ではなく、OpenAI SDK のリクエストを Google が提供する互換エンドポイントへ送るだけです。

アイボリーの背景に描かれた3ステップの移行フロー図。左から右へ、テラコッタ色の3つのステップカード:GEMINI_API_KEY の置き換え、base_url の置き換え、model の置き換え。下部はチャコールグレーの細線で Python、TypeScript、REST の3つの入口を接続

まず SDK をインストールし、呼び出し方は変えない

プロジェクトですでに公式 OpenAI Python SDK を使っているなら、chat.completions.create() はそのままで構いません。OpenAI の Python SDK リポジトリは今も公式クライアントの提供元であり(openai-python)、Google の互換インターフェースもこの呼び出し形式を受け付けます。

from openai import OpenAI

client = OpenAI(
    api_key="GEMINI_API_KEY",
    base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
)

resp = client.chat.completions.create(
    model="gemini-3.5-flash",
    messages=[
        {"role": "system", "content": "You are a concise code reviewer."},
        {"role": "user", "content": "Review this Python function for edge cases."},
    ],
)

print(resp.choices[0].message.content)

API Key は Google AI Studio で作成します(AI Studio API key)。末尾のスラッシュに注意してください:/v1beta/openai/ であり、通常の Gemini ネイティブ API の /v1beta/models/... ではありません。

REST でも OpenAI 形式で叩ける

サーバー側、curl によるデバッグ、ゲートウェイのヘルスチェックでは、必ずしも SDK は必要ありません。Google の互換ドキュメントに記載されている REST パスは /openai/chat/completions です。

curl "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $GEMINI_API_KEY" \
  -d '{
    "model": "gemini-3.5-flash",
    "messages": [
      {"role": "user", "content": "Give me a 5-point migration checklist."}
    ]
  }'

移行時はまずこのコマンドを実行しましょう。Key、モデル名、ネットワーク出口、課金権限という4種類の問題を切り分けられるため、業務サービス内で直接 debug するより時間を節約できます。

reasoning_effort はどうマッピングされるか

Gemini の thinking 制御と OpenAI の reasoning_effort には重なる部分がありますが、Google は両方を同時に渡さないよう明記しています。互換レイヤーは OpenAI 形式のパラメータを Gemini の thinking パラメータへマッピングします(Google OpenAI compatibility)。

OpenAI reasoning_effort Gemini 3 thinking_level Gemini 2.5 thinking_budget
minimal minimal または low 1024
low low 1024
medium medium 8192
high high 24576

保守的に移行するなら、まず reasoning_effort は渡さず、モデルのデフォルト値に任せます。コストを制御したい場合は、長いコンテキストのタスクに low を付け、そのうえで出力品質と token の請求を観察します。

横長のパラメータマッピング表を可視化したイラスト。左側のチャコールグレーの列は OpenAI reasoning_effort の4段階、右側のテラコッタ色の列は Gemini thinking_level と thinking_budget。中央の細線でそれぞれを対応付け

価格はモデル名だけで見ない

Google の公式価格ページでは、Gemini 2.5 Pro と Flash の標準価格が明確に示されています。単位は 100 万 token あたりで、出力価格には thinking tokens が含まれます(Gemini API pricing)。

モデル 入力価格 出力価格
gemini-2.5-pro、prompt ≤ 200k $1.25 $10.00
gemini-2.5-pro、prompt > 200k $2.50 $15.00
gemini-2.5-flash、テキスト/画像/動画入力 $0.30 $2.50
gemini-2.5-flash、音声入力 $1.00 $2.50

私のおすすめは、チャット、分類、軽量なコードタスクはまず Flash を使うことです。複雑な推論、長文ドキュメントの統合、コードリファクタリングでは Pro に切り替えます。Pro の 200k prompt しきい値は入力と出力の単価に直接影響するため、ログ、検索断片、重複した system prompt をまとめて詰め込まないようにしましょう。

移行チェックリスト

  1. OPENAI_API_KEYGEMINI_API_KEY に置き換え、AI Studio で生成する。
  2. base_urlhttps://generativelanguage.googleapis.com/v1beta/openai/ に変更する。
  3. モデル名を、たとえば gemini-3.5-flash のような互換 Gemini モデルに変更する。
  4. まず REST curl で疎通確認し、その後 SDK に戻す。
  5. カスタムの reasoning_effort はいったん停止し、品質を確認してから追加する。
  6. 入力、出力、thinking token のコストを記録する。特に Pro の 200k しきい値に注意する。

Claude/GPT にも接続したい場合

Gemini だけに接続するなら、Google 公式の互換エンドポイントを使うのが最もすっきりしています。しかしプロジェクト内で Claude、GPT、Gemini を同時に使う必要があると、複数の Key、複数の請求、複数の SDK が面倒になります。手間を省く方法は onehop です。OpenAI/Anthropic 互換で、base_urlhttps://api.onehop.ai/v1 に変更すれば、同じ OpenAI SDK で Claude/GPT/Gemini を呼び出せます。公式より低価格、新規アカウントに $10 付与、カード登録不要を売りにしています。

from openai import OpenAI

client = OpenAI(
    api_key="ONEHOP_API_KEY",
    base_url="https://api.onehop.ai/v1",
)

resp = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.5",
    messages=[{"role": "user", "content": "Refactor this API handler."}],
)
print(resp.choices[0].message.content)

いま多モデル接続をとにかく動かしたいだけなら、こちらを直接試せます:onehop で Claude などのモデルを呼び出す、または先に利用枠を受け取る:登録だけで $10 の体験クレジットを獲得。移行の鍵は、多くの抽象レイヤーを置き換えることではなく、変数を endpoint、key、model の3つに収束させることです。