メインコンテンツへスキップ
モジュール 2:マルチエージェント 1 / 6
中級 S07 タスクグラフ 依存関係 Task ツール

タスクグラフと依存関係

TaskCreate、TaskUpdate、TaskGet、TaskList を使い、複雑な作業を依存関係グラフとしてモデル化する。

2026年3月20日 18 分で読む
確認済み カリキュラム確認日: 2026年7月20日

学ぶこと

セッション 3 では構造化 Task ツールを紹介しました。ここでは依存関係のエッジを追加し、Claude が実行可能、ブロック中、並列化可能な作業を区別できるようにします。

次を学びます。

  • タスクが有向非巡回グラフ(DAG)を形成する仕組み
  • addBlockedByaddBlocks による依存関係エッジの表現
  • TaskList で ready set を探し、TaskGet で詳細を確認する方法
  • タスクグラフは並列作業を可能にするが、エージェントを自動起動しない理由

フラットなリストでは足りない理由

次の五つのタスクを考えます。

□ データベース migration を作成
□ API routes を追加
□ 認可 middleware を追加
□ frontend を更新
□ integration tests を実行

フラットなリストでは、今開始できるタスク、一緒に実行できるタスク、上流の失敗時に止めるべきタスクが分かりません。

作業を DAG としてモデル化する

          ┌───────────────┐
          │ システムを調査  │
          └───────┬───────┘

          ┌───────┴────────┐
          ▼                ▼
   ┌────────────┐   ┌────────────┐
   │ DB migration│   │ API 設計    │
   └──────┬─────┘   └──────┬─────┘
          └───────┬─────────┘

          ┌───────────────┐
          │     認可       │
          └───────┬───────┘
          ┌───────┴────────┐
          ▼                ▼
   ┌────────────┐   ┌────────────┐
   │ Frontend    │   │ Integration│
   │ 統合         │   │ tests      │
   └────────────┘   └────────────┘

状態が pending で、blockedBy にあるすべてのタスクが完了しているタスクは ready です。複数の ready タスクが独立していても、並列実行には Claude が別のサブエージェントや teammate に割り当てる必要があります。Task ツールは調整状態を保存しますが、それ自体はスケジューラーではありません。

現在のツールで依存関係を作る

最初にタスクを作成し、TaskCreate が返す ID を取得します。

{"tool": "TaskCreate", "subject": "DB migration を作成", "description": "schema と rollback テストを追加"}
{"tool": "TaskCreate", "subject": "API contract を設計", "description": "request、response、errors を定義"}
{"tool": "TaskCreate", "subject": "認可を追加", "description": "policy と unit tests を実装"}

返された ID が 123 だとします。タスク 3 が二つの上流タスクを待つようにします。

{
  "tool": "TaskUpdate",
  "taskId": "3",
  "addBlockedBy": ["1", "2"]
}

上流タスク側から逆向きの関係を追加することもできます。

{
  "tool": "TaskUpdate",
  "taskId": "1",
  "addBlocks": ["3"]
}

TaskList で簡潔なスナップショットを取得し、説明、blocksblockedBy が必要なときは TaskGet を使います。

{"tool": "TaskList"}
{"tool": "TaskGet", "taskId": "3"}

これらの payload は統合でツール契約を理解するためのものです。通常の Claude Code の会話では、依存関係を自然言語で説明し、Claude にツールを呼び出させます。

Ready Set を実行する

各スケジューリング時点で次を行います。

  1. 現在のタスクリストを読む。
  2. completed、deleted、in-progress のタスクを除外する。
  3. blockedBy に未完了タスクがあるものを除外する。
  4. ready タスクを一つ選ぶか、独立した ready タスクを意図的に並列割り当てする。
  5. 開始前に選んだタスクを in_progress にする。
  6. 検証成功後だけ completed にする。
  7. ready set が変わるため、グラフを読み直す。
ready(task) = pending(task)
              AND blockedBy(task) のすべての依存が completed

上流タスクが失敗した場合、依存タスクを pending のままにし、失敗タスクの説明に blocker を追加するかグラフを修正します。リストを緑にするためだけに下流タスクを完了にしてはいけません。

プロンプトパターン

構造化 Task ツールでこの機能を実装してください。

1. 独立して検証できる成果ごとに一つのタスクを作成する。
2. addBlockedBy または addBlocks で依存関係を追加する。
3. 実装前に最初の TaskList を表示する。
4. ファイルと副作用が競合しない場合だけ、独立した ready タスクを並列実行する。
5. ブロックされたタスクは pending のままにする。
6. 指定したチェックが通った後だけ完了にする。
7. 最後にタスクグラフと検証結果を示す。

よくある間違い

  • **TodoWrite で依存関係を表現する:**現在の依存フィールドは TaskUpdate のものです。
  • **タスク ID を作る:**ID は TaskCreate の結果から返されます。
  • **ready を自動実行とみなす:**割り当てと実行は別の判断です。
  • **循環を作る:**A が B を待ち、B が A を待つと、どちらも ready になりません。
  • **細かな編集をすべてタスクにする:**タスクは独立した意味と検証方法を持つべきです。

次のセッション

セッション 8 ではフォアグラウンド実行とバックグラウンド実行を調べます。同じ依存関係グラフを使って、バックグラウンド作業を安全に開始できる時点を判断できます。

公式ソース

最終確認:2026-07-20。