ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-06-15上級

Gemini CLI 終了(6/18)に備える依存監査 — Antigravity CLI 移行で壊れる場所を先に潰す

6/18 の Gemini CLI 終了で本当に壊れるのは、ターミナルではなく CI・git フック・cron に埋もれた gemini 呼び出しです。参照箇所を機械的に洗い出し、ドライランで確認し、切り戻しまで設計する手順を実コードでまとめました。

antigravity355gemini-cli4ci-cd8migration6automation30

プレミアム記事

6/18 で Gemini CLI と Gemini Code Assist の IDE 拡張が、無料個人ユーザーと AI Pro / Ultra 加入者向けのリクエスト処理を終了し、Go 製の Antigravity CLI へ集約されます。手元のターミナルで gemini を打ち直すだけなら数分の作業です。

ところが、私が自分のアプリ運用の自動化を点検していて肝を冷やしたのは、gemini という文字列が「自分でも忘れていた場所」に何度も埋まっていたことでした。GitHub Actions のワークフロー、コミット前に走る git フック、深夜に回している cron、package.json の scripts、Makefile のターゲット。どれもターミナルでは目に入りません。締切当日にこれらが静かに失敗し、しかも「終了したから失敗した」と気づけるエラーすら出ないケースがあります。

この記事は「コマンド名を置き換える方法」ではなく、置き換え漏れをゼロにし、本番の自動化を止めずに切り替え、いざというとき即座に戻すための実務手順です。私自身、個人開発で複数のリポジトリと自動パイプラインを並行して回しているので、この棚卸しの重要さは身に染みています。

なぜ「手元で動く」確認だけでは移行が完了しないのか

CLI の移行で事故が起きるのは、たいてい次の3つの理由が重なったときです。

第一に、呼び出し箇所が分散していること。対話的に使う gemini は氷山の一角で、実際には非対話モード(パイプやサブコマンド)で機械的に呼んでいる箇所のほうが多いものです。第二に、失敗が静かに起きること。CI のステップが || true で握りつぶされていたり、cron の標準エラーがどこにも飛んでいなかったりすると、終了後しばらく誰も気づきません。第三に、コマンド名以外もずれること。設定ファイルの場所、環境変数名、認証情報の参照先が新 CLI で変わっていれば、antigravity に置換しても「コマンドは見つかるのに認証で落ちる」状態になります。

ここでの落とし穴は、こうした不整合が本番運用に入ってから初めて顕在化することです。だからこそ事前に注意点を洗い出して回避し、それでも起きた場合の対処を先に決めておきます。

ですから移行の最初の一手は、置換ではなく棚卸しです。「どこで・どう・誰の権限で gemini を呼んでいるか」を一覧にしてから動きます。

まず参照箇所を機械的に洗い出す監査スクリプト

最初に、リポジトリと運用環境の両方を横断して gemini 参照を引き出します。コメントや文字列リテラルも含めて広めに拾い、あとから人間が取捨選択する方針です。漏れより過検出のほうが安全だからです。

#!/usr/bin/env bash
# audit-gemini.sh — gemini CLI への依存を横断的に洗い出す
# 使い方: ./audit-gemini.sh /path/to/repo1 /path/to/repo2 ...
set -euo pipefail
 
REPORT="gemini-audit-$(date +%Y%m%d-%H%M).md"
echo "# Gemini CLI 依存監査  $(date)" > "$REPORT"
 
scan_dir() {
  local root="$1"
  echo -e "\n## $root" >> "$REPORT"
 
  # 1) ソース・設定ファイル内の呼び出し(.git や node_modules は除外)
  echo -e "\n### ファイル内参照" >> "$REPORT"
  grep -rInE '\bgemini\b' "$root" \
    --include='*.sh' --include='*.yml' --include='*.yaml' \
    --include='*.json' --include='*.toml' --include='Makefile' \
    --include='*.mjs' --include='*.ts' --include='*.js' \
    2>/dev/null | grep -v '/node_modules/' | grep -v '/.git/' \
    >> "$REPORT" || echo "(該当なし)" >> "$REPORT"
 
  # 2) git フック(追跡対象外なので個別に見る)
  echo -e "\n### git フック" >> "$REPORT"
  if [ -d "$root/.git/hooks" ]; then
    grep -rIn 'gemini' "$root/.git/hooks" 2>/dev/null \
      | grep -v '\.sample:' >> "$REPORT" || echo "(該当なし)" >> "$REPORT"
  fi
}
 
for target in "$@"; do
  scan_dir "$target"
done
 
# 3) ユーザーの cron(リポジトリ外に潜むことが多い)
echo -e "\n## crontab(現在のユーザー)" >> "$REPORT"
crontab -l 2>/dev/null | grep -n 'gemini' >> "$REPORT" || echo "(該当なし)" >> "$REPORT"
 
# 4) PATH 上に旧バイナリが残っていないか
echo -e "\n## PATH 上の gemini バイナリ" >> "$REPORT"
command -v gemini >> "$REPORT" 2>/dev/null || echo "(PATH になし)" >> "$REPORT"
 
echo "✅ レポート出力: $REPORT"

このスクリプトの肝は、追跡対象外の場所まで見にいく点です。.git/hookscrontab -lgit grep では絶対に引っかかりません。私が冷や汗をかいたのも、まさに pre-push フックの中に整形チェック用の呼び出しを仕込んでいたケースでした。出力された Markdown を上から眺め、各行を「対話用途/自動化用途」に色分けしておくと、次のドライランの優先順位が決まります。

package.json の scripts に潜むものは、依存関係としても確認しておくと確実です。

# scripts セクションだけを抜き出して確認
node -e "const p=require('./package.json'); console.log(JSON.stringify(p.scripts||{}, null, 2))" \
  | grep -n 'gemini' || echo "scripts に gemini 参照なし"

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

この記事の続きを読む

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

この記事で得られること
ターミナルでは気づけない CI・git フック・cron に隠れた gemini 呼び出しを、1つの監査スクリプトで漏れなく洗い出せる
移行で詰まる「コマンド名は変えたのに認証と設定パスがずれて動かない」問題を、ドライランの順序設計で事前に潰せる
本番の自動化を止めずに切り替えるための、切り戻し(ロールバック)を先に用意したカットオーバー手順を自分のパイプラインに適用できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-05-16
App Store レビュー返信を Antigravity で半自動化した実体験 — 多言語30件・8秒待機の運用設計
累計5,000万DLを超えるiOSアプリで、Antigravityを使ってApp Storeの多言語レビュー返信を半自動化した実体験。1セッション30件・送信間8秒待機・多言語品質担保の設計を公開します。
アプリ開発2026-05-01
Antigravity で実装するゼロダウンタイム DB マイグレーション:Expand-Contract パターンと AI 駆動の安全策
本番DBの型変更・カラム名変更・テーブル分割を、ユーザー影響ゼロで遂行するための Expand-Contract パターンを Antigravity の AI 支援とともに完全実装する本番運用ガイドです。
アプリ開発2026-04-19
Antigravity で構築する iOS アプリ全自動リリースパイプライン — AI がスクリーンショット生成・メタデータ最適化・審査対応まで担う上級実装ガイド
Antigravity × App Store Connect API × GitHub Actions で、ビルドからApp Store審査提出まで全工程を自動化。AI によるスクリーンショット説明文生成・メタデータ最適化・リジェクト対応提案を完全実装する上級ガイド。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →