私は普段、Dolice Labs という 4 つの AI 技術ブログを横断して保守しています。Claude Lab、Gemini Lab、Antigravity Lab、Rork Lab — どれも Next.js 16 + Cloudflare Workers の似た構成ですが、tsconfig.json のパスエイリアス、pricing.ts の Stripe Price ID、generate-content.mjs の挙動は微妙に違います。
最初は 4 つのウィンドウを並べて作業していました。ただ、Antigravity の Manager Surface に「Claude Lab の記事生成タスクと同じものを Gemini Lab に移植して」と頼みたい場面がよくあり、ウィンドウを跨ぐと AI が文脈を見失ってしまうのが地味に痛かったのです。
そこで Multi-root Workspace に統合したところ、別の落とし穴に出会いました。今度は AI が別サイトの pricing.ts を引いてきて、Claude Lab に Gemini Lab の Price ID を貼ってしまうのです。ここでは私が実際に 4 サイト構成で詰まった事例と、.antigravity/rules をフォルダ単位に切り分けて解決した方法をまとめます。
Multi-root Workspace は「フォルダの集合」であって「単一プロジェクト」ではない
VS Code 由来の Multi-root Workspace は、.code-workspace ファイル(Antigravity では .antigravity-workspace)に複数のフォルダパスを書くだけのシンプルな仕組みです。
// dolice-labs.antigravity-workspace
{
"folders": [
{ "path": "claudelab.net", "name": "Claude Lab" },
{ "path": "gemilab.net", "name": "Gemini Lab" },
{ "path": "antigravitylab.net", "name": "Antigravity Lab" },
{ "path": "rorklab.net", "name": "Rork Lab" }
],
"settings": {
"files.exclude": {
"**/.next": true,
"**/node_modules": true
}
}
}ここで重要なのは、Antigravity の AI 機能は workspace 全体をひとつのコンテキストとして扱うということです。Editor View で Cmd+I を叩いた瞬間、AI は開いているファイルだけでなく、4 サイト全体のコードを参照する候補として持っています。
つまり、何も対策をしなければ、Claude Lab のファイルを編集中に「Gemini Lab で動いた書き方」が混入する可能性があるわけです。これが私が最初に踏んだ落とし穴でした。
AI コンテキストが実際に混線するケース
実例を 1 つ挙げます。Claude Lab の src/config/pricing.ts を編集していたとき、Cmd+K で「Premium プランの Price ID を新しい Stripe ダッシュボードの値に置き換えて」と頼んだところ、AI は price_1QabcXY...(実際は Gemini Lab の値)を提案してきました。
なぜそうなったか、Manager Surface の Reasoning Trace を辿ると分かりやすいです。
- 直前に Gemini Lab の
pricing.tsを眺めていた(タブが開いていた) - 4 サイトの
pricing.tsはファイル名・型定義が同一 - AI は「最も最近編集された pricing.ts」を参考にしてしまう
ファイル名が完全一致していると、AI は「どちらのリポジトリ由来か」を強く区別しません。Manager Surface のシステムプロンプトには workspace 全体のディレクトリツリーが含まれているため、pricing.ts という名前を見ると 4 つの候補すべてが等価になってしまうのです。
これは公式ドキュメントには書かれていない挙動ですが、Multi-root で複数の似た構成のリポジトリを開くなら、かなり高い確率で起きます。
解決策その 1: フォルダ単位に .antigravity/rules を置く
最もシンプルで効果が大きかったのは、各フォルダのルートに .antigravity/rules.md を置くことでした。
<!-- claudelab.net/.antigravity/rules.md -->
# Claude Lab 固有のコンテキスト
このフォルダは claudelab.net のリポジトリです。
- Stripe Price ID は `src/config/pricing.ts` にあります
- 他サイト(gemilab, antigravitylab, rorklab)の Price ID を**絶対に**ここに混入させないでください
- カテゴリ ID は claude-ai / claude-code / cowork / api-sdk のみ
- 記事のフロントマター `category` は上記 4 つ以外を絶対に使わないでくださいAntigravity は、現在編集中のファイルが含まれるフォルダの .antigravity/rules.md を、AI のシステムプロンプトに自動で追加します。@-references を手で貼らなくても効きます。
私はこれを 4 サイトすべてに置き、それぞれの「絶対に混ぜてはいけないこと」を 5〜10 行で書いています。Cmd+K の精度は体感で 30〜40% 向上しました。誤った Price ID の混入は、置いてから 1 度も起きていません。
解決策その 2: Manager Surface で @folder 参照を明示する
長めの作業を Manager に頼むときは、@folder:claudelab.net のように明示参照を最初に書きます。
@folder:claudelab.net
claudelab.net 配下で、_skills/claudelab/SKILL.md の Step 7 を、
gemilab.net の同名ファイルと差分を取り、claudelab 側を最新に揃えてください。
他サイトのファイルは絶対に編集しないでください。@folder: を最初に書くと、Manager は最初のアクションを必ずそのフォルダ内で開始します。これは私が試行錯誤の末に見つけた書き方ですが、@folder: を書かないと Manager が「全 workspace でファイル探索」から始めてしまい、無関係な編集が混じる確率が上がるのです。
副次的な効果として、Manager の actions ログを後から見返したときに、どのフォルダの作業だったかが明確になります。複数フォルダを跨ぐタスクが当たり前になるほど、こうした「最初の宣言」の価値が大きくなります。
解決策その 3: files.watcherExclude を workspace で絞る
これは AI コンテキストではなくパフォーマンスの話ですが、Multi-root では同じくらい大事でした。
// dolice-labs.antigravity-workspace
{
"settings": {
"files.watcherExclude": {
"**/.next/**": true,
"**/node_modules/**": true,
"**/.wrangler/**": true,
"**/_cache/**": true,
"**/_backup/**": true
},
"search.exclude": {
"**/_cache": true,
"**/_backup": true,
"**/public/content": true
}
}
}Antigravity の semantic code search は workspace 全体をインデックス化するため、4 サイトの node_modules を含めると初回起動で 30 GB 近く読み込みに行きます。search.exclude を絞ると初回スキャンが 5〜8 分から 40 秒程度に短縮されました。files.watcherExclude の方は CPU 使用率と直結します。
ここでハマりやすいのは、フォルダ個別の .vscode/settings.json ではなく、.antigravity-workspace の settings に書く必要があることです。フォルダ個別設定は AI の semantic search には反映されません。
4 サイト横断で気づいた運用ルール
3 ヶ月ほど Multi-root で運用してみて、自分なりに固まったルールが 2 つあります。
1 つは、「同じ役割のファイルは同じ名前で揃えるが、.antigravity/rules.md で区別を強制する」 ということ。pricing.ts を pricing-claude.ts のように分けたくなる衝動はあるのですが、それをやると共通改善の伝播コストが跳ね上がります。ファイル名は揃えたまま、AI に「混ぜてはいけない」を教える方が長期では楽でした。
もう 1 つは、「マルチサイト共通の作業は workspace ルートに .antigravity/rules-global.md を置く」 ということ。たとえば「pricing.ts を変更したら 4 サイト全てに同期する」というルールはここに書いておきます。Antigravity は workspace のルート直下も .antigravity フォルダを読み込みます。
このあたりは Antigravity の Custom Rules でプロジェクト設定を最適化する方法 と組み合わせると、さらに効きます。@-reference の仕組みは @ リファレンスでコンテキスト精度を上げる方法 に詳しく書きました。
次のアクション
もしすでに Multi-root Workspace を使っているなら、今日のうちに各フォルダのルートに .antigravity/rules.md を 5 行だけ書いてみてください。「このフォルダは何のリポジトリで、何を絶対に混ぜてはいけないか」を書くだけで、Cmd+K と Manager の精度が体感で変わります。
私自身、Multi-root の使い方は今も少しずつ更新しています。同じように複数リポジトリを跨いで開発している方の参考になれば嬉しいです。お読みいただきありがとうございました。