◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り7日。移行先は 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 に停止、残り7日。移行先は 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 し…
記事一覧/開発ツール
⟐ 開発ツール/2026-06-18上級

Gemini CLI 停止に備え、夜間バッチに google-genai SDK フォールバックを組み込む

6月18日で Gemini CLI のホスト応答が止まります。CLI に依存した夜間バッチを落とさないよう、CLI の生死を確かめてから google-genai SDK へ自動で逃がすフォールバック・ハーネスを、自分の運用を題材に組みました。

Gemini CLI9フォールバック自動化28google-genai7本番運用49

✦ プレミアム記事

6月18日を境に、Gemini CLI のホスト応答が止まります。個人で複数のサイトを夜間に自動運用していると、この一行の依存が思っていたより深いところに刺さっていることに、移行準備をして初めて気づきました。gemini -p "..." を叩いているのは記事生成だけだと思い込んでいたのですが、実際にはスクリーンショットの説明文づくりや、投稿前のタイトル校正にも同じコマンドが混ざっていました。

厄介なのは、CLI のバイナリ自体は 6月18日以降も which gemini で見つかってしまう点です。停止するのはホスト側の応答であって、ローカルのコマンドが消えるわけではありません。つまり「バイナリの有無」で生死を判定すると、落ちているのに生きていると誤認して、バッチがタイムアウトの山を築きます。私自身、最初のプローブを --version で書いてしまい、テスト環境では通るのに本番の夜間バッチだけが固まる、という回り道をしました。

ここで扱うのは「移行の棚卸し」ではありません。どこで CLI に依存しているかを洗い出す全体計画ではなく、洗い出したあとの一点 ―― CLI が黙っても処理を止めないための小さなハーネス ―― だけを、動くコードで深掘りします。

どの処理を SDK に逃がし、どれを CLI に残すか

すべてを SDK に寄せれば確実ですが、対話的な補完やプロジェクト文脈の読み込みなど、CLI ならではの使い勝手を捨てることになります。私は処理を3つに仕分けてから手を動かしました。

処理の性質移行先理由
夜間バッチの一括生成(無人)SDK 直叩き対話不要。CLI の停止と独立に動かしたい
手元での対話的な試行錯誤Antigravity CLI文脈保持と対話の体験を残したい
CI 内の単発呼び出しSDK 直叩き再現性と監査ログを優先したい

無人で動くものほど SDK へ寄せるのが基本方針です。人が画面の前にいる処理だけ CLI(移行後は Antigravity CLI)に残し、それ以外は API へ逃がします。以降のコードは、この「無人バッチを止めない」という一点に絞っています。

CLI が今この瞬間に応答できるかを確かめる

判定の肝は、バイナリの有無ではなく「実際に1回応答が返るか」を見ることです。短いプロンプトを与えて、タイムアウトか非ゼロ終了なら使えないと判断します。

import shutil
import subprocess
 
def cli_available(timeout_sec: int = 12) -> bool:
    """gemini CLI が今この瞬間に応答を返せるかを確かめる。
    --version ではなく実際の生成を1回試すのが要点。
    バイナリが残っていてもホスト側が止まっていれば応答は返らない。"""
    if shutil.which("gemini") is None:
        return False
    try:
        result = subprocess.run(
            ["gemini", "-p", "ping"],
            capture_output=True,
            text=True,
            timeout=timeout_sec,
        )
    except subprocess.TimeoutExpired:
        return False
    return result.returncode == 0 and bool(result.stdout.strip())

ここで timeout_sec を短めの12秒にしているのは、プローブで何分も待たされては本末転倒だからです。停止後の CLI は応答そのものが返らないので、長く待つほど無駄が増えます。プローブは「軽く叩いてすぐ諦める」のが正解だと感じています。

✦

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦CLI のバイナリが残っていても応答が返らない状態を、--version ではなく実生成1回で正しく検知できる
✦CLI 優先・SDK フォールバックを1つの generate() に閉じ込め、指数バックオフ付きで停止に強い呼び出しに置き換えられる
✦夜間バッチに16文字の冪等キーを足して、再実行時の二重投稿を防ぐ実装を今日から入れられる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

⟐ 開発ツール2026-09-21
つないだ MCP を初めて外した日 — 常時有効にするツールを選ぶ基準
MCP サーバーを足し続けると、API の上限である 512 個の関数宣言に当たる手前で応答の質が落ちます。Gemini CLI の includeTools と excludeTools を使い、常時有効にするツールを選ぶ基準と外し方をまとめます。
⟐ 開発ツール2026-04-22
Gemini API × Cloud Tasks で作る非同期AIジョブキュー — タイムアウトとリトライを設計から解く
Cloud Run のタイムアウトと Gemini API のレート制限に挟まれて落ちる同期実装から、Cloud Tasks を軸にした非同期ジョブキュー設計へ移行する実践ガイドです。リトライ・DLQ・進捗通知まで本番で通る形で解説します。
⟐ 開発ツール2026-10-14
クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep して、GEMINI.md には索引だけ置く
アプリのクラッシュ報告を調べるとき、過去の不具合の全文を毎回読ませずに済ませる運用です。ID から 1 行を引く早見表と、GEMINI.md に置く範囲の決め方、そのまま使える grep 関数をまとめました。