コーディングエージェントにRAGは罠だった──設計文書を”検索”より”コンパイル”する Aegis MCP の使い方

コーディングエージェントにRAGは罠だった──設計文書を”検索”より”コンパイル”する Aegis MCP の使い方 AI開発

Claude Codeを大規模プロジェクトで使うとき、設計文書・アーキテクチャガイドライン・ADR(Architecture Decision Record)などをどう渡すかが大きな課題になります。よく取られるのが「エージェントにfindgrepで探させる」方法ですが、これは思った以上に問題があります。

この記事では、RAGではなくDAG(有向非巡回グラフ)の依存関係に基づいて設計文書を“コンパイル”して渡すアプローチと、それを実現するMCPツールAegisを紹介します。Laravelプロジェクト(17モジュール・140超のUseCase)での実測では、消費トークン12分の1・応答速度3.5倍を達成しています。

MCPの基礎はMCP完全ガイドを、大規模コードベースでの一般的な戦略は大規模コードベースガイドを参照してください。

スポンサーリンク

コーディングエージェントのコンテキスト問題

AI開発が進むと、AGENTS.md・設計書・仕様書・ADRといった文書が増えていきます。エージェントはコードを書く前にこれらを参照すべきですが、現状は以下の問題が起きがちです。

方法 問題点
エージェントにfind/grepで探させる ツール呼び出しが増え(55回など)、大量トークンを探索コストとして消費
RAGで意味検索 実装キーワードと必要な設計ルールの間にセマンティックギャップがあり、本当に必要な文書を安定して引けない
全文書をコンテキストに詰める 関係ない文書まで入り、コンテキスト圧迫・コスト増大

特にRAGの問題は、「UseCase を実装するときに必要なガイドライン」を「UseCase」という単語で検索しても、本当に必要な文書に辿り着けないことです。設計意図は命名規則やUseCase命名に含まれているとは限りません。

「検索」ではなく「コンパイル」という発想転換

Aegisの基本アイデアはシンプルです。「どのファイルを編集するか」がわかれば、「そのファイルを正しく書くために必要な文書」も事前に定義できるという考え方です。

たとえばapp/UseCases/配下のファイルを編集するなら:

  • usecase_guidelines.md(UseCase実装のガイドライン)
  • entity_guidelines.md(UseCaseが依存するEntityのルール)
  • exception_guidelines.md(例外処理方針)

この「usecase_guidelines.mdはさらにentity_guidelines.mdexception_guidelines.mdに依存する」という関係をDAG(有向非巡回グラフ)として定義し、ファイルパスを渡すだけで必要な文書群を芋づる式に取得できます。

比較軸 RAG(検索) Aegis(コンパイル)
仕組み ベクトル類似度でランキング DAG依存関係を再帰的に解決
再現性 非決定論的(同じ入力でも結果が変わる) 決定論的(同じ入力→常に同じ文書)
設計意図 セマンティックギャップで落ちやすい ADRも依存関係に含めれば確実に届く
トークン効率 関連度の低い文書も混入 必要最小限の文書だけ取得

実測パフォーマンス比較

Laravelプロジェクト(17モジュール・140超のUseCase)で「UseCase を実装する上での注意点は?」という同じ質問をClaude Codeに投げた結果です。

指標 Aegisなし Aegisあり 改善
応答時間 2分32秒 43秒 約3.5倍高速化
出力トークン 10.3Kトークン 1.8Kトークン 約82%削減
ツール呼び出し 55回 約6回 約89%削減
探索コスト 65.4Kトークン 最小限 約12倍削減
回答の質 既存パターンの列挙 ADRを含む設計意図まで踏まえた回答 質的改善

数値の改善だけでなく、設計意図(ADR)まで届く回答品質の向上が大きなポイントです。コスト管理の観点はコスト管理完全ガイドも参照してください。

AegisのDAGアーキテクチャ

Aegisは内部でSQLiteにドキュメントとファイルの依存関係を保持し、再帰CTE(Common Table Expressions)で依存を解決します。

4段階のルーティングで必要な文書を決定します:

  1. パスマッチング:グロブパターンでターゲットファイルと照合
  2. レイヤー解決:ファイルパスからアーキテクチャレイヤーを推論
  3. コマンド依存:scaffold/refactor/reviewなど操作タイプ別の依存を処理
  4. 推移閉包:doc_depends_onエッジを再帰的にたどる

重要な設計原則としてAgent Surface(読み取り専用)とAdmin Surface(管理専用)の完全分離があります。エージェントは知識ベースを直接変更できず、変更は人間が承認して初めて反映されます。

サーフェス 役割 主なツール
Agent Surface(読み取り専用) コンテキスト取得・観察記録 aegis_compile_context, aegis_observe
Admin Surface(管理操作) 文書管理・提案の承認/却下 aegis_import_doc, aegis_approve_proposal, aegis_reject_proposal

Claude Codeへの導入手順

ステップ1:MCPサーバーを追加する

Aegis MCPサーバーの追加
# Agent サーフェス(読み取り専用・エージェント用)
claude mcp add aegis -- npx -y @fuwasegu/aegis --surface agent

# Admin サーフェス(管理用・ドキュメント登録や提案承認に使う)
claude mcp add aegis-admin -- npx -y @fuwasegu/aegis --surface admin

ステップ2:プロジェクトを初期化する

Aegisの初期化(Claude Codeから実行)
# プロジェクトをスキャンして初期化状態を検出
aegis_init_detect

# 検出結果を確認して初期化
aegis_init_confirm

ステップ3:IDE固有のアダプタを生成する

Claude Code向けアダプタ生成
npx @fuwasegu/aegis deploy-adapters
# → CLAUDE.md に Aegis 使用指示が追記される
# → .aegis/aegis.db (SQLite) が作成される

ステップ4:設計文書をインポートする

Admin Surfaceから設計文書を取り込み、ファイルパスとの対応関係を定義します。

設計文書のインポート(Claude Codeから)
# aegis-admin ツールとして呼び出す
aegis_import_doc({
  "path": "docs/usecase_guidelines.md",
  "layer": "application",
  "glob_patterns": ["app/UseCases/**/*.php"]
})

# 依存関係の定義(usecase_guidelinesはentity_guidelinesに依存)
aegis_import_doc({
  "path": "docs/entity_guidelines.md",
  "layer": "domain"
})

使い方:aegis_compile_contextで文書を取得する

セットアップが完了したら、コードを書く前にaegis_compile_contextを呼ぶだけです。CLAUDE.mdにdeploy-adaptersで指示が追記されるため、以後Claude Codeは自動的にこのツールを呼ぶようになります。

aegis_compile_contextの使い方
# 編集予定のファイルを渡すと、必要な設計文書を返す
aegis_compile_context({
  "target_files": [
    "app/UseCases/Order/CreateOrderUseCase.php"
  ],
  "command": "scaffold",
  "plan": "注文作成のUseCaseを新規実装する"
})

# → usecase_guidelines.md
# → entity_guidelines.md(UseCaseが依存するEntityのルール)
# → exception_guidelines.md(例外処理方針)
# が自動的に返ってくる

引数のcommandはscaffold・refactor・review・bugfixなど操作タイプで、コマンドによって異なる依存文書が返ります。planは自然言語の実装予定説明で、より精度の高い文書選択に使われます。

Observationサイクル──エージェントが知識ベースを育てる

Aegisには「エージェントが自分で知識ベースの改善提案をできる」仕組みがあります。ただし、知識ベースへの書き込み権限はエージェントに与えず、人間の承認が必須です。

Observationサイクルの流れ
# ステップ1: エージェントがコードを書いたあとにセルフレビュー
# 「entity_guidelinesが足りなかった」と判断したら観察を記録
aegis_observe({
  "event_type": "compile_miss",
  "related_compile_id": "compile_abc123",
  "payload": {
    "missing": "entity_guidelines.md",
    "context": "Entityの不変条件チェックを見落とした"
  }
})

# ステップ2: 観察から提案を生成(Admin Surface)
aegis_process_observations()
# → Proposal が生成される

# ステップ3: 人間が提案を確認・承認
aegis_list_proposals()   # 提案一覧を確認
aegis_approve_proposal({ "proposal_id": "prop_xyz" })  # 承認
# → 知識ベースに反映される
event_type 意味
compile_miss 必要なガイドラインが不足していた
review_correction エージェントの提案を人間が修正した
pr_merged 変更が正常にマージされた(成功シグナル)
manual_note 人間がキュレーションしたコンテキスト
document_import 文書インポートイベント

このサイクルにより、使い続けるほどAegisの知識ベースが精度を増していきます。「エージェントが学習を提案し、人間が承認する」という人間起点のフィードバックループが設計の核心です。

どんなプロジェクトに向いているか

向いている 向いていない
設計文書・ADRが多いプロジェクト 設計文書が少ないシンプルなプロジェクト
アーキテクチャが明確に分層されているコードベース まだ設計が固まっていない初期フェーズ
チームでClaude Codeを使っている 個人の単一ファイル編集が中心
代替エージェント(Cursor/Codex)も使うチーム Claude Code専用で文書量が少ない

AegisはClaude Code・Cursor・Codexの3つに対応しています。チームで複数のAIエージェントを使い、かつ設計文書を一貫して参照させたいケースで特に効果を発揮します。

コンテキスト設計の全体論はコンテキストエンジニアリングガイドも参照してください。

よくある質問

QRAGとの最大の違いは何ですか?
A再現性です。RAGはベクトル類似度によるランキングなので、同じ質問でも結果が変わることがあります。Aegisは同じターゲットファイルを渡せば常に同じ文書セットが返る「決定論的」な仕組みです。また、RAGはセマンティックギャップ(実装キーワードと設計用語の乖離)で必要な文書を引き逃すことがありますが、AegisはDAGで明示的に依存を定義するため、設計意図(ADR)まで確実に届きます。
Q既存プロジェクトの設計文書はどうやって取り込みますか?
Aaegis_import_docでMarkdownファイルのパスを渡すと取り込めます。初回はaegis_init_detectがプロジェクトをスキャンしてスタック(Laravel/Next.js等)を検出し、テンプレートを提案してくれます。ファイルパスのグロブパターンと文書の対応関係は、最初に手動で定義する必要があります。量が多い場合は徐々に追加していくのが現実的です。
QAgent SurfaceとAdmin Surfaceを分ける必要はありますか?
A安全性の観点から分けることを強く推奨します。Agent SurfaceのMCPをエージェントに与えると、コンテキスト取得(aegis_compile_context)と観察記録(aegis_observe)だけできます。知識ベースの変更(文書追加・提案承認)はAdmin Surfaceを通じて人間が行います。もし両方を同じエージェントに持たせると、エージェントが知識ベースを勝手に書き換えるリスクがあります。
QClaude Code以外のエージェントでも使えますか?
Aはい。CursorとOpenAI Codexにも対応しています。Cursorは.cursor/mcp.jsonに設定を追加し、npx @fuwasegu/aegis deploy-adaptersでCursor用ルールファイル(.cursor/rules/aegis-process.mdc)が自動生成されます。チームで複数のエージェントを使っている場合でも、同じAegisの知識ベースを共有できます。
Q設計文書が少ない小規模プロジェクトでも効果がありますか?
A設計文書が少ないプロジェクトでは初期設定のコストに対してリターンが見合わないことがあります。Aegisが真価を発揮するのは、複数のアーキテクチャレイヤーがあり、各レイヤーに固有のガイドラインが存在するプロジェクトです。まずはCLAUDE.mdにガイドラインを書いて運用し、ドキュメントが10ファイルを超えてきたあたりでAegis導入を検討するのが現実的です。