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

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

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

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

プレミアム記事

夜間バッチを直列で回していた頃、一番遅い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

statequeued / 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-17
複数案を出させたあと、どれを採用するか — 検証で裁定する Best-of-N の設計
Gemini 3.5 Flash の速さで、同じ実装を複数案つくらせるのは現実的になりました。難しいのは生成ではなく裁定です。多数決でも自己申告の自信でもなく、検証可能な信号だけで採用案を決める Best-of-N アービターの設計と TypeScript 実装を共有します。
Agents & Manager2026-06-17
どのエージェントがいくら使ったかを会計する — タスク別コスト帰属の設計
月末の請求は1つの数字でも、Gemini 3.5 Flash で複数エージェントを走らせていると、どのタスクが費用を食ったかが見えません。予算で止めるガードとは別に、使用量をタスク別・サイト別の原価へ帰属させる会計設計を、個人運用の実装と数値で共有します。
Agents & Manager2026-06-17
並行エージェントの動きを後から辿る — 構造化ログとスパンで作る可観測性
Antigravity 2.0 のデスクトップで複数エージェントを並行させると、どれが何をしているか追えなくなります。混線する print デバッグを捨て、run_id と span で実行を後から辿れるようにする可観測性の設計を、個人運用の実装と数値で共有します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →