Claude Codeをプロダクションレベルの大規模プロジェクトで使い始めると、小規模プロジェクトとは異なる課題が生まれます。コンテキストウィンドウがすぐにいっぱいになる・関係ないコードを大量に読んで精度が落ちる・モノレポで複数のチームが異なるルールを持つ——こうした問題は、CLAUDE.mdの階層化・コンテキスト管理・サブエージェント活用の3つで解決できます。
この記事では、大規模コードベースでClaude Codeを最大限に活用するための実践パターンを解説します。CLAUDE.mdの基本設計はCLAUDE.md完全設計ガイドを、サブエージェントの基礎はSubagents完全ガイドを先に読むと理解が深まります。
大規模プロジェクトでClaude Codeが失敗しやすい理由
Anthropicは大規模コードベースで起きがちな失敗を5パターンに整理しています。これらを理解することが対策の出発点です。
| 失敗パターン | 症状 | 根本原因 |
|---|---|---|
| The Kitchen Sink Session | 認証の修正→UIの改善→バグ修正と無関係タスクを同一セッションで続ける | コンテキストが汚染され、Claudeが過去の文脈を引きずって混乱する |
| Correcting Over and Over | 同じ問題を修正しようとして3回以上失敗し続ける | コンテキストに不正確な修正試行が積み重なって正しい方向を見失う |
| The Over-specified CLAUDE.md | CLAUDE.mdが1万語を超えて肥大化し、重要なルールが埋もれる | 「全部書けばいい」という誤解。長すぎると重要な指示が薄まる |
| The Trust-then-Verify Gap | 見た目は正しいコードが実際には動かない。テストなしで出荷する | Claudeの出力を鵜呑みにして実行・検証を省く |
| The Infinite Exploration | 「コードベース全体を調査して」と依頼して何時間も待つ | スコープを絞らない探索依頼がコンテキストを無駄に消費する |
CLAUDE.mdの階層設計:モノレポのための遅延ロード戦略
CLAUDE.mdの読み込みルールと「遅延ロード」
CLAUDE.mdには読み込みタイミングが2種類あります。この仕様がモノレポ管理の鍵になります。
| 配置場所 | 読み込みタイミング | 用途 |
|---|---|---|
~/.claude/CLAUDE.md |
常時(全プロジェクト) | 個人の作業スタイル・共通ルール |
プロジェクトルート ./CLAUDE.md |
常時(セッション開始時) | プロジェクト全体のルール・技術スタック |
親ディレクトリの CLAUDE.md |
常時 | モノレポ上位の共通ルール |
子ディレクトリの CLAUDE.md |
遅延ロード(そのディレクトリのファイルにアクセスした時のみ) | サービス・パッケージ固有のルール |
重要なのは子ディレクトリのCLAUDE.mdは遅延ロードされる点です。frontend/ のファイルを触るまで frontend/CLAUDE.md は読み込まれません。これにより、モノレポで複数チームのルールを持っていても必要なものだけがコンテキストに入ります。
モノレポのCLAUDE.md階層設計例
ある事例では、47,000語のルートCLAUDE.mdを以下のように階層化することで9,000語(80%削減)を実現しました。
project/ ├── CLAUDE.md # 全体共通:技術スタック概要・リポジトリ規約・デプロイ手順 ├── frontend/ │ ├── CLAUDE.md # フロントエンド固有:Reactコンポーネント規約・CSS規約・テスト方針 │ └── src/ ├── backend/ │ ├── CLAUDE.md # バックエンド固有:APIエンドポイント規約・DB設計ルール・エラー処理 │ └── src/ ├── core/ │ ├── CLAUDE.md # コアサービス固有:ドメインロジック・共有型定義 │ └── src/ └── docs/
ルートCLAUDE.mdに書くべきこと・書かないこと
| 書くべきこと(ルート) | 書かないこと(子ディレクトリに分ける) |
|---|---|
| リポジトリ全体のディレクトリ構造の概要 | フレームワーク固有の詳細規約 |
| 使用している主要技術スタック(言語・ランタイム) | コンポーネントごとのコーディング規約 |
| 開発・テスト・デプロイの主要コマンド | サービス固有のドメイン知識 |
| チーム全員が守るべきgit・レビュー規約 | 個々のパッケージの依存関係詳細 |
Anthropicが示す目安は「削除してもClaudeが間違いを犯さないなら削除する」です。ルートCLAUDE.mdは概ね1,000〜3,000語を目安にし、それを超えそうなら子ディレクトリに分割することが推奨されています。長いCLAUDE.mdは重要なルールが後半に埋もれて無視されやすくなります。
/initコマンドでCLAUDE.mdを自動生成する
新規プロジェクトや既存プロジェクトの初回セットアップには/initコマンドが使えます。Claude がプロジェクトの package.json・README・設定ファイル・コード構造を解析してCLAUDE.mdの初稿を自動生成します。
# プロジェクトルートで実行 claude /init # 生成後にClaudeに追加分析を依頼することも可能 # "このプロジェクトのテスト構成とデプロイ手順もCLAUDE.mdに追加してください"
/initが生成した内容はあくまで初稿です。以下の点を手動で確認・追記してください。
- テストコマンドと合格基準(カバレッジ閾値など)
- チーム固有の命名規則・設計パターン
- 機密情報・読み取り禁止ファイルの明示(
.env等) - よく起きるミス(過去にClaude Codeが間違えたこと)
- ビジネスロジックの説明(コードから読み取りにくいドメイン知識)
@ファイルインポートで情報を分散管理する
CLAUDE.md内で @パス/ファイル名 構文を使うと、外部ファイルの内容をCLAUDE.mdに取り込めます。ドキュメント・設計仕様・テンプレートを別ファイルで管理しながら、CLAUDE.mdから参照できます。
# Project Overview See @README.md for project overview. See @package.json for available npm commands. # Architecture Our system design is documented in @docs/architecture.md The API contract is defined in @docs/openapi.yaml # Git Workflow Follow the guidelines in @docs/git-workflow.md # Personal Overrides Additional personal instructions: @~/.claude/personal-style.md
@ファイルインポートはCLAUDE.mdに文字通り展開されます。ファイルが大きいほどコンテキストを消費します。コンテキスト削減のための分割ではなく、CLAUDE.mdを人間が管理しやすくするための整理ツールとして使ってください。コンテキスト削減には後述の遅延ロードとサブエージェントが有効です。コンテキスト管理:200Kから1Mトークン時代の実践
コンテキストウィンドウの実態
Claude 4.6(Opus/Sonnet)では1Mトークンのコンテキストウィンドウが追加料金なしで利用可能になりました(2026年3月時点)。ただし全容量を作業に使えるわけではありません。
| 項目 | 内容 |
|---|---|
| コンテキストウィンドウ | Claude 4.6(Opus/Sonnet)は1Mトークン。追加料金なしで利用可能(2026年3月時点) |
| 自動コンパクション | 使用率が閾値を超えると会話履歴を自動圧縮。圧縮後も作業は継続できる |
| 発動タイミング(デフォルト) | 使用率約83.5%。CLAUDE_AUTOCOMPACT_PCT_OVERRIDEで変更可能 |
| 圧縮後の残量目安 | 元のコンテキストの約15〜20%まで圧縮 |
/compactと/clearの使い分け
コンテキストが膨らんできたときの対処法は2種類あります。
| コマンド | 動作 | 向いている場面 |
|---|---|---|
/compact |
会話履歴を圧縮してコンテキストを削減。作業の継続性は保つ | タスクの途中でコンテキストが逼迫してきた時 |
/compact [フォーカス指示] |
指定した内容を優先的に残して圧縮 | 次のフェーズで重要な情報だけを引き継ぎたい時 |
/clear |
セッションを完全リセット。コンテキストをゼロにする | 無関係なタスクに切り替える時・同じ修正が3回以上失敗した時 |
# 認証フローの変更内容だけを残して圧縮 /compact Focus on the OAuth token refresh changes we made to src/auth/ # DBマイグレーション結果を優先して保持 /compact Keep the migration results and schema changes, discard the exploration phase
自動コンパクションのタイミングをカスタマイズする
{
"env": {
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "70"
}
}
CLAUDE_AUTOCOMPACT_PCT_OVERRIDEで自動コンパクションをコンテキスト使用率何%で発動させるかを設定できます。デフォルトの83.5%より早めに発動させることで、圧縮後のコンテキスト残量を増やせます。コスト管理の詳細はコスト・コンテキスト管理完全ガイドを参照してください。
サブエージェントで調査をオフロードする
大規模コードベースの探索で最も効果的な手法がサブエージェントへの調査委譲です。サブエージェントは独立したコンテキストウィンドウで動作し、ファイルを大量に読んでもメインのコンテキストを汚染しません。調査結果のサマリーだけがメイン会話に返ってきます。
調査をサブエージェントに委譲するプロンプト例
# 悪い例(メインコンテキストを大量消費する) claude "src/ 全体を読んで認証システムの仕組みを教えてください" # 良い例(サブエージェントで調査してサマリーを受け取る) claude "Use subagents to investigate how our authentication system handles token refresh, and whether we have any existing OAuth utilities I should reuse. Summarize your findings concisely."
# 複数の調査を並列実行(大幅に時間短縮) claude "Use parallel subagents to investigate: 1. How the frontend handles API error states (check src/frontend/) 2. How the backend formats error responses (check src/backend/api/) 3. What error handling patterns exist in our test files (check tests/) Report how they align and where they conflict."
| 場面 | サブエージェント活用法 |
|---|---|
| 大規模コードベースの初期理解 | 「主要ディレクトリをサブエージェントで並列調査してサマリーを作成」 |
| バグの原因調査 | 「このエラーに関連しそうな箇所をサブエージェントで調査してください」 |
| リファクタリング前の影響範囲調査 | 「この関数を変更した場合の影響範囲をサブエージェントで調べてください」 |
| 複数マイクロサービスの整合性確認 | 「各サービスのAPIコントラクトをサブエージェントで並列確認してください」 |
サブエージェントは独立したAPIリクエストとして実行されるため、それぞれのコンテキスト分の料金がかかります。「とにかくサブエージェントを大量に使う」のではなく、メインコンテキストを汚染したくない調査タスクに絞って使うのが効率的です。
スコープを絞ったファイル探索で精度を上げる
「コードベース全体を調査して」という依頼は精度が低くなりがちです。どのディレクトリ・どのファイル種別を見るかを明示することで、Claudeが効率的に必要な情報にたどり着けます。
| 依頼の粒度 | 例 | 問題点・効果 |
|---|---|---|
| 悪い例(広すぎる) | 「このバグに関連するコードを全部調べて」 | コードベース全体を読もうとして時間・コンテキストを大量消費 |
| 良い例(ディレクトリ指定) | 「src/auth/ を読んでセッション管理の仕組みを理解して」 |
調査スコープが明確で精度が上がる |
| 良い例(ファイル種別指定) | 「src/ の*.test.tsを見てテストパターンを把握して」 |
テストファイルのみに集中できる |
| 良い例(キーワード指定) | 「まずgrep -r "TokenRefresh"でトークンリフレッシュ関連ファイルを特定してから読んで」 |
関連ファイルを効率的に絞り込める |
モノレポでのワークスペース設定
大規模モノレポでは worktree.sparsePaths 設定でgit sparse-checkoutを活用すると、Claudeが必要なディレクトリだけをチェックアウトして作業できます。
{
"worktree": {
"sparsePaths": [
"packages/auth",
"packages/shared",
"services/api-gateway"
]
}
}
大規模プロジェクト向け実践プロンプトパターン
探索→計画→実装の3フェーズ分離
Anthropicが公式に推奨する大規模プロジェクトでのワークフローです。特に影響範囲が広い変更では、探索・計画・実装を別フェーズに分けることで品質が上がります。ワークフローの詳細は実践ワークフロー完全ガイドも参照してください。
# Shift+Tab でPlan Modeに切り替えてから "Read src/auth/ and understand how we handle sessions and login. Also look at how we manage environment variables for secrets. Do not make any changes yet."
# 同じPlan Modeで続けて "I want to add Google OAuth. What files need to change? What is the session flow? What are the risks? Create a detailed implementation plan."
# Shift+Tab でPlan Modeを解除してから "Implement the OAuth flow from your plan. Write tests for the callback handler. Run the test suite and fix any failures before finishing."
インタビュー形式で大機能を設計する
新機能の要件が曖昧な段階では、Claudeにインタビュアー役を演じさせる手法が効果的です。自分では気づかないエッジケースやトレードオフを引き出せます。
claude "I want to build a notification system that supports email, Slack, and in-app notifications. Interview me in detail using the AskUserQuestion tool. Ask about: - Technical implementation choices - UI/UX considerations - Edge cases and failure scenarios - Security concerns - Performance tradeoffs Don't ask obvious questions. Dig into the hard parts I might not have considered. Keep interviewing until we've covered everything. Then write a complete spec to SPEC.md."
既存コードの影響範囲を確認してから変更する
# 変更前に影響範囲を把握する claude "Before making any changes, investigate with subagents: 1. All places that import or call the UserAuthentication class 2. Any tests that directly test this class 3. Any documentation that references this class Report the full impact scope, then wait for my approval before making changes."
よくある質問
QモノレポでClaude Codeのルートをどこに設定すればいいですか?
Aモノレポのルートディレクトリ(package.jsonやpnpm-workspace.yamlがある場所)でClaude Codeを起動するのが基本です。そこにルートCLAUDE.mdを置いて共通ルールを記載し、各パッケージ・サービスのディレクトリにも個別のCLAUDE.mdを置きます。遅延ロードの仕組みにより、作業中のディレクトリのCLAUDE.mdだけが読み込まれます。
Qコンテキストが埋まって途中でセッションが終わります。どう対策しますか?
A3つのアプローチがあります。①/compact Focus on [重要なポイント]で方針付き圧縮をこまめにかける、②調査フェーズはサブエージェントに委譲してメインコンテキストを節約する、③CLAUDE_AUTOCOMPACT_PCT_OVERRIDEを70程度に設定して自動圧縮を早めに発動させる。1Mトークンコンテキストを使っても頻発する場合は、タスクを細かく分割して別セッションで実施することも有効です。
Q大規模プロジェクトで/initを実行すると長すぎるCLAUDE.mdが生成されます
A/initが生成したCLAUDE.mdは1万語を超えることがあります。Claudeに「このCLAUDE.mdを階層化して。全体共通部分はルートに残し、フロントエンド固有はfrontend/CLAUDE.md、バックエンド固有はbackend/CLAUDE.mdに分割して」と指示すると自動で階層化してくれます。分割後にルートCLAUDE.mdが1,000〜3,000語に収まるのが理想です。
Qサブエージェントの調査結果が不正確なことがあります
Aサブエージェントへの依頼も具体的なスコープを指定することが重要です。「src/auth/以下のファイルを読んで」「特にsession.tsとtoken.tsを重点的に」のようにファイルパスを明示すると精度が上がります。調査結果が不正確な場合は「〇〇ファイルも確認してください」と補足してください。
QチームメンバーがCLAUDE.mdを各自で書き換えてしまいます
AプロジェクトCLAUDE.md(.claude/settings.json経由で管理されるもの)をGitにコミットしてチームで共有してください。個人のカスタマイズはユーザーCLAUDE.md(~/.claude/CLAUDE.md)かCLAUDE.local.md(.gitignoreに追加)に分離するルールを設けると、チーム共通のルールと個人の好みを分けて管理できます。

