◉ANTIGRAVITY LABEN
記事一覧/Agents & Manager
◈ Agents & Manager/2026-06-16上級

agy の非同期ジョブで夜間タスクを束ねる — fan-out・poll・join の運用設計

Go 製になった Antigravity CLI(agy)は、ジョブをデタッチして非同期に走らせられます。複数の長時間タスクを一度に投げ、ジョブIDを束ね、完了をポーリングで待ち合わせる fan-out・poll・join の運用設計を、実際の夜間バッチの構成とともに共有します。

antigravity464CLI7agy5非同期ジョブ管理オーケストレーション7運用設計27

✦ プレミアム記事

夜間バッチを直列で回していた頃、一番遅い1本が全体を律速していました。記事生成、リンク監査、AdMob のメディエーション比較レポート、スクリーンショットの多言語差し替え。どれも独立した作業なのに、前のジョブが終わるまで次が始まらないので、合計すると朝までかかることがありました。

6/18 に Gemini CLI が止まり、Go 製の Antigravity CLI(agy)へ移したのを機に、この直列の構造そのものを見直しました。agy はジョブをデタッチして非同期に走らせられます。つまり「投げて、IDを覚えて、あとで待ち合わせる」という組み立てができます。

ここでは、その fan-out(一斉投入)・poll(状態確認)・join(待ち合わせ)を、個人開発の運用に耐える形でどう設計したかを共有します。派手な並列フレームワークは使いません。agy が返すジョブIDと、それを束ねる小さなシェルだけです。

直列待ちが律速する構造を、まず数字で見る

最初に、何を直していたのかを数字にしました。夜間ジョブは12本。直列で回すと、各ジョブの実時間の単純合計がそのまま総所要時間になります。

私の環境では、12本の合計が平均で約214分でした。ところが各ジョブのCPU・ネットワークの占有率は低く、待ち時間が大半を占めていました。LLM の応答待ち、API のレート制限の合間、git の push 完了待ち。どれも「手は空いているのに次へ進めない」時間です。

非同期に並行で投げれば、総所要時間は「最も遅い1本+わずかなオーバーヘッド」に近づきます。実測では214分が約79分になりました。短縮率はおよそ63%です。重要なのは、各ジョブを速くしたのではなく、待ち時間を重ねただけだという点です。

agy の非同期ジョブが返すもの

agy run には、ジョブをフォアグラウンドで実行する通常モードと、デタッチして即座に制御を返す --detach があります。デタッチすると、標準出力にジョブIDが1行返ります。

# フォアグラウンド(従来): 完了までブロックする
agy run --task "generate article: antigravity cli async jobs" --model gemini-3.5-flash
 
# デタッチ: 即座にジョブIDを返し、バックグラウンドで継続する
JOB_ID=$(agy run --detach --json \
  --task "generate article: antigravity cli async jobs" \
  --model gemini-3.5-flash | jq -r '.job_id')
echo "submitted: $JOB_ID"

--json を付けると、人間向けの装飾ではなく機械可読な1オブジェクトが返ります。スクリプトで扱うときは必ず --json を付けてください。装飾付きの出力を grep で拾う実装は、CLI の表示が少し変わっただけで壊れます。

ジョブの状態は agy jobs で取れます。

# 単一ジョブの状態
agy jobs get "$JOB_ID" --json
# => {"job_id":"j_8f3a","state":"running","exit_code":null,"started_at":"..."}
 
# 全ジョブの一覧
agy jobs list --json

state は queued / running / succeeded / failed / cancelled のいずれかを返します。exit_code は終了後にのみ数値が入ります。この2つを軸に待ち合わせを組み立てます。

✦

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

この記事の続きを読む

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

この記事で得られること
✦agy run --detach が返すジョブIDを配列に束ね、agy jobs で状態を取得する fan-out → poll → join のシェル実装一式を取得できます
✦ポーリング間隔を指数的に伸ばし、タイムアウトと部分失敗を分けて扱う待ち合わせループの設計と、本番で踏んだ落とし穴を学べます
✦12本の夜間ジョブを直列から非同期並行に切り替えて総所要時間を約63%短縮した、待ち合わせ運用の判断基準が分かります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ Agents & Manager2026-06-01
並行エージェントのトークンコストを予算で抑える — 暴走を止めるバジェットガードの設計
複数のエージェントを並行で走らせると、トークン費は気づかないうちに膨らみます。トークンを減らす最適化ではなく、予算で消費を遮断するガバナンス層を Antigravity の並列エージェントに組み込む設計と実装を、運用で決めた閾値とともに共有します。
▣ アプリ開発2026-10-08
agy CLI をコンテナで動かす前に、擬似 agy で確かめておく 3 つの安全網
Antigravity CLI(agy)を Docker や Cloud Run のジョブから呼ぶ前に、インストーラーの取りこぼし・承認待ちの固まり・終了コード 0 の空振りを、擬似 agy で再現して潰します。公式 docs の記述と、手元で実行した結果だけを根拠に組み立てた手順です。
◈ Agents & Manager2026-10-13
「いつもの感覚」で決めている判断を、エージェントに渡せる文章に直す手順
頭の中だけにある判断基準を、Antigravity のエージェントが同じように使える文章へ直す手順です。過去の事例で試し、ずれた箇所だけ直す小さな検証つきです。