◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、明日です。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、明日です。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-10-22中級

gemini-4-argon へ model を替える前に、自分のコードから消すものを探します

gemini-4-argon への移行で、明示キャッシュ・temperature 系・小さな max_output_tokens・短いタイムアウトの 4 つが問題になりうることを、公式の移行チェックリストから整理しました。自分のリポジトリから該当行を探す標準ライブラリだけの小さなスクリプトと、替えた後の確認点、Flash を据え置く判断も添えています。

gemini-api290gemini-4-argon移行10thinking-level暗黙キャッシュpython110

changelog の 10 月 13 日の項目で、gemini-4-argon が一般提供になったと知りました。モデル ID を書き換えるだけなら一分で済みます。ただ、個人開発でレビュー返信の下書きや運用スクリプトに Gemini を使っている身としては、ID を替えた翌朝に何かがずれているのが、いちばん落ち着かない展開です。替える前に「何を消すか」を先に洗い出しておきたくなりました。

最初にお伝えしたいのは、Argon への移行では「足すもの」よりも「消すもの」のほうが多い、ということです。公式の移行チェックリストを読むと、外すか見直すべき書き方が四つ並んでいます。私自身は Argon をまだ本番の呼び出しで試しておりません。ですからこの記事は、替える前に自分のコードを棚卸しするための道具と、その見方の記録です。

Argon で挙動が変わると公式に書かれている 4 点

Gemini 4 Argon の案内ページ(What's new in Gemini 4 Argon)で、移行時に手を入れる項目として明記されているのは、次の四つです。

コードの書き方Argon での扱いやること
cachedContents / caches.create による明示キャッシュ非対応。暗黙キャッシュのみ作成・参照の呼び出しを外す
temperature / top_p / top_k指定しても無視される削除するか、効いていないと分かる形にする
max_output_tokens が 32,768 未満思考にも枠を使うため、答えが途中で切れうる32,768 以上へ。難しい処理はもっと大きく
HTTP クライアントのタイムアウトが短い難しい入力は数分かかりうる15 分以上、または background 実行

暗黙キャッシュは 4,096 トークン以上のプロンプトで既定で有効になり、キャッシュが当たった入力トークンは 95% 割り引かれる、とあります。明示キャッシュで組んでいた方は、保存料の考え方ごと変わるのだと思います。

失敗しやすいのは、エラーにならない 2 つです

四つのうち、cachedContents は非対応なので呼べばおそらく失敗として気づけます。厄介なのは temperature と max_output_tokens のほうです。

temperature は無視されるだけで、エラーは出ません。つまり、レビュー返信の文体を安定させるために 0.2 に固定していたコードは、Argon に替えた瞬間から「固定しているつもり」で動き続けます。出力が揺れても、設定が効いていないとは気づきにくいのです。

max_output_tokens も同じです。Flash の頃に 8,192 で足りていた処理は、Argon では同じ枠を思考と回答で分け合うため、回答が短く終わったり途中で止まったりしかねません。公式は、既存の上限が 32K を下回るなら 32,768 以上に上げるよう勧めています。

エラーで教えてくれない変更ほど、替える前に自分の手で探します。 この線引きだけは、モデルが新しくなるたびに守るようにしております。

自分のコードから 4 つを探すスクリプト

リポジトリを歩いて、上の四つに当たる行を一覧にするだけの小さなスクリプトです。標準ライブラリだけで動き、見つかったら終了コード 1 を返します。手元の数行のサンプルで、四種類とも拾えることは確かめました。

#!/usr/bin/env python3
"""gemini-4-argon へ model を替える前に、自分のコードから引っかかる書き方を探す。"""
import pathlib
import re
import sys
 
EXTS = {".py", ".js", ".ts", ".tsx", ".mjs", ".sh", ".json", ".yaml", ".yml"}
SKIP = {"node_modules", ".git", ".next", "dist", "__pycache__", ".venv"}
 
CHECKS = [
    ("明示キャッシュ", r"cachedContents|caches\.create|cached_content|cachedContent",
     "Argon は明示キャッシュ非対応。呼び出しを外し、暗黙キャッシュに任せる"),
    ("サンプリング指定", r"\b(temperature|top_p|top_k|topP|topK)\b[\"']?\s*[:=]",
     "Argon では指定しても無視される。残すなら『効いていない』と分かる印を付ける"),
    ("出力上限が小さい", r"(max_output_tokens|maxOutputTokens)\"?\s*[:=]\s*(\d+)",
     "32,768 未満は思考で使い切るおそれ。数字を見て判断する"),
    ("短いタイムアウト", r"(timeout|timeout_ms|timeoutMs)\"?\s*[:=]\s*(\d+)",
     "難しい入力は数分かかる。15 分未満なら background 実行を検討する"),
]
 
 
def scan(root: pathlib.Path):
    hits = []
    for path in root.rglob("*"):
        if path.suffix not in EXTS or any(p in SKIP for p in path.parts):
            continue
        try:
            lines = path.read_text(encoding="utf-8").splitlines()
        except (UnicodeDecodeError, OSError):
            continue
        for no, line in enumerate(lines, 1):
            for name, pattern, hint in CHECKS:
                m = re.search(pattern, line)
                if not m:
                    continue
                if name == "出力上限が小さい" and int(m.group(2)) >= 32768:
                    continue
                hits.append((name, f"{path}:{no}", line.strip()[:90], hint))
    return hits
 
 
if __name__ == "__main__":
    target = pathlib.Path(sys.argv[1] if len(sys.argv) > 1 else ".")
    found = scan(target)
    seen = set()
    for name, where, text, hint in found:
        print(f"[{name}] {where}\n    {text}")
        seen.add((name, hint))
    print(f"\n{len(found)} 件 / {len({n for n, _ in seen})} 種類")
    for name, hint in sorted(seen):
        print(f"- {name}: {hint}")
    sys.exit(1 if found else 0)

使い方は python3 argon_preflight.py ./my-app の一行です。出力はたとえば次のようになります。

[サンプリング指定] app/reply.py:12
    cfg = {"temperature": 0.2, "max_output_tokens": 8192}
[出力上限が小さい] app/reply.py:12
    cfg = {"temperature": 0.2, "max_output_tokens": 8192}

同じ行が二つの種類で出るのは仕様です。一行に二つの問題が同居しうるためで、設定を辞書にまとめて書く癖のある方ほど、こうした行が出やすいはずです。

読み方で気をつけた点

  • タイムアウトの単位は秒とミリ秒が混ざります。60000 が 60 秒なのか 60,000 秒なのかは、呼び出し側のライブラリを見て判断してください
  • 正規表現での検出ですから、コメントやテストデータにも当たります。0 件にすることより、全件に目を通すことを目的にしております
  • max_output_tokens に変数を渡している行は数字が読めず、拾えません。そこは別に探す必要があります

替えたあとに確かめること

スクリプトで洗い出した後は、Argon への切り替えを一度に全面でやらず、まず一本の処理だけにするのが無難だと考えています。見る点は三つです。

  1. 応答が途中で切れていないかを、finishReason と文字数で見ます
  2. 思考を含む出力トークン数が、これまでの何倍になったかを数えます
  3. 思考レベルを low・medium・high で比べ、品質に足りる最小のものを選びます

公式も、三つのレベルで評価してから最小のものを選ぶよう案内しています。既定は medium です。

料金の確認も、先にしておくと胃が痛くなりません。gemini-4-argon は 2026 年 11 月 30 日までが導入価格で、入力が 100 万トークンあたり 2 ドル、出力(思考を含む)が 10 ドルです。12 月 1 日からは入力 4 ドル・出力 20 ドルになります。同じ時期の gemini-3.8-flash は、2026 年 12 月 31 日まで入力 0.75 ドル・出力 3.75 ドルです。単価だけで見れば Argon は数倍高く、さらに思考に使うトークンも増えうるのです。Flash 側の価格切り替えは、導入価格が終わる前後の二列見積もりで扱っています。

全部を Argon にしない、という選び方

ここまで書いて、あらためて思うのは、移行のコストが高い処理は替えなくてもよい、ということです。ストアレビューへの返信文の下書きのように、短くて形式が決まっている処理は、Flash のままでも困りません。Argon の案内ページが挙げている得意分野は、複雑なコーディング、エージェント、数学・科学です。そこに当たる処理だけを移し、残りは据え置く。この使い分けが、いまのところ私の結論です。

モデルが入れ替わったかどうかを毎回見分ける方法は、要求した ID と応答した ID を突き合わせる記録に書きました。Argon に一本移したあとも、あの記録は続けるつもりです。

まずは今日、argon_preflight.py を自分のリポジトリに一度だけ当てて、出てきた行を数えてみていただければと思います。件数が分かれば、移すかどうかを決める材料の半分は揃います。

シェア

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

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

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

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

関連記事

◈ API / SDK2026-10-19
404 と 429 が同じログに並んだら、上限より先にモデル名を確かめます
Gemini API のログに 404 NOT_FOUND と 429 RESOURCE_EXHAUSTED が混ざって出たとき、どちらから疑うかの順番と、生成を伴わずに切り分ける最小の Python スクリプトをまとめます。
◈ API / SDK2026-10-16
models は 200 なのに generateContent だけ 403 になる日 — 切り分けの順番を先に決めておく
モデル一覧の取得は 200 で通るのに、生成リクエストだけが 403 permission_denied で止まるときの切り分け手順です。キー・プロジェクト・請求の順に確かめる小さな診断スクリプトと、リトライしてはいけない理由、サポートへ渡す材料の揃え方をまとめました。
◈ API / SDK2026-09-04
ループ音源のプチノイズは、Gemini に聴かせる前に波形の端で切り分けられます
環境音のループ再生で折り返しだけがプチッと鳴る。音声理解に丸ごと投げる前に、波形の端の段差を内部の変化量で正規化してふるい分ける手順と、配布形式への変換で継ぎ目が作り直される落とし穴をまとめました。