「Claude Code でサブエージェントを並列で走らせたいけど、fork() と通常の fresh agent どちらを使えばいい?」——エージェント設計を自動化に組み込もうとすると、この判断で詰まります。
結論を先に言います。fork() を使うのは「親のコンテキストが必要で、かつ子の出力をコンテキストに戻したくないとき」 です。
この記事の環境
- Claude Code(Agent SDK)
- subagent_type: "fork" / "general-purpose"
- 自動化設計(content-executor)を組む中で確認した動作
fork() の実際の動作
fork() で起動したエージェントは、親セッションのコンテキストをすべて引き継ぎます。
重要なのは キャッシュ共有 です。fork() は親と同じコンテキストから始まるため、Prompt Caching がそのまま効きます。コンテキストが重いセッションでも、fork() の子エージェントは初回から低コストで動きます。
親セッション(コンテキスト 5万トークン)
└── fork() → 子は同じ 5万トークンのキャッシュを引き継ぐ
入力コスト = キャッシュヒット分(入力単価の約1/10)で処理される
一方、fresh agent はコンテキストがゼロから始まります。タスクの背景・ファイルの内容・制約条件をすべてプロンプトに書いて渡す必要があります。
fork() vs fresh agent の判断基準
| 条件 | fork() | fresh agent |
|---|---|---|
| 親のコンテキストが必要 | ✅ | ❌(プロンプトに書く) |
| 子の生ログを親コンテキストに入れたくない | ✅ | ✅ |
| 独立した視点・別モデルが必要 | ❌ | ✅ |
| 軽量な単発タスク | ❌(過剰) | ✅ |
| 並列研究・調査 | ✅ | ✅ |
| コンテキストを読んだ後の派生作業 | ✅ | △(要再ロード) |
fork() を選ぶ 3 条件:
- 親が今持っているコンテキストを子エージェントにも使わせたい
- 子の作業結果(ツール呼び出しの生ログなど)を親コンテキストに入れたくない
- 並列でいくつかの独立した問いを調べたい
fresh agent を選ぶ条件:
- 別モデルを使いたい(fork は親と同じモデル固定)
- コンテキストのない「第三者の目」が必要
- 親のコンテキストが重すぎて引き継ぎが逆効果なとき
実装例(並列チェック)
// 並列チェックを fork() で実行する設計例
Agent({ subagent_type: "fork", prompt: "誇張チェック: ...", run_in_background: true })
Agent({ subagent_type: "fork", prompt: "ターゲット適合チェック: ...", run_in_background: true })
Agent({ subagent_type: "fork", prompt: "CTA重複チェック: ...", run_in_background: true })
// 各チェックの完了を待ち、結果だけを受け取る
content-executor(本体)
├── fork(誇張チェック) ─┐
├── fork(ターゲット適合チェック) ─┤ 並列実行
└── fork(内部リンク存在チェック) ─┘
↓ 判定結果だけを受け取る(生ログは引き継がない)
これで親のコンテキストを汚さずに、並列チェックを低コストで実行できます。
まとめ
- fork() = コンテキスト継承 + キャッシュ共有。重いセッションの派生作業に使う
- fresh agent = ゼロから開始。クリーンな判断・別モデル使用時に使う
- 子の生ログを親コンテキストに戻したくない場合はどちらでも
run_in_background: true
判断基準の比較表と、実際の自動化設計への組み込みパターンの詳細は元記事にも載せています → https://www.masatoman.net/articles/claude-code-fork-subagent-guide-2026?utm_source=qiita&utm_medium=referral&utm_campaign=dist-syndication&utm_content=claude-code-fork-subagent-guide-2026