大規模プロジェクトでのClaude Code活用戦略
大規模コードベースでの効率的なAI活用パターンとベストプラクティス
はじめに
個人の小さなプロジェクトではClaude Codeは直感的に使えます。しかし、数百ファイル・数万行規模のプロジェクトになると、「どのファイルを見ればいいかわからない」「全体像を把握しきれない」といった課題が出てきます。
この記事では、大規模プロジェクトでClaude Codeを効果的に活用するための戦略を、実際のケーススタディを交えて解説します。
大規模プロジェクトの課題
大規模プロジェクトでAIコーディングアシスタントを使う際の主な課題を整理しましょう。
| 課題 | 原因 | 影響 |
|---|---|---|
| コンテキスト不足 | 全ファイルを一度に読み込めない | 関連コードを見落とし、不整合なコードを生成 |
| 依存関係の複雑さ | ファイル間の依存が多い | 変更が他の部分に波及してバグを生む |
| 規約の一貫性 | プロジェクト固有のルールが多い | 既存コードと異なるスタイルで生成される |
| ファイル探索の遅延 | 不要ファイルまでスキャンする | 応答が遅くなり、ノイズが増える |
| コスト増大 | 大量のファイル読み込みでトークン消費 | API利用料金が跳ね上がる |
これらの課題に対して、以下の戦略を組み合わせることで対処できます。
CLAUDE.mdでプロジェクト全体像を伝える
大規模プロジェクトではCLAUDE.mdの充実が最も重要な施策です。AIがプロジェクト全体を理解するための「地図」を提供しましょう。
大規模プロジェクト向けCLAUDE.mdテンプレート
# CLAUDE.md
## プロジェクト概要
- 名前: ECサイト管理システム
- 技術スタック: Laravel 11 + Vue 3 + MySQL
- アーキテクチャ: クリーンアーキテクチャ(Domain/UseCase/Infrastructure/Presentation)
## ディレクトリ構成(重要な部分のみ)
```
app/
├── Domain/ # ビジネスロジック(エンティティ、値オブジェクト、リポジトリI/F)
├── UseCase/ # ユースケース(アプリケーションサービス)
├── Infrastructure/ # 外部連携(DB実装、API、メール)
└── Presentation/ # UI層(コントローラー、リクエスト、リソース)
```
## コーディング規約
- PSR-12準拠
- リポジトリパターンでDB層を抽象化
- ユースケースは必ずCommand/Queryパターン
- テストは各UseCase単位で記述
## 主要モジュール
- 商品管理: app/Domain/Product/
- 注文管理: app/Domain/Order/
- ユーザー管理: app/Domain/User/
- 決済: app/Infrastructure/Payment/
## よくある作業パターン
- 新機能追加: Domain → UseCase → Infrastructure → Presentation の順で実装
- バグ修正: テストで再現 → 修正 → テスト確認
CLAUDE.mdの階層配置
大規模プロジェクトでは、ルートだけでなく各ディレクトリにもCLAUDE.mdを配置できます。
- ルートのCLAUDE.md:プロジェクト全体の概要、技術スタック、規約
- サブディレクトリのCLAUDE.md:そのモジュール固有のルールや注意点
- Claude Codeは作業対象ディレクトリの親階層まで遡ってCLAUDE.mdを読む
フォーカスしたファイル参照
大規模プロジェクトでは「全部読んで」は通用しません。関連ファイルをピンポイントで指定する技術が重要です。
効果的な参照方法
# 悪い例:曖昧な参照
「商品の在庫管理を修正して」
# 良い例:具体的なファイルパスとコンテキスト
「app/Domain/Product/StockService.phpのdecrement()メソッドを修正してください。
関連ファイル:
- app/Domain/Product/Stock.php(在庫エンティティ)
- app/UseCase/Order/PlaceOrderUseCase.php(呼び出し元)
- tests/Unit/Domain/Product/StockServiceTest.php(テスト)
問題:在庫が0未満になるケースがある。」
関連ファイル特定のコツ
| 方法 | コマンド例 | 用途 |
|---|---|---|
| grepで使用箇所を探す | grep -r "StockService" app/ | クラスの参照元を特定 |
| gitログで関連変更を確認 | git log --oneline app/Domain/Product/ | 最近の変更履歴から関連ファイルを特定 |
| テストファイルから仕様を把握 | テストファイルを指定して読ませる | 期待される挙動の確認 |
モジュール単位の作業分割
大きな機能追加は、モジュール(レイヤー)単位で分割して作業しましょう。
クリーンアーキテクチャでの作業手順
- セッション1 - Domain層:エンティティ、値オブジェクト、リポジトリインターフェースを定義
- セッション2 - UseCase層:ビジネスロジックをユースケースクラスとして実装
- セッション3 - Infrastructure層:DBリポジトリの実装、外部API連携
- セッション4 - Presentation層:コントローラー、リクエストバリデーション、レスポンス
- セッション5 - テスト:各レイヤーのユニットテスト、結合テスト
各セッションでは、そのレイヤーに関連するファイルだけを参照すれば良いため、コンテキストを効率的に使えます。
セッション管理戦略
大規模プロジェクトでは、セッション間の情報の引き継ぎが重要です。
引き継ぎパターン
方法1: CLAUDE.mdのTODOセクション
# CLAUDE.md に追記
## 現在の作業(自動更新)
- [x] 商品エンティティの設計
- [x] 在庫管理のユースケース実装
- [ ] 在庫のDB永続化(リポジトリ実装)
- [ ] APIエンドポイント作成
- [ ] テスト作成
方法2: --continueで前のセッションを再開
# 前回のセッションを再開
claude --continue
# 最新のセッションではなく特定のセッションを再開
claude --resume
方法3: セッション開始時に前回の要約を伝える
# 新セッション開始時に文脈を伝える
claude
> 前回のセッションで在庫管理のUseCase層まで実装しました。
> 今回はInfrastructure層(app/Infrastructure/Product/)を実装します。
> 参照:app/Domain/Product/StockRepositoryInterface.php
エージェント・サブエージェントの活用
Claude Codeはタスクの一部をサブエージェントに委任できます。これを活用すると、大規模な作業を並列的に処理できます。
サブエージェントが有効なケース
- 複数ファイルの調査:「このインターフェースを実装しているクラスをすべて見つけて」
- パターン適用:「すべてのコントローラーにCSRFチェックを追加して」
- テスト生成:「app/UseCase/配下の全ファイルにテストを生成して」
- コードレビュー:「直近のコミットの変更をレビューして」
Claude Codeが自動的にサブエージェントを使うかどうかはタスクの内容によりますが、明示的に「サブタスクに分割して処理して」と指示することも可能です。
Worktreeで並列開発
Git worktreeを使うと、同じリポジトリの複数ブランチを同時に作業できます。Claude Codeの複数インスタンスをworktreeごとに起動すれば、並列開発が可能です。
Worktreeの活用手順
- worktreeを作成:
git worktree add ../project-feature-auth feature/auth - 別のworktreeを作成:
git worktree add ../project-feature-api feature/api - それぞれのworktreeでClaude Codeを起動
- 各インスタンスが独立して作業:互いに干渉しない
- 作業完了後にマージ:通常のGitワークフローで統合
# Worktree作成
git worktree add .claude/worktrees/auth-feature feature/auth
git worktree add .claude/worktrees/api-refactor feature/api-refactor
# 各worktreeでClaude Codeを起動(別ターミナルで)
cd .claude/worktrees/auth-feature && claude
cd .claude/worktrees/api-refactor && claude
# 作業完了後にworktreeを削除
git worktree remove .claude/worktrees/auth-feature
.claudeignoreパターン
Claude Codeが不要なファイルを読み込まないようにするには、.gitignoreの整備が基本です。さらに.claudeignoreファイルで、Gitには追跡するがClaude Codeには不要なファイルを除外できます。
大規模プロジェクト向け除外パターン
# .gitignore(基本の除外)
node_modules/
vendor/
dist/
build/
*.log
.env
*.sqlite
# Claude Code向け追加除外
# (.claudeignoreまたはプロンプトで指定)
docs/api-reference/ # 大量の自動生成ドキュメント
storage/ # ストレージディレクトリ
public/assets/ # コンパイル済みアセット
database/seeders/data/ # 大量のシードデータ
tests/fixtures/ # 大きなテストフィクスチャ
モノレポ戦略
フロントエンド・バックエンド・共通ライブラリなどを1つのリポジトリで管理するモノレポでは、特別な工夫が必要です。
モノレポでのClaude Code活用ポイント
- 作業ディレクトリを限定:
claudeをサブディレクトリから起動して、スコープを限定する - パッケージ単位のCLAUDE.md:各パッケージにCLAUDE.mdを配置し、そのパッケージの情報を記載
- 共通ライブラリの明示:「packages/shared/を変更するときはフロント・バックの両方に影響する」とCLAUDE.mdに明記
# モノレポの構成例
monorepo/
├── CLAUDE.md # 全体の概要
├── packages/
│ ├── frontend/
│ │ ├── CLAUDE.md # フロントエンド固有の情報
│ │ └── ...
│ ├── backend/
│ │ ├── CLAUDE.md # バックエンド固有の情報
│ │ └── ...
│ └── shared/
│ ├── CLAUDE.md # 共通ライブラリの注意点
│ └── ...
# バックエンドの作業をする場合
cd packages/backend && claude
ケーススタディ
ケース1: ECサイトに新しい決済手段を追加
プロジェクト規模: 500ファイル、5万行
| セッション | 作業内容 | 参照ファイル |
|---|---|---|
| 1 | 決済インターフェース設計 | Domain/Payment/PaymentGatewayInterface.php |
| 2 | Stripe決済実装 | Infrastructure/Payment/StripeGateway.php |
| 3 | ユースケース統合 | UseCase/Order/ProcessPaymentUseCase.php |
| 4 | APIエンドポイント | Presentation/Api/PaymentController.php |
| 5 | テスト作成 | tests/Unit/Payment/, tests/Feature/Payment/ |
成果:各セッション15〜20分、合計1.5時間で実装完了。コンテキストオーバーフローなし。
ケース2: レガシーPHPアプリのリファクタリング
プロジェクト規模: 300ファイル、コーディング規約なし
戦略:CLAUDE.mdに「現在のコード品質」と「目標の品質」を記載し、ファイル単位でリファクタリング
# CLAUDE.mdに記載した内容
## リファクタリング方針
- 現状:生のSQLクエリ、グローバル変数、関数ベース
- 目標:PDOプリペアドステートメント、クラスベース、PSR-4
- 手順:1ファイルずつ変換、テスト追加、動作確認
- 優先順位:1)セキュリティ問題 2)保守性 3)パフォーマンス
成果:1日10〜15ファイルのペースでリファクタリング。各ファイルを独立したセッションで処理し、CLAUDE.mdのチェックリストで進捗を管理。
まとめ
大規模プロジェクトでClaude Codeを効果的に使うための重要ポイント:
- CLAUDE.mdを充実させる:プロジェクトの「地図」を提供し、AIが全体像を把握できるようにする
- ファイル参照をピンポイントに:関連ファイルを具体的なパスで指定し、コンテキストを効率的に使う
- モジュール単位で作業:大きなタスクをレイヤーや機能単位で分割し、各セッションのスコープを限定する
- セッション間の引き継ぎ:CLAUDE.mdのTODO、--continue、セッション冒頭の要約で文脈を引き継ぐ
- 不要ファイルの除外:.gitignoreと.claudeignoreでノイズを減らし、AIの精度とスピードを向上
- worktreeの活用:複数ブランチの並列開発で開発速度を加速
規模に関わらず、核心は「AIに適切な範囲の情報を、適切なタイミングで与える」ことです。これを意識するだけで、大規模プロジェクトでもClaude Codeの力を最大限に引き出せます。