CLAUDE LABEN
MCP — エンタープライズ管理型MCPコネクタが追加。管理者が一度繋げばユーザーは初回ログイン時にゼロタッチで利用できます(Okta連携・Team/Enterpriseベータ)LEGAL — 法務向けMCPコネクタ20以上と実務領域プラグイン12本が公開され、リサーチ・契約・案件管理を扱えますAGENTS — Code w/ ClaudeでManaged Agentsを発表。計画を立て数百のサブエージェントへ分配し、出力を検証してから返しますLIMIT — Pro・Max・Team・EnterpriseのClaude Code 5時間レート枠が2倍に拡大されましたBILLING — 6/15予定だったAgent SDK等の課金分離は撤回(保留)され、従来どおりサブスク上限内で扱われますFIX — スピナーの固着やサブエージェントのトランスクリプト不整合など、Claude Codeの安定性修正が続いていますMCP — エンタープライズ管理型MCPコネクタが追加。管理者が一度繋げばユーザーは初回ログイン時にゼロタッチで利用できます(Okta連携・Team/Enterpriseベータ)LEGAL — 法務向けMCPコネクタ20以上と実務領域プラグイン12本が公開され、リサーチ・契約・案件管理を扱えますAGENTS — Code w/ ClaudeでManaged Agentsを発表。計画を立て数百のサブエージェントへ分配し、出力を検証してから返しますLIMIT — Pro・Max・Team・EnterpriseのClaude Code 5時間レート枠が2倍に拡大されましたBILLING — 6/15予定だったAgent SDK等の課金分離は撤回(保留)され、従来どおりサブスク上限内で扱われますFIX — スピナーの固着やサブエージェントのトランスクリプト不整合など、Claude Codeの安定性修正が続いています
記事一覧/API & SDK
API & SDK/2026-06-20上級

サブエージェントの並列実行で、1つの失敗が全体を巻き込まない設計

複数のサブエージェントを並列に走らせる fan-out / fan-in 構成を、トークン予算・結果コントラクト・部分失敗の扱いまで含めて設計します。1つのブランチが落ちても全体を止めない実装と実測値を共有します。

Claude API78Agent SDK3サブエージェント9並列処理3エラーハンドリング4

プレミアム記事

夜間に4サイト分の記事候補を集める処理を、長いあいだ1サイトずつ順番に回していました。1サイトあたり40秒前後。4本直列で約2分半。動いてはいるのですが、3サイト目の途中でネットワークが切れた日は、そこから先がまるごと巻き添えになって落ちます。私自身、個人開発で4サイトを一人で回している身として、朝のログを開いて「3サイト目で止まっていた」と気づくたびに、設計の素朴さを思い知らされていました。

順番に回す必要は、本当はどこにもありませんでした。サイトごとの候補集めは互いに独立しています。それなら並列に投げて、返ってきたものから受け取り、落ちたものだけ後で拾い直せばいい。いわゆる fan-out / fan-in です。ここでは、その骨格と、見落としやすい予算・結果の固定・部分失敗の三点を、実装に落としていきます。

直列をやめると、何が壊れるか

並列化そのものは難しくありません。難しいのは、並列にした瞬間に表面化する三つの落とし穴です。

ひとつ目は予算です。直列なら「全体で○トークンまで」と素朴に数えられましたが、並列だと複数のブランチが同時にトークンを食います。レート上限にぶつかると、全ブランチが同時に 429 を返し始めます。

ふたつ目は結果の形です。直列なら1件ずつ目視に近い感覚で扱えましたが、並列では返り順がばらつき、1件でも壊れた JSON が混じると集約処理が静かに崩れます。

みっつ目が部分失敗です。これがいちばん効きます。4本中1本が落ちたとき、残り3本の成果まで捨ててしまっては、並列化した意味が薄れます。

fan-out / fan-in の骨格

まずワーカーを1つ定義します。サイト1つを受け取り、候補リストを返す単純な関数です。

import Anthropic from "@anthropic-ai/sdk";
 
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
 
type Site = { id: string; domain: string; maxTokens: number };
 
async function collectCandidates(site: Site): Promise<string> {
  const res = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: site.maxTokens,
    system: "あなたは技術ブログの編集者です。JSON配列のみを返してください。",
    messages: [
      { role: "user", content: `${site.domain} 向けの記事候補を5件、JSON配列で。各要素は {title, angle} 。` },
    ],
  });
  const block = res.content.find((b) => b.type === "text");
  return block && block.type === "text" ? block.text : "[]";
}

fan-out 側は、このワーカーを全サイトに対して同時に起動し、Promise.allSettled で待ち合わせます。Promise.all ではなく allSettled を選ぶのが要点です。前者は1本でも reject すると全体を reject しますが、後者は成功と失敗を区別したまま全件返してくれます。

const sites: Site[] = [
  { id: "cl", domain: "claudelab.net", maxTokens: 1024 },
  { id: "gl", domain: "gemilab.net", maxTokens: 1024 },
  { id: "ag", domain: "antigravitylab.net", maxTokens: 1024 },
  { id: "rl", domain: "rorklab.net", maxTokens: 1024 },
];
 
const settled = await Promise.allSettled(
  sites.map((s) => collectCandidates(s))
);

ここまでで「待ち時間が直列の合計から最遅ブランチ1本ぶんに縮む」効果は得られます。ただし、このままでは壊れた応答も成功扱いで通ってしまいます。次の二つでそこを締めます。

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

この記事の続きを読む

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

この記事で得られること
fan-out / fan-in を Promise.allSettled で組む実装と、ブランチ単位の予算配分の決め方
子エージェントが返す形を zod で固定し、壊れた応答を親が安全に弾く結果コントラクト
部分失敗を再試行・デッドレター・スキップに振り分ける判定表と、直列比での実測短縮値
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-06-16
自律エージェントの判断根拠を台帳に残す — 「なぜそうした」を後から説明できる設計
自律エージェントが本番デプロイやファイル削除のような後戻りしづらいアクションを取るとき、採用案・却下案・前提を構造化して台帳に残す設計をまとめました。structured output と追記専用ログ、影響度による線引きまで実装します。
API & SDK2026-04-25
Claude API × Convex でリアクティブな AI アプリを本番構築する — データフロー設計とエージェントパターン
Convex のリアクティブデータベースと Claude API を組み合わせて、本番運用に耐えるチャット・エージェント系アプリを構築する方法をまとめました。スキーマ設計、Action/Mutation/Query の境界、ストリーミング、ツール状態管理、冷え始めの落とし穴まで、開発現場の判断軸を共有します。
API & SDK2026-04-20
Claude API のストリーミングで詰まる3つの落とし穴——実装してわかった本当の難しさ
Claude APIのストリーミング実装で実際にはまりがちなエラーハンドリング・バックプレッシャー・トークンカウントの3点を、動くコードと一緒に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →