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

Antigravity を個人開発の「夜のもう1人」として迎え入れる運用モデル

Antigravity のエージェントを、個人開発者にとっての「夜のもう1人」として運用するための設計指針。タスクの渡し方・境界線の引き方・朝の3点確認をスクリプトにする方法まで、実際に運用して整えてきた手順を書き残します。

Antigravity386エージェント74個人開発108自動化40運用設計27

寝る前にタスクを1つ渡すと、朝にはそれがブランチに積まれています。Antigravity を個人開発に組み込んでから、この夜の受け渡しが生活の一部になりました。日中は設計と方向性の判断に使い、手を動かす作業の一部を夜のエージェントに預けております。そういうリズムです。

ただ、夜間運用は油断するとあっさり破綻します。曖昧なタスクを投げて寝た翌朝、見当違いの大きな変更がブランチに積み上がっていた、ということは私自身も何度か経験しました。Antigravity を「夜のもう1人」として迎え入れるには、人間の新しい同僚を迎えるときと同じ気持ちで境界線を引く必要があります。

ここでは、個人開発でこのスタイルを成立させるために整えてきた運用モデルを書き残します。公式ドキュメントには書かれていない、夜間運用の実際のところです。

なぜ「夜のもう1人」という比喩が役立つのか

Antigravity をエージェント機能の集合として見ると、設定項目が多くて圧倒されます。私はあるときから視点を変えて、「人を雇うつもりで設計する」と決めました。具体的には、Antigravity に夜勤シフトを任せる新人エンジニアだとして、何を任せるか、どこまで任せるかを線引きするのです。

この比喩が便利なのは、判断のたびに「もしこれが本当の人間だったら」と置き換えられる点にあります。人間の夜勤に対していきなり本番デプロイ権限を渡す上司はいません。同じように、Antigravity にも段階的に責任を渡していくのが自然です。私は最初の数週間、Antigravity に書かせるのはブランチへのコミットのみで、main への push は朝の私が責任を持って実行する、というルールで運用していました。

「夜のもう1人」という言葉に置き換えるだけで、Antigravity の運用判断が驚くほど直感的になります。技術的な議論よりも、まずこの視点を持つことを強くお勧めします。

夜間に渡せるタスク・渡せないタスクの境界線

私が半年ほど運用してきて見えた、夜間に Antigravity に渡せるタスクの輪郭はだいたい次のような形です。

夜間に渡してよい:

  • 仕様が言語で十分に書き切れているタスク
  • 失敗しても元に戻すコストが低いタスク
  • 観察可能な完了条件があるタスク(テストが通る・特定のファイルが生成される など)

夜間に渡すべきでないタスク:

  • 仕様が「だいたいこんな感じ」止まりのタスク
  • 影響範囲が広いリファクタリング
  • 本番データに副作用が出るタスク

ここで重要なのは、「複雑だから渡せない」のではなく「曖昧だから渡せない」という点です。複雑でも、入口と出口が言葉で固定できているタスクなら、Antigravity は夜間でも安定して進めてくれます。逆に、難易度が低くても「やってみてうまくいったら、いい感じに整えておいて」のような指示は、ほぼ確実に翌朝の手戻りにつながります。

夜間タスクを設計する時、私は次の質問を必ず自分に問います。

このタスクが完了したかどうかを、私が朝起きて30秒で判定できる完了条件があるか?

この質問に「はい」と即答できないなら、そのタスクは夜間に渡してはいけません。

タスク指示書の最小構成

Antigravity に夜間タスクを渡す時、私は以下の最小構成で「指示書」を書いています。

## 目的
何のためにこのタスクをやるのか(1〜2行)

## 完了条件
- 朝起きて30秒で判定できる、観察可能な条件
- 例: 特定のテストが通る / 特定のファイルが生成されている

## 触ってよいスコープ
- 触ってよいディレクトリ・ファイル
- 触ってはいけない領域(本番コード・課金・認証など)

## 失敗した時の振る舞い
- 中途半端な状態で止めず、ブランチを作って退避してから停止する
- main / production には触らない

## 参照すべきコンテキスト
- 関連ドキュメント・既存実装の場所

たった5項目ですが、ここを丁寧に書くと夜間運用が一気に安定します。とくに「触ってよいスコープ」と「失敗した時の振る舞い」は明示しておくと、翌朝の私が驚かされる確率が大きく減ります。

私は最初、ここをサボって「やっておいて」と短く書いていました。それで見当違いな改修が積み上がっていた経験から、5項目テンプレに行き着きました。短くてもこの5項目を埋める方が、結局は速いのです。

実際に渡した夜間タスクの一例

抽象論だけだと像を結びにくいので、先日実際に渡したタスクを1つ書きます。

やってもらったのは、オンボーディング画面の文言を日英中の3言語ぶん locales/ 配下の JSON に整理し、キーの欠けを埋める作業でした。指示書はこうです。目的は「3言語の i18n キーを揃える」。完了条件は「pnpm test:i18n が緑になる」。触ってよいスコープは locales/ と対応する型定義ファイルのみとし、src/ の実装コードには触らないと書きました。失敗時はブランチに退避して停止です。

朝に開いたのは作業ログと diff だけです。変更は14ファイル、テストは緑、触ったのは指定したスコープの中だけ。ここまで30秒で確認でき、中身を一行ずつ読むことなく次に進めました。

逆に、これを「オンボーディングまわりの文言、いい感じに多言語対応しておいて」と渡していたら、実装コードにまで手が伸びて、朝の私は差分を全部読み直す羽目になっていたはずです。同じ機能でも、入口と出口を言葉で固定できるかどうかで、夜間に渡せるタスクかどうかが決まります。

「中断点」をあらかじめ決めておく

夜間運用で意外と重要なのが、中断点をあらかじめ決めておくことです。Antigravity は完走しようとして頑張ってくれますが、長時間走らせると判断の精度が落ちる場面もあります。私は次のような中断点を仕込んでおくようにしています。

  • ファイル変更が30個を超えたら、そこまでで一度コミットして停止
  • 同じテストの3回目の失敗で、ログを残して停止
  • スコープ外のディレクトリに触ろうとしたら、即停止

この中断点は Antigravity への指示文に明示するか、エージェント側のルール設定に組み込みます。「いい感じに頑張って」ではなく、「ここを越えたら止まれ」と明示する方が、結果として安定して進みます。

これは人間の新人にも近い話です。「困ったら相談して」と言うより、「この閾値を越えたら必ず相談して」と決めておく方が、夜勤シフトはうまく回ります。

朝のレビューを5分以内に終わらせる仕組み

夜間運用を継続するには、朝のレビューが軽くなければいけません。レビューに毎朝30分かかると、運用が続きません。私は次のようにして、5分以内に「何が終わって何がリスクか」を判定できる仕組みを作っています。

朝に最初に開くのは、Antigravity が出した作業ログとブランチの diff だけです。コードを直接読み始める前に、次の3つを見ます。

  1. 完了条件は満たされているか(指示書に書いた30秒判定の条件)
  2. 触ったファイルは「触ってよいスコープ」の中に収まっているか
  3. 中断点に引っかかった記録があるか

この3点が問題なければ、私は内容を細かく読まずに次のステップへ進めます。逆にどれかが外れていたら、その時点でブランチを破棄するか、自分で手動で修正する判断をします。

「コードを読んでから判断する」のではなく、「メタ情報で先に判断する」という順番が、朝のレビュー時間を明確に短くします。これは Antigravity を信用していないからではなく、信用するかどうかを毎朝ゼロから検証しないための仕組みです。

3点確認を、目ではなくスクリプトに任せる

この3点を毎朝目で追っていた時期がありました。ところが、眠気の残る目は「触ってよいスコープ」の判定をいちばん甘くします——locales/ の隣にある src/i18n/ の1ファイルを見落としたのは、私自身です。気づいたのは、その変更が原因の表示崩れを、週の半ばにユーザーから指摘されたあとでした。

それ以来、3点確認は短いシェルスクリプトに置き換えております。指示書の「完了条件」「触ってよいスコープ」「中断点」を、そのままスクリプトの引数にする形です。

#!/usr/bin/env bash
# morning-check.sh — 夜間タスクの朝の3点確認
# 使い方: ./morning-check.sh <ブランチ> <作業ログ> "<完了条件コマンド>" <許可パス...>
# 例:    ./morning-check.sh agent/i18n-keys .agent/worklog.md "pnpm test:i18n" locales/ types/i18n.d.ts
set -u
BRANCH="$1"; WORKLOG="$2"; DONE_CMD="$3"; shift 3
ALLOWED=("$@")
NG=0
 
# 1. 完了条件(指示書に書いた30秒判定のコマンドをそのまま実行)
if git checkout -q "$BRANCH" && bash -c "$DONE_CMD" >/dev/null 2>&1; then
  echo "✅ 1. 完了条件: $DONE_CMD"
else
  echo "❌ 1. 完了条件が満たされていません: $DONE_CMD"; NG=1
fi
 
# 2. スコープ(main からの差分ファイルが、許可パスのいずれかで始まるか)
while IFS= read -r f; do
  ok=0
  for p in "${ALLOWED[@]}"; do [[ "$f" == "$p"* ]] && ok=1 && break; done
  if [ "$ok" -eq 0 ]; then echo "❌ 2. スコープ外の変更: $f"; NG=1; fi
done < <(git diff --name-only "main...$BRANCH")
[ "$NG" -eq 0 ] && echo "✅ 2. 変更は許可パスの中だけ($(git diff --name-only "main...$BRANCH" | wc -l | tr -d ' ') ファイル)"
 
# 3. 中断点(作業ログに STOP: 行があれば、その理由を表示して止める)
if grep -q '^STOP:' "$WORKLOG" 2>/dev/null; then
  echo "⚠️ 3. 中断点に到達しています:"; grep '^STOP:' "$WORKLOG"; NG=1
else
  echo "✅ 3. 中断点の記録なし"
fi
 
exit "$NG"

3点目の STOP: 行は、指示書の「失敗した時の振る舞い」に「停止するときは作業ログの行頭に STOP: 理由 を1行書く」と足しておくと、エージェント側が揃えてくれます。人間が読むための文章ではなく、grep が拾うための1行——このひと言を指示書に入れるかどうかで、朝の判定が目視から機械に移ります。

スクリプトが 0 で終われば、私は diff の中身を読まずに次へ進みます。1 で終わった朝だけ、腰を据えて読むのです。朝に読むのはコードではなく、スクリプトの終了コード。 この線引きにしてから、レビューが5分を超える朝はほとんどなくなりました。

なお、スコープの判定を git diff --name-only に寄せているのは、エージェントが「触った」と自己申告した一覧を信じないためです。ログは書き忘れることがありますが、差分は忘れません。

バージョンの進化で、夜の任せ方が変わった

夜間運用は Antigravity 本体の更新にも助けられています。効いた点を3つ挙げます。

1つ目は、メッセージのキューイングです(2.3.0)。エージェントが作業中でも次の指示を積んでおけるようになり、「1本目が終わったら2本目」という夜のタスク列を、寝る前にまとめて仕込めるようになりました。すぐ送りたいものは Send Now で割り込ませます。夜間に複数タスクを順番に消化させたいときに素直です。

2つ目は、一過性エラーへの向き合い方です。無人で長時間走らせると、一時的なエラーで止まっているのを朝に発見する、という取りこぼしが起きがちでした。バックエンド過負荷時の自動リトライが入ってからこの種の朝は減り、さらに 2.14.0(2026-09-15)では、サービスエラー1件でセッションが終了していた挙動が、約12分のバックオフ付きで再試行する形に変わりました。「気づかないまま止まっていた」朝は、いまではかなり珍しくなっています。

3つ目は、地味ですがトークン計上のバグ修正です。以前は長時間の実行で想定より早く上限に届く挙動があり、夜のタスク列が途中で止まる一因になっていました。修正後は消費の見積もりが素直になったので、夜間に何本積めるかを一度測り直しておくと安心です。

もう1点、CLI から夜のタスクを流している方には見逃せない変更があります。CLI 1.2.6(2026-09-18)でヘッドレス実行(-p)の既定タイムアウトが5分から無制限になり、失敗時の終了コードが 1 から 3 に変わりました。夜のパイプラインで $? -eq 1 を見て分岐していた方は、その行を直さないまま走らせると、失敗した夜が「成功」として朝を迎えるかもしれません。

いずれも派手な新機能ではありませんが、「無人で回す」前提だと効き方が大きい類の変更です。夜のタスク列を組む前に、自分の環境が最新版かどうかを確かめておくとよいと思います。

エージェントに任せないラインを言語化する

Antigravity を長く相棒として使い続けるために大切なのが、「エージェントに任せないライン」を言語化することです。私の場合は次のようなラインを引いています。

  • プロダクトの方向性に関わる判断(料金・対象ユーザー・コンセプト)
  • 課金・認証・個人情報を扱うコードのレビュー
  • リリース判断と本番デプロイのトリガー
  • ドメイン知識のドキュメント化(自分の頭で言語化することに価値がある)

これらは効率を優先すれば Antigravity に任せられそうな領域もありますが、私はあえて任せないと決めています。理由は、これらを自分で考え続けることが、個人開発者としての「目」を維持するために必要だと思うからです。Antigravity を相棒にしながら、相棒に飲まれない距離感を持ちたいのです。それが長期運用の鍵だと感じています。

逆に言えば、ここに含まれない領域については遠慮なく Antigravity に任せます。境界線がはっきりしていれば、任せる側にも任せられる側にも安心感が生まれます。これは人間の同僚との関係構築と何も変わりません。

半年運用してみて何が変わったか

このスタイルを半年続けて変わったのは、開発のリズムです。日中は設計と方向性の判断に集中し、夜間は Antigravity が手を動かしてくれます。朝は短いレビューで合意点を確認して、また日中の判断に戻ります。このリズムが定着してから、個人開発でありながら「複数のサービスを並行して進められる」感覚が現実味を帯びてきました。

もうひとつ変わったのは、自分が「何を作りたいのか」をより頻繁に言語化するようになったことです。Antigravity に夜のタスクを渡すには指示書を書く必要があり、指示書を書くには目的をはっきりさせる必要があります。この作業を毎日続けると、自分の作品に対する解像度が上がっていきます。これは予期していなかった副産物でした。

夜間運用を試すなら、いきなり大きなタスクを渡さないことをお勧めします。まずは失敗しても戻せる小さなタスクを1つ、5項目の指示書に落として一晩預けてみてください。翌朝、上の morning-check.sh が 0 で終わる手応えを一度つかめば、渡せるタスクの輪郭は自分の手元で見えてくるはずです。

私自身まだ運用を整えている途中ですが、夜の受け渡しが噛み合ったときの静かな心強さは、個人開発の景色を確かに変えてくれました。ここまで付き合ってくださった皆さまの夜が、少しでも軽くなれば嬉しく思います。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

◈ Agents & Manager2026-10-16
エージェントに .zip を渡す前に、.git を除いて 29 MB を 15 MB にし、秘密情報の警告 28 件を見分けました
Antigravity アプリ v2.23.0 で .zip を添付できるようになりました。自分のリポジトリを実際に固めて .git の重さと秘密情報検査の誤検知を数え、除外・検査・マニフェストを一度に行う Python スクリプトの全文を残します。
◈ Agents & Manager2026-10-14
位置で読む API 応答を変えるとき、出荷済みの旧版を起動時に落とさないための門番を置きました
壁紙アプリのように、サーバーの一覧応答を「何番目の項目か」で読むクライアントは、出荷済みの旧版が長く残ります。項目の削除や並び替えで旧版を起動時に落とさないよう、末尾追加だけを通す検査と、出荷済みの版ディレクトリを凍結する台帳の作り方を、動かした出力つきで書き残します。
◈ Agents & Manager2026-10-14
エージェントの PR は人の PR より待たされると思っていましたが、公開リポジトリの 246 件を数えると逆でした
dotnet/runtime の 2026 年 7〜8 月の PR 246 件で、エージェントが開いた PR の「最初の人の反応」までの時間を人の PR と比べました。計測スクリプトと、個人開発向けの滞留チェックまで載せています。