はじめに
Claude Codeを使っていて「1つずつ順番に処理するのが遅い」と感じたことはありませんか?
実は、Claude Codeにはサブエージェント(Sub-Agent)という機能があり、複数のタスクを並列に実行できます。私は日常的に5つ以上のサブエージェントを同時に走らせて、開発タスクの処理速度を大幅に改善しています。
この記事では、サブエージェントの基本から実践的な並列実行パターンまでを解説します。
環境・前提
- Claude Code (CLI版) または OpenClaw 等のエージェントフレームワーク
- サブエージェント機能(
sessions_spawn相当のAPI)が利用可能な環境 - 基本的なClaude Codeの操作経験
サブエージェントとは何か
サブエージェントとは、メインのAIセッションから独立した子セッションを生成し、タスクを委任する仕組みです。
メインセッション(あなたが会話しているセッション)
├── サブエージェント1: ファイルのリファクタリング
├── サブエージェント2: テスト作成
├── サブエージェント3: ドキュメント更新
├── サブエージェント4: API調査
└── サブエージェント5: CI設定
各サブエージェントは独立した実行環境を持つため、互いにブロックすることなく並行して作業を進められます。メインセッションはオーケストレーター(指揮者)として、各サブエージェントの完了を待ち、結果を統合します。
直列 vs 並列の比較
直列実行の場合:
タスクA (3分) → タスクB (2分) → タスクC (4分) → タスクD (2分) → タスクE (3分)
合計: 14分
並列実行の場合:
タスクA (3分) ─┐
タスクB (2分) ─┤
タスクC (4分) ─┼→ 全完了
タスクD (2分) ─┤
タスクE (3分) ─┘
合計: 4分(最も遅いタスクの時間)
理論上、5並列なら最大5倍速になります。
基本的な使い方:runモード vs sessionモード
サブエージェントには大きく2つのモードがあります。
runモード(ワンショット実行)
タスクを投げて、完了したら結果を返して終了するモードです。ほとんどの場合はこちらを使います。
// 例: ファイルのリファクタリングを依頼
sessions_spawn({
task: "src/utils/helpers.ts を読んで、重複している関数を統合してリファクタリングしてください。",
mode: "run",
label: "refactor-helpers"
})
特徴:
- タスク完了後にセッションが自動終了
- 結果がメインセッションに自動で返る
- 一方通行の依頼に最適
sessionモード(永続セッション)
セッションが持続し、追加のメッセージを送れるモードです。対話的なやり取りが必要な場合に使います。
// 例: 調査タスク(追加質問が必要になるかもしれない)
sessions_spawn({
task: "Next.js 15のServer Actionsについて調査してください",
mode: "session",
label: "research-nextjs"
})
// 後から追加の指示を送信
sessions_send({
label: "research-nextjs",
message: "キャッシュの挙動についても調べてください"
})
特徴:
- セッションが持続するので追加指示が可能
- 明示的に終了するまで生き続ける
- 調査タスクや段階的な作業に最適
使い分けの目安
| ケース | 推奨モード |
|---|---|
| ファイル編集・生成 | run |
| テスト作成 | run |
| Web検索・調査 | session(追加質問の可能性あり) |
| ドキュメント作成 | run |
| 対話的なデバッグ | session |
5並列実行の実践パターン
ここからは、実際に私が使っているパターンを紹介します。
パターン1: プロジェクト初期セットアップ
新しいプロジェクトを始める時、以下のタスクを一気に並列実行します。
// 5つのサブエージェントを同時に起動
sessions_spawn({ mode: "run", label: "setup-1",
task: "package.jsonを作成し、Next.js 15 + TypeScript + Tailwind CSSの依存関係を設定"
})
sessions_spawn({ mode: "run", label: "setup-2",
task: "tsconfig.json, .eslintrc.js, .prettierrc を作成(Next.js推奨設定)"
})
sessions_spawn({ mode: "run", label: "setup-3",
task: "src/app/layout.tsx と src/app/page.tsx の雛形を作成"
})
sessions_spawn({ mode: "run", label: "setup-4",
task: "GitHub ActionsのCI設定(.github/workflows/ci.yml)を作成"
})
sessions_spawn({ mode: "run", label: "setup-5",
task: "README.md, .gitignore, .env.example を作成"
})
順番にやると10〜15分かかる作業が、3分程度で完了します。
パターン2: コードレビュー&修正
PRで複数ファイルの修正が必要な時:
sessions_spawn({ mode: "run", label: "fix-auth",
task: "src/lib/auth.ts のセキュリティ脆弱性を修正"
})
sessions_spawn({ mode: "run", label: "fix-api",
task: "src/app/api/users/route.ts のエラーハンドリングを追加"
})
sessions_spawn({ mode: "run", label: "fix-types",
task: "src/types/index.ts の型定義を更新"
})
sessions_spawn({ mode: "run", label: "add-tests",
task: "src/lib/auth.test.ts を作成: 全関数のユニットテスト"
})
sessions_spawn({ mode: "run", label: "update-docs",
task: "docs/api.md を更新: 新しいレスポンス形式を反映"
})
パターン3: 日次ルーティンの自動化
私の場合、毎朝のルーティンタスクを5並列で実行しています。
sessions_spawn({ mode: "run", label: "daily-notes",
task: "今日のデイリーノートを生成してください"
})
sessions_spawn({ mode: "run", label: "sync-tasks",
task: "Azure DevOpsの今週のSprintタスクを確認し、ステータスを更新"
})
sessions_spawn({ mode: "run", label: "check-email",
task: "未読メールをチェックして重要なものがあれば報告"
})
sessions_spawn({ mode: "run", label: "check-calendar",
task: "今日と明日のカレンダー予定を確認"
})
sessions_spawn({ mode: "run", label: "git-status",
task: "全プロジェクトのgit statusを確認し、未コミットの変更があれば報告"
})
注意点とベストプラクティス
1. ファイルの競合に注意
複数のサブエージェントが同じファイルを編集すると、後から書いた方に上書きされます。
❌ 悪い例:
サブエージェント1: src/index.ts の関数Aを修正
サブエージェント2: src/index.ts の関数Bを修正
→ 競合する可能性あり!
✅ 良い例:
サブエージェント1: src/utils/funcA.ts を修正
サブエージェント2: src/utils/funcB.ts を修正
→ ファイルが分かれているのでOK
対策: タスクを分割する際は、編集対象ファイルが重複しないように設計してください。
2. 依存関係のあるタスクは直列に
タスクBがタスクAの結果に依存する場合は、並列にできません。
❌ 並列にできない:
タスクA: DBスキーマ定義 → タスクB: そのスキーマを使うAPIエンドポイント
✅ 並列にできる:
タスクA: DBスキーマ定義 + APIエンドポイント(セットで1タスク)
タスクB: フロントエンドのUI実装(API未完でもモック可能)
3. タスク指示は具体的に
サブエージェントはメインセッションのコンテキストを引き継がないため、タスク指示には必要な情報をすべて含めてください。
// ❌ 曖昧
sessions_spawn({ task: "あのファイルを直して" })
// ✅ 具体的
sessions_spawn({
task: "src/lib/auth.ts の validateToken関数で、期限切れトークンの場合にTokenExpiredErrorをthrowするように修正してください。"
})
4. 適切な数を見極める
並列数を増やしすぎると、APIレートリミットに引っかかったり、コンテキストの管理が難しくなります。
推奨: 3〜5並列が実用的な上限です。
まとめ
Claude Codeのサブエージェントを活用すると:
- 独立したタスクを並列実行でき、開発速度が大幅に向上します
- runモード(ワンショット)とsessionモード(永続)を使い分けましょう
- ファイル競合を避け、タスク指示を具体的に書くのがコツです
- 3〜5並列が実用的なスイートスポットです
私の場合、5ステップ以上の作業が発生した時点で「これは並列化できないか?」と考えるクセがつきました。この習慣だけでも、1日あたり30分〜1時間の時間節約になっています。
ぜひ、まずは2〜3並列から始めてみてください。