◉ANTIGRAVITY LABEN
記事一覧/Tips & 活用術
✦ Tips & 活用術/2026-09-02中級

エージェントに複数リポジトリを触らせる前に置く、作業ルートの番人

複数のリポジトリを一台で扱うとき、エージェントの作業ルートは驚くほど簡単に取り違えられます。実体パスで照合する小さなガードを、7つの入力パターンで検証しながら組み立てます。

antigravity466agents100bashworkflow41safety

✦ プレミアム記事

ディスクの残りが少なくなったとき、古い作業コピーを片付ける小さな処理を書きました。今このリポジトリで作業しているのだから、それだけは残して、兄弟のディレクトリを消せばよいはずだと考えて書いた行が、これです。

for OTHER in /tmp/repos/*; do
  [ "$OTHER" = "$WORK" ] && continue
  rm -rf "$OTHER"
done

個人開発で iOS と Android のアプリ、それに複数のサイトのリポジトリを一台で回していると、作業コピーは常に4つも5つも同居します。この行は、そのうち1つだけを守るつもりで書いたものでした。

守れていませんでした。$WORK の末尾にスラッシュが1つ付いているだけで、この比較は一度も成立しません。

取り違えが入り込む3つの入口

作業ルートの取り違えは、派手な事故として起きません。文字列としては違うのに実体としては同じ、あるいはその逆という、ごく地味なずれから入ってきます。私が実際に踏んだ入口は3つでした。

表記ゆれ

/tmp/repos/siteA と /tmp/repos/siteA/ は、シェルにとって別の文字列です。パスを組み立てる箇所が2つ以上あると、片方だけに末尾スラッシュが残ることは珍しくありません。

シンボリックリンクの別名

作業しやすいように別名を張っておくと、その別名で渡されたパスは元のディレクトリと文字列一致しません。

引き継がれた深さ

エージェントにリポジトリのルートを渡したつもりでも、直前のタスクで src/ に降りていれば、その位置がそのまま作業ルートとして引き継がれることがあります。

小さな砂場で、何が起きるかを見る

推測で対策を書くと、だいたい別のところがずれます。実際の挙動を見てから決めたいので、使い捨てのディレクトリで再現しました。siteA・siteB と、siteA を指すシンボリックリンクを置いた状態です。

T=$(mktemp -d); cd "$T"
mkdir -p repos/siteA repos/siteB
ln -s "$T/repos/siteA" repos/siteA-link
 
WORK="$T/repos/siteA/"          # 末尾スラッシュ付き
for OTHER in "$T"/repos/*; do
  if [ "$OTHER" = "$WORK" ]; then echo "  skip(self): $OTHER"
  else echo "  DELETE候補: $OTHER"; fi
done

出力はこうなりました。

  DELETE候補: /tmp/tmp.vFHcRXrU5D/repos/siteA
  DELETE候補: /tmp/tmp.vFHcRXrU5D/repos/siteA-link
  DELETE候補: /tmp/tmp.vFHcRXrU5D/repos/siteB

守るつもりだった siteA が、削除候補の先頭に並んでいます。skip(self) は一度も出ていません。

同じループを realpath で正規化してから比較すると、結果が変わります。

WORK_R=$(realpath "$WORK")
for OTHER in "$T"/repos/*; do
  OR=$(realpath "$OTHER")
  if [ "$OR" = "$WORK_R" ]; then echo "  skip(self): $OTHER -> $OR"
  else echo "  DELETE候補: $OTHER -> $OR"; fi
done
  skip(self): .../repos/siteA      -> .../repos/siteA
  skip(self): .../repos/siteA-link -> .../repos/siteA
  DELETE候補: .../repos/siteB      -> .../repos/siteB

末尾スラッシュが落ち、シンボリックリンクが解決され、siteA を指す2つの入口が両方とも skip 側へ回りました。比較の前に一度だけ実体へ落とします。対策の芯はここだけです。

✦

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

この記事の続きを読む

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

この記事で得られること
✦複数のリポジトリを一台で扱うとき、エージェントの作業ルートが取り違えられる条件を、自分の環境で見分けられるようになる
✦消してはいけない作業コピーを消してしまう前に、掃除する側の処理へ実体パスの照合を組み込めるようになる
✦7つの入力パターンに対して意図した終了コードを返すガードを、自分のリポジトリ構成に合わせて書き換えられるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ Agents & Manager2026-09-04
エージェントの実効スコープを書き出しておくと、既定が変わった日に気づけます
Antigravity 1.1.25 で、Markdown 定義のカスタムエージェントが既定で周囲のスキル・ルール・サブエージェントを継承するようになりました。絞ったつもりのエージェントが更新後に広がっていないかを、実効スコープの JSON スナップショットと差分で確かめる手順を書き残します。
◈ Agents & Manager2026-05-10
Antigravity でエージェントと「完了」を合意する — Definition of Done をプロンプトに書き込む実践
Antigravity のエージェントが「途中までしか動かないコード」を返してくる原因の多くは、Definition of Done が共有されていないことにあります。3つの層で完了条件を組み立てて、プロンプトに書き込む実践方法をまとめました。
◈ Agents & Manager2026-04-28
Antigravity のエージェントを途中で止めるとき:作業を捨てずに中断・再開する手順
エージェントが違う方向へ進み始めたとき、止めるべきかを5秒で見分けるサインと、未保存の編集を失わずに中断・再開する3段階の手順をお伝えします。中断後に確認すべき状態や、止める前に仕込んでおくと差が出る2つの習慣まで、実践に沿ってまとめました。