Gemini API の gemini-2.5-flash と gemini-2.5-pro は、2026年12月1日から別のモデルへ自動で回されます。モデル名を書き換えなくてもリクエストは届きますが、答えるのは新しいモデルで、料金も新しいモデルの単価になります。Google は2026年11月2日に、Gemini API の更新履歴でこの予定を告知しました。

Google が AI Studio の利用者に送ったメールによると、1回だけ文章や画像を送って答えを受け取る使い方なら、そのまま動きます。困るのは、関数呼び出し(function calling)、自分で組み立てた会話の履歴、thinking_budget・temperature などの細かい設定を使うコードです。新しいモデルは受け付ける書き方が厳しく、HTTP 400 のエラーで止まったり、設定が黙って無視されたりします。この記事では、自分のコードが影響を受けるかを判定し、12月1日より前に移行する手順をまとめます(2026年11月7日確認)。

12月1日に起きること

gemini-2.5-flash

gemini-3.5-flash-lite

3.5 Flash-Lite の料金で課金

gemini-2.5-pro

gemini-3.8-flash

3.8 Flash の料金で課金

そのまま動く

1回で完結する文章・画像・動画・音声の依頼。gemini-2.5-flash-lite は今回の対象外。

直さないと壊れる・変わる

関数呼び出し(履歴を自分で組み立てる場合)、thinking_budget、temperature・top_p・top_k、末尾の model の番、candidate_count を 2 以上にした依頼。

1. 何が変わるか

Google の文書「Gemini deprecations」と更新履歴によると、2つのモデルの扱いは次のとおりです。どちらも Google AI Studio ではすでに選べなくなっていて、API で使えるのは、これまで実際に使っていた利用者だけです。

今のモデル12月1日からの行き先課金Google の移行ガイド
Flashgemini-2.5-flashgemini-3.5-flash-lite3.5 Flash-Lite の単価Migrate to gemini-3.5-flash-lite
Progemini-2.5-progemini-3.8-flash3.8 Flash の単価Migrate to gemini-3.8-flash

出典:Google「Gemini API の更新履歴」(November 2, 2026 の項)・「Gemini deprecations」(2026年11月7日確認)。2.5 Pro の行き先は Pro ではなく Flash の系列です。

名前が似ていても、次のモデルは12月1日の切り替えの対象ではありません。

モデル予定(Gemini deprecations の表)
gemini-2.5-flash-lite終了日の発表なし(当面は API で使える)
gemini-2.5-flash-image終了は早くて2027年3月15日。推奨の移行先は gemini-3.1-flash-lite-image
gemini-2.5-flash-preview-tts・gemini-2.5-pro-preview-tts終了は早くて2026年11月17日。推奨の移行先は gemini-3.8-flash-tts か gemini-3.8-flash-lite-tts

表の終了日は「早ければこの日」という意味で、正確な日は前もって知らせると Google は書いています。gemini-2.5-flash・gemini-2.5-pro の自動の切り替えは「December 1, 2026」と日付が決まっています。

  1. 2026年11月2日Google が告知更新履歴に掲載。AI Studio では選べなくなった。
  2. 今(2026年11月7日)移行の期間モデル名を新しいものに替えて、自分の予定で試せる。
  3. 2026年12月1日自動の切り替え古い名前のリクエストも新しいモデルが答え、新しいモデルの単価で課金される。
  4. 2026年12月31日まで → 2027年1月1日から3.8 Flash の導入価格が終わる2.5 Pro からの行き先の単価が上がる(4章)。

2. 自分のコードは影響を受けるか(判定の表)

新しい2つのモデルは、Gemini 3.6 Flash・3.5 Flash-Lite 以降に入った書き方の決まりに従います。Google の移行ガイドが挙げる違いを、コードの書き方ごとに並べると次のようになります。

コードの書き方12月1日以降やること
1回で完結する文章・画像・動画・音声の依頼そのまま動く(答えるモデルは変わる)答えの質と料金を新しいモデルで確かめる
関数呼び出しで、モデルの番を自分で作り直して履歴に入れているthought_signature が消え、モデルが前の推論を続けられない(エラーや想定外の動きになりうる)受け取った content をそのまま履歴に戻す(3-4)
FunctionResponse に id が無いGoogle の移行ガイドが必ず入れるよう求めているFunctionCall の id と name を入れる(3-4)
thinking_budget で考える量を決めている新しいモデルの設定は thinking_level。数値の指定は置き換えが必要thinking_level に替える(3-2)
考える量を指定していない2.5 Flash からの行き先は既定で minimal(ほぼ考えない)ツールや多段の処理なら medium 以上を指定
temperature・top_p・top_k を指定しているエラーにはならず無視される(答えの揺れ方が変わる)消して、出力の決まりは system instruction に書く(3-3)
最後の(空でない)番を model にする(答えの書き出しを先に埋める)HTTP 400 エラーsystem instruction か構造化出力に替える(3-5)
candidate_count を 2 以上にしているHTTP 400 エラー(Gemini 3 以降は非対応)消す。複数の案が要るなら複数回呼ぶ(3-5)

出典:Google「What's new in Gemini 3.6 Flash and 3.5 Flash-Lite」「What's new in Gemini 3.8 Flash」、Google が AI Studio の利用者に送ったメール(2026年11月3日)。candidate_count が 2 以上で HTTP 400 になることは Google のメールに、Gemini 3 以降で使えないことは移行ガイドにあります。関数呼び出しで id と name を揃えることは、移行ガイドとメールの両方にあります。3.8 Flash の移行ガイドは call_id と書いていますが、generateContent の FunctionResponse では項目名が id です(API の参照文書では省略できる項目)。

コードの中で当てはまる所は、文字列で探すと早く見つかります。Python と JavaScript の SDK、REST の JSON で名前の書き方が違う(thinking_budget と thinkingBudget など)ので、両方を拾う形にします。

# 対象のモデル名(2.5-flash-lite は除く)
grep -rnE "gemini-2\.5-(flash|pro)([^-]|$)" .

# 壊れる・無視される設定
grep -rnE "thinking_?[bB]udget|temperature|top_?[pPkK]|candidate_?[cC]ount" .

# 関数呼び出しの結果を返している所
grep -rnE "function_?[rR]esponse|FunctionResponse" .

モデル名を設定ファイルや環境変数に置いている場合は、そちらも探します。見つかった所が表のどの行に当たるかを決めれば、直す量が見えます。

3. 移行の手順

おすすめは、12月1日を待たずに自分でモデル名を新しいものに替え、試験を通してから本番へ出すことです。自動の切り替えに任せると、壊れた所が本番で一度に表に出ます。コード例は Google の Python SDK(google-genai)の generateContent で書いています。

  1. モデル名を替える:gemini-2.5-flash → gemini-3.5-flash-lite、gemini-2.5-pro → gemini-3.8-flash
  2. 考える量を thinking_level で指定する:thinking_budget を消し、処理に合う段階を選ぶ
  3. サンプリングの設定を消す:temperature・top_p・top_k
  4. 関数呼び出しの履歴を直す:thought_signature を残し、FunctionResponse に id と name
  5. 先埋めと candidate_count をやめる
  6. 重い入力で試してから広げる:ツールを何度も呼ぶ処理や長い会話で、エラー・答えの質・使ったトークン数を見る

3-1. モデル名を替える

名前を替えるのは1行ですが、同じ名前が複数の場所にあることが多いので、2章の検索で全部を拾ってから替えます。替えた時点で新しいモデルの単価になります。

3-2. thinking_budget を thinking_level に替える

Gemini 2.5 は、考えに使うトークンの量を thinking_budget の数で決めていました。新しいモデルでは、段階の名前で決める thinking_level に替わります。選べる段階と既定はモデルで違います。

モデル既定選べる段階
Flash の行き先gemini-3.5-flash-liteminimalminimal・low・medium・high
Pro の行き先gemini-3.8-flashmediumlow・medium・high(minimal はエラー)

出典:Google「Thinking」の表と各移行ガイド(2026年11月7日確認)。

気をつけたいのは 2.5 Flash からの行き先の既定が minimal であることです。2.5 Flash は既定で考えるモデルでしたが、3.5 Flash-Lite は何も書かなければほとんど考えません。Google の移行ガイドは、大量の抽出・振り分け・分類なら minimal のままでよく、ツールの呼び出し・コードの実行・多段の推論では medium か high にするよう勧めています。低い段階のままだと、ツールを使う処理が途中で終わってしまうことがあるためです。

from google import genai
from google.genai import types

client = genai.Client()

# 前:gemini-2.5-flash
# config=types.GenerateContentConfig(
#     temperature=0.2,
#     thinking_config=types.ThinkingConfig(thinking_budget=1024),
# )

# 後:gemini-3.5-flash-lite
response = client.models.generate_content(
    model="gemini-3.5-flash-lite",
    contents=prompt,
    config=types.GenerateContentConfig(
        system_instruction="出力は JSON だけにする。前置きを書かない。",
        thinking_config=types.ThinkingConfig(thinking_level="medium"),
    ),
)
print(response.text)

REST で JSON を直接送っている場合は、generationConfig.thinkingConfig の中を "thinkingBudget": 1024 から "thinkingLevel": "medium" に替えます。API の参照文書は、thinkingLevel を Gemini 3 以降の項目とし、それより前のモデルに送るとエラーになると書いています。モデル名と thinking_level は同じ変更で替えます。

2.5 で使っていた数値と段階の対応は、決まった表がありません。次の目安で始めて、答えの質と使ったトークン数で調整します。

2.5 での使い方3.5 Flash-Lite3.8 Flash
考えさせない・速さ優先(分類・抽出)minimal(既定)low
普通の質問・要約low か mediumlow か medium(既定)
ツールの呼び出し・コード・多段の推論medium か highmedium(既定)か high

目安の根拠は、Google の移行ガイドにある段階ごとの用途の説明です。考えに使ったトークンは出力の単価で課金されるので、段階を上げると料金も上がります。

3-3. temperature・top_p・top_k を消す

Google は Gemini 3.6 Flash と 3.5 Flash-Lite から、temperature・top_p・top_k を非推奨にしました。今の新しいモデルではエラーにならず無視され、Google は将来の世代では HTTP 400 エラーにすると書いています。エラーが出ないので気づきにくいのが厄介です。temperature を 0 にして答えを揃えていた処理は、揃わなくなるかもしれません。

Google の勧める代わりの方法は、出力の決まりを system instruction にはっきり書くことです(「出力は JSON だけ」「前置きを書かない」など)。形を厳密に揃えたいなら、構造化出力(JSON のスキーマを渡す機能)を使います。

Claude の API でも、新しいモデルで temperature の扱いが変わっています。考え方は「temperature is deprecated for this model の原因と直し方」が参考になります。

3-4. 関数呼び出しの履歴を直す

Gemini 3 のモデルは、答える前に考えた内容を暗号化した thought signature(考えた過程の署名)を応答に付けて返します。次のターンでこの署名が返ってこないと、モデルは前の推論の続きができません。generateContent では、署名は関数呼び出しなどのパーツの thoughtSignature に入っています。

壊れやすいのは、モデルの番を名前と引数だけで作り直して履歴に入れる書き方です。作り直すと署名が消えます。

# ❌ 名前と引数だけで model の番を作り直すと、thought_signature が消える
contents.append(types.Content(role="model", parts=[
    types.Part(function_call=types.FunctionCall(name=call.name, args=call.args))
]))

直し方は、受け取った content を書き換えずにそのまま履歴へ戻すことです。あわせて、関数の結果(FunctionResponse)に、モデルが出した FunctionCall と同じ id と name を入れます。

config = types.GenerateContentConfig(
    tools=[weather_tool],
    thinking_config=types.ThinkingConfig(thinking_level="medium"),
)
contents = [types.Content(role="user", parts=[
    types.Part.from_text(text="ボストンの天気は?")
])]

response = client.models.generate_content(
    model="gemini-3.5-flash-lite", contents=contents, config=config)
call = response.function_calls[0]

# ✅ モデルの番は、受け取った content をそのまま足す(署名が入っている)
contents.append(response.candidates[0].content)

result = get_weather(**call.args)
contents.append(types.Content(role="user", parts=[
    types.Part(function_response=types.FunctionResponse(
        id=call.id,      # FunctionCall の id と同じ値
        name=call.name,  # FunctionCall の name と同じ値
        response={"result": result},
    ))
]))

response = client.models.generate_content(
    model="gemini-3.5-flash-lite", contents=contents, config=config)
print(response.text)

関数の結果に画像などを返すときは、別のパーツに並べず、FunctionResponse の中(parts)に入れます。Google の文書「Function calling」は、SDK が署名を自動で扱うと書いています。SDK のチャット機能(client.chats)に履歴を持たせているなら、自分で署名を運ぶ必要はありません。注意が要るのは、履歴を自前のデータベースや別の形式に保存し、毎回組み立て直している場合です。保存の形が署名を落としていないかを確かめます。

応答の止まった理由(finishReason)には、署名が欠けたことを表す MISSING_THOUGHT_SIGNATURE(Request has at least one thought signature missing)が API の参照文書に載っています。ログでこの値やエラーを見たら、まず履歴の組み立て方を疑います。

Interactions API に移すと、署名の受け渡しをサーバーに任せられる

Google は新しく作るものには Interactions API を勧めています。既定(store=true)のまま2回目から previous_interaction_id を渡すと、署名を含む会話の状態をサーバーが持つので、署名を自分で運ぶ必要がなくなります。関数の結果は function_result として、call_id と name を付けて返します。

import json

# Interactions API の関数の定義は辞書で書く(generateContent の weather_tool とは形が違う)
interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input="What's the weather in Boston?",
    tools=[weather_tool_dict],
)
for step in interaction.steps:
    if step.type == "function_call":
        result = get_weather(**step.arguments)
        interaction = client.interactions.create(
            model="gemini-3.8-flash",
            input=[{
                "type": "function_result",
                "name": step.name,
                "call_id": step.id,
                "result": [{"type": "text", "text": json.dumps(result)}],
            }],
            tools=[weather_tool_dict],
            previous_interaction_id=interaction.id,
        )
print(interaction.output_text)

書き方の違いは Google の「Migrating to the Interactions API」にあります。generateContent も引き続き使えるので、12月1日までに API ごと移す必要はありません。

このほか移行ガイドは、ツールを呼ぶ前の文章が原因で Malformed_Function_Call が出る場合の回避策を、Function calling の文書の「Workarounds for pre-tool text requirements」で案内しています。

3-5. 先埋めと candidate_count をやめる

答えの書き出しを先に埋めておく使い方(contents の最後の(空でない)番を model にする)は、新しいモデルでは HTTP 400 エラーになります。Google の移行ガイドが「避ける」例として載せている形です。

{
  "contents": [
    {"role": "user", "parts": [{"text": "Translate 'Hello world' to Spanish."}]},
    {"role": "model", "parts": [{"text": "Translation:"}]}
  ]
}

前置きを書かせない・JSON で答えさせるための先埋めなら、system instruction に決まりを書くか、構造化出力を使います。

response = client.models.generate_content(
    model="gemini-3.5-flash-lite",
    contents="Translate 'Hello world' to Spanish.",
    config=types.GenerateContentConfig(
        system_instruction="訳文だけを出力する。前置きを書かない。",
    ),
)

candidate_count(1回の呼び出しで複数の答えを返させる設定)は Gemini 3 以降で使えず、2 以上にすると HTTP 400 エラーになります。複数の案が要るなら、呼び出しを複数回に分けます。

⚠️ 試験は軽い入力だけで済ませないでください。1回で終わる短い依頼はそのまま通るので、関数呼び出しを何往復もする処理や、保存した履歴から再開する会話を流さないと、壊れる所が見えません。

Google は、スキルに対応したコーディングエージェント向けに、この移行を手伝う Gemini API のスキルも用意しています(「Coding agents」)。使う場合も、直した後の試験は自分で回します。

4. 料金はどう変わるか

行き先の単価は、2.5 Flash からはほぼ同じ、2.5 Pro からは下がります。ただし 3.8 Flash は2026年12月31日までの導入価格で、2027年1月1日から上がります。上がった後は、出力は 2.5 Pro より安いままですが、入力は 2.5 Pro より高くなります(20万トークン以下のプロンプトの場合)。以下はすべて有料の枠の通常の単価で、100万トークンあたりの米ドルです。

項目Flash2.5 Flash→ 3.5 Flash-LitePro2.5 Pro→ 3.8 Flash
入力$0.30(音声は $1.00)$0.30(音声も同じ)$1.25(20万トークン超は $2.50)$0.75(2027年1月1日から $1.50)
出力(考えた分を含む)$2.50$2.50$10.00(20万トークン超は $15.00)$3.75(2027年1月1日から $7.50)
キャッシュの読み込み$0.03(音声は $0.10)$0.03$0.125(20万トークン超は $0.25)$0.075(2027年1月1日から $0.15)
キャッシュの保存(1時間あたり)$1.00$1.00$4.50$0.50(2027年1月1日から $1.00)

出典:Google「Gemini Developer API pricing」の Standard の表(2026年11月7日確認)。Batch・Flex などの割引の枠は料金のページで確かめてください。3.8 Flash の単価はプロンプトの長さで分かれていません。

2.5 Pro の使い方で計算してみます。1か月に入力1,000万トークン・出力200万トークン(どれも20万トークン以下のプロンプト)なら、2.5 Pro は $12.50+$20.00=$32.50 です。同じトークン数を 3.8 Flash で使うと、2026年12月中は $7.50+$7.50=$15.00、2027年1月からは $15.00+$15.00=$30.00 になります。

ただし、トークン数が同じとは限りません。Google は 3.8 Flash について、長く複雑な作業では設計上トークンを多めに使うと書いています。日常の処理なら thinking_level を下げて減らせるとも書いています。2.5 Flash から 3.5 Flash-Lite への移行でも、既定の minimal から段階を上げれば、考えた分の出力トークンが増えます。単価が同じか安くても、請求額は段階の選び方で変わります。試験のときに応答のトークン数(usage_metadata)を記録しておくと、12月の請求を見積もれます。

Google 検索によるグラウンディングの数え方も変わります。2.5 Flash・2.5 Pro は1日1,500リクエストまで無料で、その先は「グラウンディングしたプロンプト」1,000件あたり $35 でした。3.5 Flash-Lite・3.8 Flash は Gemini 3 以降のモデル全体で月5,000リクエストまで無料で、その先は検索1,000回あたり $14 で、1日1,500リクエストの上限があります。1回の依頼から検索が複数回走ると、その回数ぶん課金されます。グラウンディングを多く使うなら、件数を見直します。

Gemini の料金の全体(アプリの有料プランと API の違い)は「Gemini の料金と無料でできること」に、API の料金の仕組み(トークン・入力と出力)は「AI API とは何か」にまとめています。

5. 12月1日を過ぎるとどうなるか

何もしなかった場合に起きることを、書き方ごとにまとめます。

  • モデル名のエラーにはならない:gemini-2.5-flash・gemini-2.5-pro の名前のまま、リクエストは新しいモデルに届く
  • 請求が新しいモデルの単価になる:2.5 Pro からの行き先は、2027年1月1日にもう一度単価が上がる
  • 先埋めと candidate_count が2以上の依頼は HTTP 400 エラーで止まる:履歴を自分で組み立て直して署名を落とした関数呼び出しも、エラーや想定外の動きになりうる
  • エラーにならずに答えが変わる所がある:temperature などは無視され、2.5 Flash からの行き先は既定でほとんど考えない。ツールを使う処理が途中で終わる、答えの揺れが大きくなる、といった形で表れる

エラーにならない変化は、監視の数字に出にくいものです。切り替えの前後で、答えの形を検証する処理(JSON として読めるか、必要な項目があるか)の失敗数を比べると気づけます。

6. 移す先は自動の行き先のままでよいか

自動の行き先は、Google がそれぞれの移行先として勧めるモデルです。ただ、性格はそれまでと変わります。

Flash 2.5 Flash → 3.5 Flash-Lite は、同じ単価のまま「Lite」の系列に移ります。Google は、3.5 Flash-Lite が推論の試験 HLE で 2.5 Flash の 11.0% に対して 18.0%、図表の読み取りの試験 CharXIV で 63.7% に対して 74.5% だったとしています(Google の測定)。大量の抽出や分類が中心なら、そのまま移るのが自然です。多段のエージェントやコード生成が中心で、答えの質を上げたいなら、Google の比較表がコード生成・多段の処理向けに挙げる gemini-3.6-flashも候補です。単価は2026年12月31日までの導入価格で入力 $0.75・出力 $3.75、2027年1月1日から $1.50・$7.50 で、3.5 Flash-Lite より高くなります。

Pro 2.5 Pro → 3.8 Flash は、Pro から Flash の系列に移ります。Google は 3.8 Flash を「最も賢い Flash のモデル」と呼び、長い時間のかかるソフトウェア開発やエージェント向けとしています。2.5 Pro と比べると、出力の単価は2027年以降も安く($10.00 → $7.50)、入力の単価は2027年から高くなります(20万トークン以下のプロンプトの場合、$1.25 → $1.50)。

答えの質を最優先するなら、より高い Gemini 4 Argon(gemini-4-argon)も候補です。単価は2026年11月30日までの導入価格で入力 $2.00・出力 $10.00、12月1日から入力 $4.00・出力 $20.00 で、無料の枠はありません(「Pricing」・2026年11月7日確認)。

どのモデルを選んでも、名前を替えてから同じ試験を流し、答えの質・エラー・トークン数を比べて決めます。ほかの Gemini のモデルの知識の期限や位置づけは「ChatGPT・Claude・Gemini の知識カットオフ日一覧」にあります。

モデルを替えると応答の形や設定の扱いが変わるのは、Gemini に限りません。Claude の API で新しいモデルに替えたときに起きる同じ型の問題は「'ThinkingBlock' object has no attribute 'text' の原因と直し方」にまとめています。

まとめ

  • 2026年12月1日から、gemini-2.5-flash は gemini-3.5-flash-lite、gemini-2.5-pro は gemini-3.8-flash へ自動で回され、行き先の単価で課金される
  • 1回で完結する文章や画像の依頼はそのまま動く。gemini-2.5-flash-lite は対象外
  • 履歴を自分で組み立て直して署名を落とした関数呼び出しや、先埋め、candidate_count が2以上の依頼は HTTP 400 エラーになりうる。FunctionResponse の id と name は Google が入れるよう求めている(SDK のチャット機能なら署名は SDK が運ぶ)
  • thinking_budget は thinking_level に替える。3.5 Flash-Lite の既定は minimal なので、ツールや多段の処理は medium 以上にする。temperature などは無視される
  • 単価は 2.5 Flash からはほぼ同じ、2.5 Pro からは下がる。ただし 3.8 Flash は2027年1月1日に上がり(入力は 2.5 Pro より高くなる)、考える段階しだいでトークン数も変わる
  • 12月1日を待たずにモデル名を替え、重い入力で試してから本番へ出す

FAQ

Q. 12月1日に gemini-2.5-flash を呼ぶと、モデルが見つからないエラーになりますか?

A. なりません。Google の文書によると、リクエストは gemini-3.5-flash-lite へ自動で回されます。ただし、答えるのは新しいモデルで、新しいモデルの単価で課金されます。履歴を自分で組み立て直して署名を落とした関数呼び出しや、先埋め、candidate_count が2以上の依頼は、HTTP 400 エラーになりえます。

Q. thought signature のエラーが出ました。どこを直せばよいですか?

A. 会話の履歴を組み立てる所です。前のターンでモデルが返した content を、名前と引数だけで作り直していないかを確かめます。受け取った content をそのまま履歴に戻せば、署名も一緒に返ります。SDK のチャット機能や Interactions API の previous_interaction_id を使えば、署名の受け渡しは自動になります。

Q. gemini-3.5-flash-lite の料金はいくらですか?

A. 有料の枠で、入力が100万トークンあたり $0.30(文章・画像・動画・音声とも)、出力が $2.50 です(2026年11月7日確認)。2.5 Flash と比べると、文章・画像・動画の入力と出力は同じで、音声の入力は $1.00 から $0.30 に下がります。

Q. thinking_budget を 0 にして考えさせないようにしていました。どうすればよいですか?

A. 3.5 Flash-Lite なら thinking_level を書かない(既定の minimal)か、"minimal" を指定します。3.8 Flash には minimal が無くエラーになるので、いちばん低い "low" にします。

更新の記録

  • 2026年11月7日初版。Gemini API の更新履歴(November 2, 2026)・Gemini deprecations・移行ガイド(3.6/3.5 Flash-Lite、3.8 Flash)・料金・Thinking・API の参照文書を確認して作成。

出典