CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-05-25上級

Subagent 間で状態を渡す3つの設計パターン — 4ヶ月のブログ自動生成で見えた使い分け

JSON ファイル / 環境変数 / Context Bundle — Subagent パイプラインで状態を引き渡す3つの方法を、4ヶ月の本番運用データで比較し、それぞれの適用範囲を整理しました。

claude-code129subagent4pipelinestatearchitecture7

プレミアム記事

Subagent を本格的に並列運用しはじめると、ほぼ全員が同じ壁にぶつかります。「親エージェントと子エージェントの間で、どうやって状態を渡せばいいのか」という壁です。Claude Code の Agent ツールはステートレスで、子エージェントは渡されたプロンプトだけを手がかりに動きます。親が知っている文脈を共有しないと、子は同じ調査をゼロからやり直してしまいます。

私自身、2014年から個人開発でアプリ事業を続けており、ここ数年はメディア運営も並行しています。Claude Lab を含む 4 サイトのブログ自動生成パイプラインを 4 ヶ月運用してきて、状態の引き渡しだけで何度も書き直しが発生しました。今回はその過程で残った 3 つのパターンと、どのスケール域でどれを選ぶべきかをまとめます。

なぜ Subagent の状態管理は難しいのか

Claude Code の Subagent モデルは、Unix のサブシェルに似ています。親プロセスが子を fork するわけではなく、純粋にプロンプト文字列を渡して新しいセッションを起動します。子セッションは独立したコンテキストウィンドウを持ち、終了時に最終メッセージだけを親に返します。

この設計は安全性とコンテキスト分離という意味では非常に良いのですが、副作用として「親から渡せる情報量にはプロンプトサイズの上限がある」という制約が生まれます。私が運用しているブログ自動生成パイプラインでは、1 サイトあたりの記事生成プロセスで以下の情報を子に渡す必要があります。

  • 過去 14 日に生成した記事のスラッグ一覧(重複回避用)
  • 直近の GSC データ(クリック数・表示回数・CTR)
  • カテゴリ別の記事数バランス
  • 進行中の実体験題材(AdMob / Crashlytics / Xcode などの観察ログ)
  • 4 サイトの相互参照を避けるための除外スラッグ集

これを全部プロンプトに直書きすると、子セッションの起動時点でコンテキストが膨れあがり、肝心の記事執筆に使えるトークンが減ってしまいます。実測で 3 万トークン中、状態渡しだけで 1.2 万トークンを消費していた時期がありました。これではプレミアム記事に必要な「実用性シグナル 3 つ以上」を入れる余裕が残りません。

パターン1: JSON ファイル経由(推奨レンジ: 〜100件/日)

最初に採用したのが、親エージェントが JSON ファイルに状態を書き出し、子エージェントが Read ツールで読み出すパターンです。

実装コード

// 親側: state を JSON で永続化
import { writeFileSync, readFileSync } from 'fs';
import { join } from 'path';
 
type PipelineState = {
  pipelineId: string;
  timestamp: number;
  recentSlugs: string[];
  gscData: Record<string, { clicks: number; impressions: number }>;
  excludedSlugs: string[];
  categoryBalance: Record<string, number>;
};
 
const STATE_DIR = '/tmp/claude-pipeline-state';
 
function writeState(state: PipelineState): string {
  const path = join(STATE_DIR, `${state.pipelineId}.json`);
  // 原子的書き込み: tmp に書いてから rename
  const tmpPath = `${path}.tmp.${process.pid}`;
  writeFileSync(tmpPath, JSON.stringify(state, null, 2), 'utf-8');
  require('fs').renameSync(tmpPath, path);
  return path;
}
 
function readState(pipelineId: string): PipelineState {
  const path = join(STATE_DIR, `${pipelineId}.json`);
  return JSON.parse(readFileSync(path, 'utf-8'));
}
 
// 子エージェントに渡すプロンプトには「パス」だけを書く
const childPrompt = `
重複回避のため、まず以下のパスから状態を Read してください:
  ${writeState(currentState)}
 
その後、トピック選定 → 記事生成 → JSON への結果書き戻しを行ってください。
`;

4ヶ月運用での観察

このパターンのオーバーヘッドは、Linux サンドボックス内で実測 12ms でした。プロンプトに直書きする方式と比べてトークン消費は 1.2 万 → 0.4 万まで圧縮できました。トークン換算で月 30 ドル前後の節約になります(Sonnet 4.6 の入力単価で計算)。

ただし運用 2 ヶ月目に問題が発生しました。Cowork のスケジュールタスクで複数サイトの生成が時間的に重なったとき、同じ JSON ファイルに対する同時書き込みが発生し、片方の更新が失われる事象が 1 週間で 3 件起きました。

対処として上記コードのように tmp ファイル経由の rename による原子的書き込みに切り替えました。Linux の rename(2) は同一ファイルシステム内で原子的に動くため、これだけで競合は解消できます。

このパターンが向く場面

私の場合、1 サイトあたり 1 日 4 本のペースでは JSON 方式が最も扱いやすく、現在もこのパターンを採用しています。状態が 100KB を超えない範囲・同時実行が 4 並列程度まで・ファイルシステムが永続的に使える環境では、最初の選択肢として推奨します。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
JSON ファイル / 環境変数 / Context Bundle の3パターンを実装コード付きで比較(オーバーヘッド: 12ms / 0.3ms / 380ms)
4サイト合計 月630本の自動生成で見えた、スケール域ごとの最適選択(〜100件 / 100〜1,000件 / 1,000件超)
本番でハマった失敗3例(環境変数 32KB 制限 / JSON 同時書込競合 / Context Bundle トークン爆発)と回避策
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-05-02
Claude Code が途中で止まる・フリーズする問題の完全診断ガイド
Claude Codeが途中で止まる・フリーズする問題を症状別に診断。コンテキスト枯渇・サブエージェント無応答・無限ループなど主要な原因と即効対処法を網羅した実践ガイド。
Claude Code2026-04-24
Claude Code のサブエージェントが結果を返さない時の診断手順
Claude Code のサブエージェントが止まる・結果を返さない時、どこから調べるかの実践的な診断フローを、症状別の原因とコード例で解説します。
Claude Code2026-04-12
Claude Code の Sub-agent パターン — 複雑なタスクを自律的に分解・並列処理する設計手法
Claude Code が内部で活用する Sub-agent アーキテクチャを解剖し、自分のプロジェクトでタスク分解・並列実行・結果統合を実現する具体的な設計パターンを解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →