同じ「Subagent」、5社で意味が全然違った ── 用語論争の正解を探す
先週の自分への突っ込み
先週 5/12 にマルチエージェントフレームワーク5社を並べた記事を書きました。Claude Code、OpenAI Agents SDK、CrewAI、LangGraph、AutoGen を「Subagent」「役割」「ノード」みたいなレイヤーで比較した記事です。
書き終えてから、自分でレビューして気持ち悪さが残った。
5社とも Subagent という単語を使っているのに、私はそれを「ほぼ同じ概念」として扱ってしまった。違うんですよね。同じ単語に5つの違う実装が貼り付いている。今週はそこをほどく記事を書きます。
5社のドキュメントから Subagent の定義だけを取り出して、横に並べてみた。結論から言うと、用語論争に「正解」はなかった。でも「どの会社がどう使い分けているか」のマップは作れた。
私は最初、CrewAI の
Agentと Claude Code の
subagentが同じものだと思っていました。両方とも「専門化された別の AI」ですよね。でも調べてみると、呼び出し方も状態の持ち方も並列性もライフサイクルも、全部違う。今回はその違いを 5 項目に分解します。
なぜ Subagent という単語だけ取り出すのか
エージェント周りの用語は爆発的に増えています。Agent、Subagent、Worker、Handoff、Node、Graph、Crew、Team、Swarm。フレームワークごとに新語が生まれ、似た意味で違う実装が乱立している。
その中で Subagent という単語は特殊です。
5社のドキュメントすべてに登場します。OpenAI Agents SDK は 2026 年 4 月 15 日のアップデートで「subagent pattern」を runtime primitive として正式採用しました。LangGraph はサブグラフを sub-agent として扱う設計を Deep Agents で前面に出している。Anthropic は Claude Code に
.claude/agents/という専用ディレクトリまで用意した。CrewAI と AutoGen はもう少し前から Worker や Conversable な相手として subagent 相当を扱っています。
つまり Subagent は、5社が同じ単語で別の概念を指している 用語衝突の典型 なんです。ここを整理しないと、ライブラリ選定の議論が噛み合わない。
Anthropic Claude Code: ファイルとして存在する専門家
Claude Code の Subagent は
.claude/agents/配下に置かれた Markdown ファイル です。私はこれを最初に見たとき「えっ、ファイル?」となりました。Python クラスでもなく、設定 JSON でもない。Markdown 一枚で Subagent が一人増える。
公式ドキュメントを読むと、構造はこうです。
- YAML frontmatter にエージェントの名前と説明
- 本文がそのエージェントの system prompt
- メインの Claude が「このタスクはこの Subagent に任せたほうがいい」と判断して委譲する
Anthropic 公式は 5 つのビルトイン Subagent を提供しています。Explore、Plan、General-purpose、statusline-setup、Claude Code Guide。さらに VoltAgent の awesome-claude-code-subagents には 100 以上のコミュニティ製 Subagent が並んでいます。
ここで肝心なのは 「呼び出されたら別のコンテキストウィンドウで動く」 という点です。Subagent の冗長な思考は親に逆流せず、結果サマリだけが返ってくる。Anthropic のドキュメントには明示的にこう書かれています。「verbose output stays in the subagent's context while only the relevant summary returns to your main conversation」。
つまり Claude Code の Subagent は コンテキストの分離装置 です。専門家であると同時に、本体のコンテキストを汚さないための隔離壁でもある。
私はこれを知ったとき、上司に頼まれたタスクを部下に丸投げして「終わりました」とだけ報告するイメージが浮かびました。部下の頭の中で何があったかは上司は知らなくていい。そのため上司の頭は他のタスクに使える。
OpenAI Agents SDK: handoff される独立した相手
OpenAI Agents SDK の Subagent は ステートレスな独立エージェント です。これは Anthropic とまったく違う設計思想。
ベースになる概念は
handoffです。あるエージェントが別のエージェントにタスクを引き渡す。デフォルトでは
transfer_to_<agent_name>という名前のツールが自動生成される。エージェント A が「これは B に任せたほうがいい」と判断すると、
transfer_to_Bを呼び出して B に処理が移ります。
2026 年 4 月 15 日、OpenAI は Agents SDK 史上最大のアップデートを公開しました。このとき初めて subagent が runtime primitive として正式採用された。それまでは handoff を組み合わせて自前でオーケストレーションを書く必要があったのが、SDK 標準で planning agent → searcher → editor → verifier みたいな構成が組めるようになった。
OpenAI 公式ブログの表現がわかりやすいです。
Instead of writing your own orchestration loop and message bus, subagents become a runtime primitive.
Anthropic との違いを 1 行で言うと、Anthropic は 委譲して結果を返す モデル、OpenAI は タスクごとバトンを渡す モデル。前者はメインが司令塔のまま、後者はバトンを持つやつが主役になる。
handoff は会話の主導権ごと移動するので、ステートはタスクのために整形された状態でだけ引き継がれます。Anthropic の Subagent が「部下に丸投げ」なら、OpenAI のそれは「リレーで次の走者にバトンを渡す」感覚に近いと私は思っています。
CrewAI: 役割を持ったワーカー
CrewAI の Subagent は Agent クラスのインスタンス で、人間のチーム編成をそのまま模倣した設計です。
CrewAI ドキュメントを読むと、Agent には必ず 3 つの属性があります。
-
role
: 役職(例: Senior Python Developer) -
goal
: その役職の目的(例: 高品質な Python コードを書く) -
backstory
: 背景設定(例: 10 年の経験を持つエンジニア)
これらは LLM への system prompt として注入されます。さらにツールを持たせたり、他のエージェントへの委譲を許可したり、構造化出力を強制したりできる。
CrewAI が他社と違うのは、プロセス という概念で Agent 群の協調方法を選べる点です。Sequential(順番に走る)、Hierarchical(マネージャー Agent が下に振る)、Consensual(投票で決める)。これは Anthropic の「親が子を呼ぶ」モデルでも、OpenAI の「バトンを渡す」モデルでもない、組織図ベースのオーケストレーション です。
私はここで本気で勘違いしました。CrewAI の Agent と Claude Code の Subagent は、似て非なるものです。前者は チームメンバー として常時待機している。Crew を kickoff した瞬間、定義された全 Agent が同じプロセスの中で動き出す準備をする。後者は呼ばれたときに別コンテキストで起動する 派遣社員 のようなものです。
役割と背景を与えて常時待機させるか、必要なときに呼び出して使い切るか。設計思想がまったく違う。
LangGraph: ノードとしての関数
LangGraph の Subagent は グラフのノード です。これは他のどれとも違う、もっとも抽象的な定義。
LangGraph では Agent や Subagent という言葉よりも先に、State、Node、Edge という基本語彙があります。State はワークフロー全体で共有されるデータ構造。Node は State を変換する関数。Edge はノード間の遷移。Subagent はこの「Node」のひとつにすぎない。
公式ドキュメントの表現を借りると、LangGraph models agent execution as nodes connected by edges sharing a common State object。ここに「Subagent」という独立した一級概念はありません。
ただし 2025 年 10 月の v1.0 リリース以降、subagent パターン自体は強く意識されています。LangChain チームが出している Deep Agents は、任意の CompiledStateGraph を sub-agent として親グラフに差し込める設計。
SendAPI を使うと、親が複数の子グラフを動的に並列起動できる。
LangGraph の Subagent は 状態機械として定義された処理単位 であり、CrewAI のような役職も Claude Code のような Markdown 定義も持ちません。あるのは「この State を受け取って、次の State を返す関数」だけ。
抽象度が高いぶん表現力は最強です。ループも分岐もリトライも、グラフを書けば全部表現できる。学習コストと引き換えに、複雑なワークフローの記述能力を手に入れる。私が信長の野望で全国統一を目指すときの内政画面と似ています。柔軟だが、最初は迷う。
Microsoft AutoGen: 会話する相手
AutoGen 0.4 の Subagent は ConversableAgent の対話相手 です。これも他社と発想がだいぶ違う。
AutoGen の世界観では、すべてが会話としてモデル化されます。Agent 同士が自然言語のメッセージをやりとりし、会話履歴がそのまま状態になり、複数ターンの対話からマルチステップのワークフローが立ち上がってくる。
ConversableAgentは AutoGen のコア抽象です。発話できる、聞ける、応答ロジックを登録できる。
register_reply()で自前の応答関数を差し込める。
auto_reply機能で人間の介入なしに対話を継続できる。
2026 年に大幅再設計された AutoGen 0.4 は、actor model ベースのイベント駆動アーキテクチャになりました。複数の ConversableAgent が非同期にメッセージを送り合い、分散実行も可能になっている。
ここで AutoGen の Subagent が他社と決定的に違うのは、ターン制でしか動かない という点です。Claude Code の Subagent は呼ばれたら一気に走り切って結果を返す。CrewAI の Agent は Task 単位で完結する。AutoGen の ConversableAgent は 何ターンも往復しながら徐々に結論に近づく。
これは喧嘩の仲裁会議に似ています。AB 両者の言い分を聞きながら少しずつ落としどころを探る。一発で結論は出ない。出るまで対話する。これが AutoGen の世界観。
5項目で並べる比較表
5社の Subagent を 5 つの観点で並べました。

| 観点 | Claude Code | OpenAI Agents SDK | CrewAI | LangGraph | AutoGen |
|---|---|---|---|---|---|
| 呼び出し方 | 親が委譲 | handoff (バトン) | Crew が orchestrate | グラフが起動 | 対話メッセージ |
| 状態 | 別コンテキスト | ステートレス委譲 | Agent 単位で保持 | 共有 State | 会話履歴 |
| 並列性 | あり (別 ctx) | handoff チェーン | Task 単位で並列可 | Send API で並列 | 非同期 actor |
| 通信プロトコル | ファイル + 親子 | tool 呼び出し | Crew 内部 API | State 更新 | メッセージ送信 |
| ライフサイクル | 呼ばれて起動 | handoff で起動 | kickoff で常時 | グラフ実行中 | アクター常駐 |
並べてみるとわかるのですが、同じ単語に 5 つの違う設計哲学 が貼り付いています。
「呼び出し方」の列だけ見ても、親が司令塔のままなのは Anthropic。バトンを渡すのは OpenAI。組織図に従うのは CrewAI。グラフの遷移は LangGraph。発話なのは AutoGen。比喩がまるで一致しない。
これは技術的には混乱の原因ですが、思想的には興味深い。 5 社それぞれが、エージェントの分業を別の哲学で捉えている ということだから。
「正解」はあるのか
ここまで読んで、「で、どの定義が正しいの?」と思った方、残念ながら正解はありません。
正解がないのは、Subagent という単語がそもそも 何かを切り出した部分エージェント という曖昧な意味しか持たないからです。何から切り出したか、どう切り出したかが各社で違う。OpenAI は会話の主導権を、Anthropic はコンテキストを、CrewAI は役職を、LangGraph はグラフのノードを、AutoGen は対話の相手を切り出している。
ただし 実務で選ぶ基準 はあります。
- 単発タスクをサッと専門家に投げたい: Claude Code 型
- 長いタスクを段階的にバトン渡ししたい: OpenAI Agents SDK 型
- 役割分担で組織を作りたい: CrewAI 型
- 状態遷移とループを細かく制御したい: LangGraph 型
- 複数 AI が議論しながら結論を出してほしい: AutoGen 型
5 社の Subagent はゼロサムではなく、用途が違うだけです。私は今、Claude Code で日常タスクを回しながら、複雑な分岐がほしいプロジェクトでは LangGraph を試しています。両立可能。
用語が乱立するときの読み方
最後にメタな話。
エージェントの世界では、用語が乱立する時期が今後も続きます。Subagent の次は Skill、Tool、Hook、Capability、Workflow とまだまだ続く。同じ単語に複数の実装が貼り付くのは避けられない。
私の対処法はシンプルで、単語ではなく「5 項目」で読む ようにしています。今回でいえば、呼び出し方・状態・並列性・通信プロトコル・ライフサイクル。これだけ揃えると、新しいフレームワークが出てきても同じ表に並べられる。
新語を見たら、その新語が何を切り出した部分概念なのかを 5 項目で書き出す。これだけで用語論争の 9 割は終わります。残りの 1 割は哲学の話なので、放っておいていい。
エンジニアとして大事なのは、用語の正解を当てることではなく、 目の前のタスクに対してどの設計思想が一番ハマるか を見極めることですよね。私は新しいフレームワークが出るたびにこの 5 項目で並べ直す癖をつけています。3 ヶ月後にまた新しい Subagent が出てきても、これだけあれば慌てない。
これらをさらに掘り下げた Book は執筆中です。マルチエージェント協調の歴史と各社の設計思想の差を、コードレベルまで降りて整理しています。公開時にまたお知らせします。
まとめ
- Subagent という単語は 5 社で意味が違う。共通定義はない
- Claude Code は コンテキスト分離、OpenAI はhandoff バトン、CrewAI は役職ワーカー、LangGraph はグラフノード、AutoGen は対話相手
- 5 項目(呼び出し方・状態・並列性・通信・ライフサイクル)で並べると違いが見える
- 実務での選び方は、自分のタスクが上の 5 つのどれに当てはまるかで決める
- 用語論争に時間を使わず、設計思想で判断する
面白くいきましょう。
参考文献
- Anthropic:Create custom subagents - Claude Code Docs
- Anthropic:Subagents in the SDK - Claude API Docs
- OpenAI:Handoffs - OpenAI Agents SDK
- OpenAI:The next evolution of the Agents SDK
- CrewAI:Agents - CrewAI
- LangChain:LangGraph: Agent Orchestration Framework
- LangChain:deepagents - GitHub
- Microsoft:AutoGen - GitHub
- VoltAgent:awesome-claude-code-subagents