GEMINI LABEN
FLASH35 — Gemini 3.5 Flashが一般提供となり、gemini-flash-latestが指す実体になりました。日常的な生成を速く安価にこなせますAGENTS — Gemini APIのManaged Agentsがpublic previewに。Google管理の隔離Linuxサンドボックスで自律的なエージェントを構築できますMEDIA — Nano Banana 2 Lite(画像)とGemini Omni Flash(動画・会話的編集)がAI Studio・API・Enterprise Agent Platformで利用可能にTTS — gemini-3.1-flash-tts-previewの音声生成がstreamGenerateContent経由でストリーミング対応になりましたTRANSLATE — 新しい音声モデルが70以上の言語を自動判別し、話者の自然な抑揚を保ったままライブ音声翻訳を行いますSPENDCAP — AI Studioにプロジェクト単位の費用上限が導入され、支出を安全側に抑えられるようになりましたFLASH35 — Gemini 3.5 Flashが一般提供となり、gemini-flash-latestが指す実体になりました。日常的な生成を速く安価にこなせますAGENTS — Gemini APIのManaged Agentsがpublic previewに。Google管理の隔離Linuxサンドボックスで自律的なエージェントを構築できますMEDIA — Nano Banana 2 Lite(画像)とGemini Omni Flash(動画・会話的編集)がAI Studio・API・Enterprise Agent Platformで利用可能にTTS — gemini-3.1-flash-tts-previewの音声生成がstreamGenerateContent経由でストリーミング対応になりましたTRANSLATE — 新しい音声モデルが70以上の言語を自動判別し、話者の自然な抑揚を保ったままライブ音声翻訳を行いますSPENDCAP — AI Studioにプロジェクト単位の費用上限が導入され、支出を安全側に抑えられるようになりました
記事一覧/開発ツール
開発ツール/2026-06-18上級

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

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

Gemini CLI8フォールバック2自動化26google-genai4本番運用45

プレミアム記事

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-05-04
Gemini CLI で MCP サーバーを使う — ファイル操作からDB連携まで
Gemini CLI に MCP サーバーを接続して外部ツール・DBを直接操作する方法を実践的に解説。GEMINI.md の設定から filesystem・SQLite・GitHub MCP の活用例まで、動くコードで丁寧に紹介します。
開発ツール2026-03-11
Gemini CLI をシェルと CI に組み込む — ヘッドレス実行とセッション再開の実践
Gemini CLI を対話利用で終わらせず、ヘッドレス実行・JSON出力・セッション再開・承認モード・MCP連携までを実践します。シェルスクリプトとCIへの組み込み手順を、運用で得た勘所とともに整理しました。
開発ツール2026-07-09
例外にならない失敗を型で閉じる — Gemini API のレスポンスを判別可能ユニオンに正規化する
HTTP 200 なのに本文が空、という失敗は try/catch では捕まりません。finishReason と blockReason を判別可能ユニオンに正規化し、never による網羅性チェックで処理漏れをコンパイル時に潰す設計をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →