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

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

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

antigravity450agents95bash2workflow40safety

プレミアム記事

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

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/ に降りていれば、その位置がそのまま作業ルートとして引き継がれることがあります。

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

推測で対策を書くと、だいたい別のところがずれます。実際の挙動を見てから決めたいので、使い捨てのディレクトリで再現しました。siteAsiteB と、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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

Tips & 活用術2026-07-10
エージェントへの依頼は、送信ボタンを押す前に大きさを測れる — 差し戻し率から逆算するタスク分割
Antigravity のエージェントが的外れなコードを返すとき、原因はプロンプトの文言ではなくタスクの大きさにあります。依頼文を送信前に採点する Python スコアラーを実装し、80件の依頼ログを後ろ向きに採点して差し戻し率との相関を確かめた記録です。
Tips & 活用術2026-05-11
AIエージェントを「部下」として扱うと何を失うか — 個人開発10年の視点から
エージェントに任せすぎて自力でデバッグができなくなった夜の経験から、思考の外注化が進む3つのサインを整理しました。AI を部下ではなく増幅器として設計する発想、考えさせる前に自分が考えるプロンプト設計を、個人開発10年の視点から述べていきます。
Tips & 活用術2026-04-29
AGENTS.md は週1の失敗ログレビューで磨き続ける — Antigravity を賢くしていく運用ループ
AGENTS.md は最初の1回では仕上がらない、という前提で回している週1・30分の失敗ログレビューの運用です。集めるべき3つの情報、失敗を記述に落とす実例、肥大化を防ぐ3つのルール、階層構造の持たせ方まで、育て続ける運用ループとして紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →