◉ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
⬡ 連携・プラグイン/2026-06-13上級

Antigravity CLI を非対話で回す — CI と cron に載せる前の設計

Gemini CLI の提供終了を機に移行した Antigravity CLI を、CI と cron に載せる前の設計です。対話前提のまま置くと固まる理由、二重起動に耐える冪等性、終了コードと JSON での成否判定、認証情報の安全な渡し方までを扱います。

Antigravity CLI37CI/CD17自動化40headless4運用設計27

✦ プレミアム記事

6 月 18 日に Gemini CLI と Gemini Code Assist の個人向け提供が止まり、後継の Antigravity CLI へ移行することになりました。新しい CLI は Go で書き直され、私の環境では起動が体感で 2〜3 倍速くなりました。手元のターミナルで触る分には、ほぼ置き換えるだけで動きます。

問題は、その先です。私自身、4 つのサイトを 1 台で自動運用していて、エージェント実行を cron と CI に載せています。対話で気持ちよく動くツールほど、無人で回すと静かに詰まります。App Store 向けアプリのリリース作業を自動化していたときも、同じ壁にぶつかりました。プロンプトの確認待ちで止まったまま、ジョブのタイムアウトまで何もしない。そういう事故を何度か踏みました。

この記事は「対話で動いた」から「無人で安心して回せる」までの間にある設計を、終了コード・冪等性・タイムアウト・出力パースの 4 点に絞って書きます。

対話前提のまま CI に置くと、なぜ固まるのか

エージェント CLI は、確認や追加入力を人間に求める前提で作られています。「このファイルを書き換えますか」「コミットしますか」といった問いに、ターミナルなら Enter を押せば済みます。

ところが CI ランナーや cron には、その Enter を押す人がいません。標準入力が TTY ではないため、ツールによっては自動で「いいえ」と解釈して中断したり、逆に入力を待ち続けてハングしたりします。後者が厄介で、ジョブのログには何も出ず、課金時間だけが溶けていきます。

最初にやるべきは、対話の芽を全部摘むことです。

# 確認をすべて自動承認し、標準入力を空にして人間待ちを物理的に不可能にする
antigravity run \
  --prompt-file ./tasks/update-articles.md \
  --yes \
  --no-color \
  --output json < /dev/null

--yes(自動承認フラグ。名称はお使いのバージョンの antigravity --help で確認してください)で確認を飛ばし、< /dev/null で標準入力を空にします。フラグを取りこぼしても、入力が空なら待ち続けることはありません。この二重化が効きます。--no-color は ANSI エスケープがログを汚すのを防ぐためで、後段のパースが楽になります。

二重起動しても壊さない冪等性をどう作るか

無人実行では、同じジョブが重なって走る瞬間が必ず来ます。前回の実行が長引いている最中に次の cron が発火する。CI が再試行で同じコミットを 2 回処理する。こうした重複が、同じファイルへの二重コミットや、途中状態のプッシュを生みます。この落とし穴を回避する設計を、最初から組み込んでおきます。

対策は二段構えにしています。ひとつは実行そのものの排他、もうひとつは結果の冪等性です。

排他はロックファイルで取ります。

LOCK="/tmp/antigravity-articles.lock"
# flock で多重起動を防ぐ。-n は待たずに即座に諦める指定
exec 9>"$LOCK"
if ! flock -n 9; then
  echo "別の実行が進行中のためスキップします"
  exit 0
fi
# ここから先は同時に 1 つだけが通過する
antigravity run --prompt-file ./tasks/update-articles.md --yes --output json < /dev/null

結果の冪等性は、出力先を「実行ごとにユニーク」にして担保します。固定名のファイルに追記する設計は、前回の残骸が混入する事故を生みやすいので避けます。私はスラッグを含む一意名で書き出し、最後に検証してから本来の場所へ移すようにしています。Dolice の運用では、この一手間を入れてから途中状態のコミットが消えました。

✦

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

この記事の続きを読む

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

この記事で得られること
✦無人実行が途中で人間の入力を待って固まる事故を、--yes と入力遮断の二重化で塞ぐ具体策
✦同じトリガーが二重発火しても安全な、ロックファイルと冪等キーによる排他制御の実装
✦終了コードと JSON 出力で成否を機械判定し、失敗時だけ通知する 30 行のラッパー
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 連携・プラグイン2026-09-12
Antigravity CLI 1.1.28 で print-timeout 超過が成功終了になりました — 無人実行の判定を見直す
1.1.28 から --print-timeout の超過は例外ではなく、部分出力を返しての正常終了になりました。外部 URL の取得も既定で承認待ちです。終了コードだけで成否を決めている無人実行を、どう組み直したかを書き残します。
⬡ 連携・プラグイン2026-08-22
stream-json 入力で Antigravity CLI を外部から回すとき、会話をどこで切るか
print モードに加わった --input-format stream-json は、外部のドライバがセッションを開いたまま一件ずつ流せる仕組みです。24 件のジョブで会話が抱える量を計測し、バイト予算だけで切ると仕事の途中で文脈が切れることを確かめ、切る単位の決め方を整理します。
⬡ 連携・プラグイン2026-10-10
Figma MCP と Stitch MCP、どちらを繋ぐか — 「画面がすでにあるか」で決める線引き
画面をコードに起こすとき、Figma MCP と Stitch MCP のどちらを Antigravity に繋ぐか。判断の軸は「正解の画面がすでにあるか」の一点です。両方を常時つなぐと何が起きるか、切り替えの手順、迷ったときの小さな判定スクリプトまでをまとめます。