Gemini CLIの後継、Antigravity CLIを入れて日本語の推敲に使うまで

開発claude-code-tools

Gemini CLIが止まったので、後継を入れる

Gemini CLIは2026年5月のGoogle I/Oで Antigravity CLI に統合され、旧CLIとGemini Code AssistのIDE拡張は6月18日でリクエストの受付を終えた。→ Googleの告知(Google Developers Blog)

手元にはAntigravityのIDEだけが入っていて、CLIは入っていなかった。紛らわしいのは、IDEにも antigravity というコマンドが付いてくる点だ。これはVS Codeの code に相当するランチャで、--diff--install-extension しか持たない。エージェントは動かない。

$ antigravity --version
1.107.0

$ antigravity --help | head -3
Antigravity 1.107.0
Usage: antigravity.exe [options] [paths...]

ターミナルで動くエージェントは別物で、コマンド名は agy である。以下は、これを入れて日本語の推敲に組み込むまでの記録になる。

インストールはPowerShellの一行、ただし中身は読んでから

公式の手順は次の一行だ。macOSとLinuxは curl -fsSL https://antigravity.google/cli/install.sh | bash になる。

irm https://antigravity.google/cli/install.ps1 | iex

ネットワーク越しのスクリプトをそのままシェルに流し込む形なので、今回は一度ファイルに落として中身を読んでから実行した。172行のスクリプトがやっていたのは次の5つで、余計なことはしていなかった。

  1. CPUアーキテクチャを見て windows_amd64 / windows_arm64 を決める
  2. 配布マニフェスト(バージョン・URL・SHA512)を取得する
  3. バイナリをステージング領域へ落とし、SHA512を照合する
  4. 一致したら %LOCALAPPDATA%\agy\bin\agy.exe へ配置する
  5. agy install を呼んでユーザーPATHへ登録する

管理者権限は要らない。3のハッシュ照合が入っているので、| iex を避けたい場合でも同じ手順を手で踏めばよい。

実行後の状態はこうなった。バイナリは184MBある。Go製の単体実行ファイルで、npmもNode.jsも要らない。

$ agy --version
1.2.1

PATHはレジストリのユーザー環境変数に追加される。すでに開いているターミナルには反映されないので、そこだけ注意がいる。インストーラ自身も「restart your active terminal session」と警告を出す。

サインインは agy を起動するとブラウザが開く。ブラウザを使えない環境では ~/.gemini/antigravity-cli/settings.jsonmodelProvider: gemini を書いて GEMINI_API_KEY を渡す経路がある。

使えるモデルは15種。無料プランにもClaudeが並ぶ

サインインが済むと agy models が通る。手元で返ってきたのは15種だった。

gemini-3.8-flash-high / -medium / -low
gemini-3.7-flash-high / -medium / -low
gemini-3.6-flash-high / -medium / -low
gemini-3.1-pro-high / -low
claude-sonnet-4-6            Claude Sonnet 4.6 (Thinking)
claude-opus-4-6-thinking     Claude Opus 4.6 (Thinking)
gpt-oss-120b-medium          GPT-OSS 120B (Medium)

Flash系は推論の強さがモデルIDそのものに埋まっている。--effort というフラグも別にあるが、Flashについてはスラッグを選ぶ形になる。

意外だったのは料金ページの記載で、無料プランでもこの顔ぶれに一通り触れる。無料と有料の差は「使えるモデル」ではなく「レート制限の緩さ」に寄っている。

プラン料金内容
For Individuals$0/月上記モデルへのアクセス、Tab補完と Command リクエストは無制限、週次のレート制限は「基本」
Google AI Pro有料無料の内容に加えて、レート制限がより緩い。AIクレジットのプールを融通できる
Google AI Ultra有料最新のGeminiモデルにさらに高い頻度でアクセスできる

→ Antigravityの料金ページ

自分がどのプランなのかは、CLIの対話画面で /usage(別名 /quota)を叩くと出る。クレジットの残量は /credits になる。ただしこの2つは対話画面専用で、後述するヘッドレス実行からは呼べない。手元で agy -p "/usage" を試したら、モデルがファイルを読もうとして権限で弾かれ、何も出ずに終わった。

ブラウザ側で手早く確かめたいなら、Gemini(gemini.google.com)のサイドバーにあるアカウント名の下を見る。プラン名がそのまま出ている。手元のアカウントはここが Pro になっていた。契約はGoogle Workspace側の割り当てで、個人の「定期購入」一覧には出てこない。

ヘッドレスで呼ぶ。ただしパイプは効かない

ここからが本題になる。-p を付けると対話画面を開かずに1回だけ実行して終了する。

agy -p "次の文章を推敲してください" --model gemini-3.8-flash-high

応答はstdout、進捗やエラーはstderrに分かれて出る。スクリプトから読むなら --output-format json を付ける。返ってくるのはこの形だった。

{"conversation_id":"6e46dcea-...","status":"SUCCESS","response":"OK\n",
 "duration_seconds":1.11,"num_turns":1,
 "usage":{"input_tokens":12994,"output_tokens":1,"thinking_tokens":0,
          "cache_read_tokens":0,"total_tokens":12995}}

問題はファイルの渡し方だった。素直に考えると次のように書きたくなる。

cat draft.md | agy -p "日本語として自然に推敲して"

これが動かない。試しに標準入力の中身をそのまま返すよう頼んでみると、こうなる。

$ printf "ZZTOP42" | agy -p "標準入力の文字列をそのまま出力して。無ければ NO-STDIN と出力して"
NO-STDIN

素の -p は標準入力を読まない。パイプで渡したつもりの本文はプロンプトに入っていない。ドキュメントを見ると、標準入力を受け取るのは --input-format stream-json を指定したときだけで、そのときは1行1メッセージのNDJSONを渡す形になる。

もう一つ引っかかったのが権限だった。ヘッドレスでは許可を尋ねる相手がいないため、ツールの要求はすべて自動で拒否される

jetski: no output produced — a tool required the "read_file" permission that
headless mode cannot prompt for, so it was auto-denied.

「ファイル名を渡して読ませる」書き方はここで止まる。settings.jsonpermissions.allow に許可を足すか、--dangerously-skip-permissions を付けるかになるが、推敲のように読み書きの要らない用途なら本文をプロンプトに埋め込むのが速い

agy -p "$(cat prompt-header.txt)

---本文ここから---
$(cat chunk-01.txt)
---本文ここまで---" --model gemini-3.8-flash-high

日本語をこの経路で渡しても文字化けは起きなかった。ただしWindowsのコマンドライン長は約32,000文字なので、長い原稿は段落の境目で分割して投げる。3,000字を目安にしている。

推敲をスラッシュコマンドにする

毎回おなじ制約を打ち込むのは続かないので、Claude Code側のスラッシュコマンドにした。.claude/commands/ja.md に手順と制約を書いておけば、/ja <ファイル> の一発で回る。

コマンドに書いたのは次の内容になる。

  • 対象を決める。ファイルパスか、見出しを指定して章の一部だけを対象にする
  • 本文だけを抜く。HTMLならタグや図表に触らず <p> の中身だけ、Markdownならfrontmatterやコードブロックを除いた段落だけ
  • 3,000字ずつに分ける。切るのは段落の境目で、文の途中では切らない
  • agyへ投げる。本文はプロンプトに埋め込む(パイプは使わない)
  • 差分を出す。変更があった段落だけを前後で並べる
  • 書き戻しは --apply が付いたときだけ。元ファイルは既定では触らない

肝心の推敲指示は、コマンド本文にそのまま置いている。

制約:
(1) 事実・数値・専門用語・固有名詞を変えない。内容を足さない、削らない
(2) 体言止めを使わない
(3) 比喩的な動詞を使わない(例: 取り戻す、押し上げる、切り拓く)
(4) 一文が長すぎるときだけ分割する。接続詞を足して細切れにしない
(5) 修飾語は長いものから先に置く
(6) 読点は意味の切れ目に打つ。主語の直後に機械的に打たない
(7) 段落の構成と改行の位置は元のままにする
(8) HTMLタグ・Markdown記法・数式・コードはそのまま残す

出力は推敲後の本文だけ。前置きも説明も付けない。

「短くしろ」と言い過ぎると文章が壊れる

(4)は最初から入れていたわけではない。最初は「一文を短くし」とだけ書いていて、その結果が良くなかった。

法人税の講座から6段落(639字)を取り出して投げたところ、6段落すべてが書き換わった。たとえば冒頭はこうなった。

原文: 益金は会計の収益とほぼ同じですが、完全には一致しません。損金も費用とほぼ同じですが、やはり一致しません。

出力: 益金は、会計の収益とほぼ同じです。しかし、完全には一致しません。損金も、費用とほぼ同じです。しかし、やはり一致しません。

1文が2文に割れ、「しかし」と「そして」が全段落で連続する。文は短くなったが、読みにくくなった。指示を「一文が長すぎるときだけ分割する。接続詞を足して細切れにしない」に替えて投げ直すと、同じ原稿で書き換えは6段落中3段落に収まり、冒頭の段落は変更なしで返ってきた。残った3つはいずれも小さい。

変更点
比喩的な動詞を外した後の年度で「取り戻す」ための調整です後の年度で課税するための調整です
主語直後の読点を削った損金も同様に、売上原価や販管費を…損金も同様に売上原価や販管費を…
同上受け取った配当金は、簿記3級でも…受け取った配当金は簿記3級でも…

どれも自分で直すなら直す箇所で、意味は動いていない。ただし1つ目は判断が要る。原文の「取り戻す」はカギ括弧付きで、書き手が意図して選んだ比喩の可能性がある。機械が消してよい比喩かどうかは人が決めるべきなので、コマンド側は差分を見せるところまでにして、書き戻しは別の操作に分けている。

残っているもの

  • プランの残量をターミナルから見る方法がない/usage は対話画面専用で、ヘッドレスからは呼べない。日次のバッチに組み込むなら、上限に当たったときのエラーを見て判断するしかない
  • 保存のたびに走らせる自動化は見送った。フックで拾えば漏れはなくなるが、書くたびにクォータを消費する。1日に何十回も保存する書き方をしているので、明示的に呼ぶ形のほうが合っている
  • モデルの比較はこれから。今回は gemini-3.8-flash-high だけで確かめた。同じ原稿を gemini-3.1-pro-highclaude-sonnet-4-6 に投げて、どれが日本語の校正に向くかを見てみたい

インストールからここまでで、半日はかかっていない。止まったのはパイプと権限の2か所だけで、どちらも先に知っていれば避けられる。

#Antigravity#Gemini#CLI#日本語#校正