サブエージェントと Task で並列開発を回す
| ツール活用 | Claude Code
タグ: #Claude Code #並列処理 #サブエージェント #Flutter
メモ帳アプリにタグ機能を足すとき、UI 実装・テスト作成・ドキュメント生成を 4 つのサブエージェントに分けて並列で走らせてみました。逐次なら 4 時間想定の作業が 1.5 時間。向く作業と向かない作業がはっきり分かれたので、その線引きと親エージェントの役割をまとめます。
Claude Code のサブエージェント
Claude Code には「サブエージェント」があります。特定の役割に特化した子プロセスを起動する仕組みです。Task ツールで親から子を生やし、独立した文脈で作業を並行実行できます。
これを使うと、1 つの大きなタスクを複数の小タスクに分解して、それぞれ並列で進められます。
なぜ並列化したいか
個人開発で、1 つのリリースに 10 個の新画面を入れるとします。同じ AI に逐次でやらせると、画面 1 → 画面 2 →…と長いコンテキストを引きずります。後半は応答が遅く、そして雑になります(雑になるのは、こちらの投げ方のせいでもあります)。
それぞれをサブエージェントに切り出すと、各エージェントは自分の画面だけを見ればよくなります。応答の品質が安定しました。
Flutter マルチ画面実装で実際にやった例
メモ帳アプリに「タグ機能」を追加するリリースで試してみました。並列で走らせたのは次の 4 つです。
- サブエージェント A: タグ一覧画面(TagListScreen)の UI 実装
- サブエージェント B: タグ編集ダイアログ(TagEditDialog)の UI 実装
- サブエージェント C: TagRepository のユニットテスト作成
- サブエージェント D: タグ機能の使い方ドキュメント生成
親エージェントは先に「Drift の Tags テーブル定義」と「TagRepository インターフェース」を作って共有します。それを前提に、子エージェントを並列で走らせました。
# イメージとしては、親プロンプトの中で Task ツールを 4 回呼ぶ
Task(description: "TagListScreen 実装", prompt: "...")
Task(description: "TagEditDialog 実装", prompt: "...")
Task(description: "TagRepository テスト", prompt: "...")
Task(description: "タグ機能ドキュメント", prompt: "...")
逐次でやると 4 時間の想定でした。並列だと 1.5 時間程度で終わりました。
並列化が向く作業
判定フローはだいたい次の通りです。3 つの条件すべてに YES なら、迷わず並列化します。
## 並列化判定フロー
1. 各サブタスクは独立して完結するか?
- YES → 次へ
- NO → 直列のまま実行
2. 入力(仕様)と出力(成果物)は事前に確定できるか?
- YES → 次へ
- NO → 親エージェントで先に確定させてから並列化
3. 同じファイルを 2 つ以上のサブエージェントが触らないか?
- YES → 並列化 OK
- NO → ファイル分担を見直す or 直列化
- 独立性が高い作業(互いに依存しない)
- 入力と出力が明確(インターフェースが先に定義されている)
- 大量の繰り返し(多言語ファイルの 14 言語分更新など)
並列化が向かない作業
- 同じファイルを複数エージェントが触る作業(コンフリクトする)
- 設計判断が必要な作業(複数エージェントが別の方針を取ってしまう)
- デバッグ系の作業(直列に状況を理解する必要がある)
向かない作業に無理やり投げると、あとで統合する自分がいちばん苦労します。
並列化のコツ
大事なのは親エージェントの役割です。
- 共通の前提(型定義、インターフェース、規約)を先に固める
- 各サブエージェントに渡すプロンプトは、独立した文脈で読めるように書く
- 完成後の統合は親エージェントが担当(コンフリクト解消、整合性チェック)
この 3 つを守れば、並列化のうまみが出ます。
まとめ
- サブエージェントは独立した文脈で並列実行できる
- 役割を分けると、応答品質が安定する
- 独立性の高い作業に向く。設計判断が要る作業には向かない
- 親エージェントが「前提共有」と「統合」を担う
「やりたいことが多すぎて手が回らない」。そう感じたら、まず並列化できる部分を切り出してサブエージェントに任せます。それだけでリリースのペースが上がります。手が増えた気がして、ちょっとうれしい。