ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-08-30上級

@ 取り込みで規約ファイルを分けたとき、何が減って何が減らないか

Antigravity 2.11.0 の @path/to/file 取り込みで規約ファイルを分割し、実際のリポジトリ群で分割前後を計測しました。保守量は62%減った一方、1セッションの読み込み量は1.7%しか減りません。解決基準の取り違えが欠落として現れる仕組みと、その検出コードまで。

Antigravity358AGENTS.md13エージェント設計20モノレポ設定管理4

プレミアム記事

同じ注意書きを4つ目のファイルに書き写しているとき、手が止まりました。

4つの静的サイトのリポジトリを、それぞれ別の規約ファイルで扱っています。書き出しは違うのに、真ん中から先はほとんど同じことが書いてある。1つ直すたびに、残り3つを開いて同じ場所を探す作業が発生していました。個人開発で複数のプロジェクトを並行して抱えていると、この手の写し書きは静かに積み上がります。

Antigravity 2.11.0(8月26日)で AGENTS.md とカスタムルールファイルの中に @path/to/file を書けるようになり、外部ファイルを直接参照してインライン展開できるようになりました。この重複を畳めるということです。

分割すれば読み込み量も減るだろう、と何となく思っていました。手元のファイルで実際に測ってみたところ、そこは減りませんでした。減ったのは別のところです。

分割で減るのは保守量で、1セッションが読む量ではありません

先に結論から書きます。手元の4リポジトリの規約ファイルを、共通部と固有部に分けて @ で組み直したときの実測値です。

対象分割前分割後変化
保守するファイルの総バイト数340,824129,22962% 減
1セッションが読む展開後バイト数(1リポジトリ分)85,73684,2601.7% 減

保守対象は3分の1近くまで落ちました。一方、エージェントが実際に受け取る量はほとんど変わっていません。

理由は考えれば当たり前で、@ は取り込み先の中身をその場に展開するからです。共通規約を1ファイルにまとめても、参照している側を開けば結局その中身が全部そこに入ります。重複が消えるのはディスク上とレビュー時の話であって、展開後の入力にとっては何も起きていないということです。

もう少し細かい数字も出しておきます。4ファイルの空行を除いた行を数えると、延べ3,430行に対して、重複を除いたユニーク行は1,214行でした。4ファイル全部に同じ文字列で現れる行が695行(35,639文字)あります。

指標行数
4ファイルの延べ行数(空行除く)3,430
重複を除いたユニーク行1,214
4ファイル全部に出現する行695
2ファイル以上に出現する行780

固有情報は全体の35%しかありませんでした。残りは手で写した同じ文章です。この状態で1箇所を直し忘れると、リポジトリごとにエージェントの前提が食い違います。分割の動機は入力量の削減ではなく、この食い違いを構造的に起こらなくすることでした。

ここを取り違えたまま分割すると、期待していた効果が出ずに「分けた意味がなかった」という結論に行き着きます。何を買っているのかを先に決めておく必要があります。

同じファイル木が、解決基準の違いで二通りに壊れます

分割を始めてすぐ、判断が必要な箇所にぶつかりました。@rules/common.md と書いたとき、この rules/ はどこから見た rules/ なのか。

選択肢は2つです。

  • ルート基準: プロジェクトのルートから見た相対パス。どのファイルに書いても同じ意味になる
  • 元ファイル基準: その @ を書いたファイルのあるディレクトリから見た相対パス。ファイルを移動すると意味が変わる

1段しか取り込まないうちは、どちらでも同じ結果になります。差が出るのは、取り込んだ先がさらに取り込むときです。

検証のために、循環する3ファイルを用意しました。a.mdrules/b.md を、b.mdrules/c.md を、c.mda.md を取り込む構成です。

同じファイル木を、解決基準だけ変えて展開した結果がこちらです。

--- base=root ---
{"entry": "a.md", "ok": false,
 "error": "循環参照: a.md -> rules/b.md -> rules/c.md -> a.md"}

--- base=file ---
{"entry": "a.md", "ok": true, "base": "file", "chars": 48,
 "files": 3, "missing": ["rules/rules/c.md"], "duplicated": {}}

ルート基準では循環参照として止まりました。想定どおりです。

元ファイル基準では止まりません。rules/b.md の中の @rules/c.mdrules/rules/c.md として解決され、そんなファイルは無いので取り込みが不成立になります。循環が成立しないので、エラーにもなりません。展開は成功したことになり、規約が1ファイル分だけ静かに落ちます。

これが分割で踏みうる、いちばん質の悪い失敗だと考えています。壊れ方が例外ではなく欠落として現れるため、実行結果を見ても異常が分かりません。エージェントの振る舞いが少し変だ、という曖昧な形でしか表に出てきません。

規約ファイルは、書いてあることが守られているかどうかを毎回確認する種類のファイルではありません。だからこそ、欠落は長く残ります。

私自身、この落ち方に気づいたのは、展開器を書いて missing を出力させた後でした。それまでは、基準の違いは書き方の好みの問題だと思っていました。

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

この記事の続きを読む

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

この記事で得られること
規約ファイルを分割する前に、それで何が減って何が減らないかを自分のリポジトリで見積もれるようになる
取り込みの解決基準を決め損ねたときに規約が黙って欠落する事故を、手を入れる前に止められるようになる
共通規約を複数の経路から取り込んで展開量が二重になる構成を、動かす前に見分けられるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-07-29
agent.md の綴り誤りが権限を広げていた — frontmatter を厳格に検証する lint を書く
agent.md の frontmatter は綴りを間違えてもエラーになりません。既定値へ静かに落ちた結果、意図と逆の権限が適用されていた実例と、権限キーだけを厳しく検証する lint の実装・実測を記録しました。
Agents & Manager2026-07-25
何本作ったかを指標にするのをやめた — 生成エージェントに「棄権」という結果を持たせる設計
バックグラウンドで走る生成エージェントの合否を『作った数』で測ると、品質ゲートは静かに緩んでいきます。ACCEPT / ABSTAIN / REJECT の三値と、棄権を成功として数えるSLO設計を、実運用のコードと実測とともに整理します。
Agents & Manager2026-07-16
AGENTS.md を厚くするほどルールが守られなくなった — 遵守率を計測して指示を削るまで
AGENTS.md を厚くするほどルールが守られなくなる現象を、ルールを述語に分解して3週間分の遵守率として計測しました。console.log 残留の見逃しから始まった検証と、残すルール・lint に移すルールを分けて書き直すまでの一部始終を記録しています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →