TL;DR
- 従来のTodoWriteがTasks機能に進化し、ファイルベースの永続化・セッション間共有が可能になった
- Planは「設計・承認」、Tasksは「進捗追跡」という役割分担
- マルチエージェントでTask共有するには
CLAUDE_CODE_TASK_LIST_ID環境変数、またはsettings.jsonのenvキーを使用 - Plan承認時に「Taskを作成したら停止して」と指示することで、並列実行の準備ができる
解決したい課題
Claude Codeで大規模な実装を行う際、1つのセッションで順次処理するのは非効率です。
複数のターミナルで並列に作業を進めたいが、タスクの進捗共有や重複作業の防止が課題になります。
背景
Ver 2.1.16で従来のTodoWriteがTasks機能に置き換わりました。
この新機能により、セッション間でのタスク共有が可能になり、マルチエージェント開発のワークフローが現実的になりました。
前提条件
- Claude Code v2.1.16以降
- 基本的なClaude Codeの操作に慣れていること
- Planモードの使用経験があること
注意事項
私の検証環境ではWindows11, Powershellで実施しました。
そのためBash/WSLのコマンドは動作未確認であり、誤っている可能性がありますのでご容赦ください。
Todos から Tasks への進化
従来のTodoWrite
従来のTodoWriteには以下の制限がありました。
| 項目 | 制限 |
|---|---|
| 永続性 | セッション内のメモリにのみ保存 |
| セッション間共有 | 不可能 |
| 依存関係管理 | なし |
| マルチエージェント | 非対応 |
新しいTasks機能
Tasks機能では以下が改善されました。
| 項目 | 改善点 |
|---|---|
| 永続性 |
~/.claude/tasks/にファイル保存 |
| セッション間共有 | 環境変数で同一リストを参照可能 |
| 依存関係管理 |
blockedBy/blocksフィールドで定義可能 |
| マルチエージェント | 複数セッションで協調作業可能 |
利用可能なツール
| ツール | 用途 |
|---|---|
TaskCreate |
新しいタスクを作成 |
TaskGet |
特定のタスク情報を取得 |
TaskUpdate |
ステータスや情報を更新 |
TaskList |
全タスクを一覧表示 |
確認方法
ターミナルでCtrl+Tを押すとタスクリストの表示を切り替えられます。
Plan と Tasks の関係
PlanとTasksは補完的な関係にあります。混同しやすいので、役割を明確にしておきましょう。
役割の違い
Plan = 「何をどうやるか?」を決める(設計・承認フェーズ)
Tasks = 「どこまで進んだか?」を追跡(実行・追跡フェーズ)
| 観点 | Plan | Tasks |
|---|---|---|
| フェーズ | 実装前 | 実装中 |
| 目的 | アプローチの選択・承認 | 作業の進捗管理 |
| ユーザー関与 | 承認が必要 | 進捗確認 |
| 成果物 | 計画ファイル(PLAN.md等) | タスクリスト |
典型的なワークフロー
Planファイル参照の注意点
重要: ClaudeはTask着手時にPlanファイルを自動的に再読み込みしません。
長いセッションやコンテキスト圧縮後は、Planの内容が失われている可能性があります。
未検証ではありますが、以下のような対策が考えられます。
- TaskのdescriptionにPlanの要点を含める
TaskCreate:
subject: "AuthServiceの実装"
description: |
- JWT検証ロジックをvalidateToken()に実装
- user-serviceのUserRepositoryを使用
- エラー時はUnauthorizedExceptionをthrow
- 詳細: PLAN.md セクション2.1参照
- CLAUDE.mdにルールを追加
## Task実行ルール
複雑なTaskに着手する際は、関連するPlanファイルを再読み込みすること。
マルチエージェントTask共有マニュアル
ここからが本記事の本題です。
複数のClaude Codeセッションでタスクを共有し、並列開発を行う手順を解説します。
前提条件
- 同一マシン上で複数ターミナルを開ける環境
- 各ターミナルで同じプロジェクトディレクトリにアクセス可能
全体フロー
Step 1: Plan作成セッション
最初のターミナルで、Task List IDを指定してClaude Codeを起動します。
PowerShell(Windows)の場合:
# ターミナル1
$env:CLAUDE_CODE_TASK_LIST_ID = "learning-docs"; claude
Bash / WSL の場合:
# ターミナル1
CLAUDE_CODE_TASK_LIST_ID=learning-docs claude
起動後にユーザがPlanモードで作業(計画作成)を依頼すると、Claudeは通常通り計画を作成します。
Step 2: Task登録で停止させる
ここが重要なポイントです。 Plan承認時に、以下のように指示します。
計画は承認します。
Tasksを作成したら実行せずに停止してください。
マルチエージェントで並列実行したいです。
Claudeは全タスクを登録した後、停止します。
Claude: [TaskCreate] で全タスクを登録
- Task 1: ○○
- Task 2: ○○
- Task 3: ○○
- Task 4: ○○
Claude: 「Tasksを登録しました。別ターミナルを開いてください。」
Step 3: 追加エージェントを起動
別のターミナルを開き、同じTask List IDを指定してClaude Codeを起動します。
環境変数は各ターミナル(シェルプロセス)ごとに独立しています。Step 1で設定した環境変数は、新しいターミナルには引き継がれません。そのため、各ターミナルで同じ値を設定する必要があります。
PowerShell(Windows)の場合:
# ターミナル2(同じIDを再度指定)
$env:CLAUDE_CODE_TASK_LIST_ID = "learning-docs"; claude
Bash / WSL の場合:
# ターミナル2(同じIDを再度指定)
CLAUDE_CODE_TASK_LIST_ID=learning-docs claude
起動すると、CLAUDE_CODE_TASK_LIST_IDに基づいたTasksが起動直後に表示されています。
Step 4: 各エージェントに担当を割り当て
各ターミナルで担当するタスクを指示します。
並行作業が開始されると、複数エージェントが1つのTaskファイルを更新するため、進捗状況はある程度同期的に表示されます。
但し現時点では、リアルタイムに同期されるというわけではありません。
画像はメインエージェント、Ctrl+TでTasksツリーを展開した状態です。

実用的なプロンプト集
Plan承認時(停止させる)
計画を承認します。
Tasksを作成したら実行を開始せずに待機してください。
複数ターミナルで並列実行します。
追加エージェント起動時
TaskListを確認してください。
他のセッションで登録されたタスクから、ownerが未設定のものを選んで着手してください。
作業完了したら完了マークを付けてください。
進捗確認
TaskListで全タスクの進捗を確認してください。
現時点での制限事項
| 項目 | 現状 |
|---|---|
| 自動割り当て | なし(手動で指示が必要) |
| 競合制御 | ownerフィールドで管理(楽観的ロック) |
| リアルタイム同期 | TaskListで都度確認が必要 |
| 他Agentのタスク完了検知して開始 | プロンプトの工夫で疑似的には可能だがポーリングが発生するので従量課金だとコスト面の課題あり |
マルチエージェント機能は発展途上のため、今後のアップデートでより自動化される可能性があります。
設定リファレンス
CLAUDE_CODE_TASK_LIST_ID(タスクリスト共有)
タスクリストの名前を指定する方法は2つあります。
方法1: 環境変数で指定
CLAUDE_CODE_TASK_LIST_ID=my-project claude
用途: 一時的な使用、作業内容で動的に切り替えたい場合
方法2: settings(.local).jsonで指定
// .claude/settings.local.json(個人用)または .claude/settings.json(チーム共有)
{
"env": {
"CLAUDE_CODE_TASK_LIST_ID": "my-project"
}
}
用途: プロジェクト固定、チームで共有したい場合
settings.jsonのenvキーで設定した環境変数は、すべてのセッションに自動適用されます。毎回環境変数を設定する手間が省けます。
保存先
~/.claude/tasks/my-project/
シェルエイリアスの定義(環境変数方式の場合)
シェルのプロファイルにエイリアスを定義しておくと便利です。
Bash / WSL (.bashrc / .zshrcに追記):
alias claude-auth="CLAUDE_CODE_TASK_LIST_ID=learning-docs claude"
alias claude-tasks="CLAUDE_CODE_TASK_LIST_ID=task-service claude"
PowerShell ($PROFILEに追記):
function claude-auth { $env:CLAUDE_CODE_TASK_LIST_ID = "learning-docs"; claude }
function claude-tasks { $env:CLAUDE_CODE_TASK_LIST_ID = "task-service"; claude }
CLAUDE_CODE_ENABLE_TASKS(Tasks機能の有効/無効)
| 値 | 動作 |
|---|---|
true(デフォルト) |
新Tasks機能が有効 |
false |
旧TodoWriteシステムに戻る |
旧システムが必要な場合のみ設定します。
Bash / WSL:
export CLAUDE_CODE_ENABLE_TASKS=false
PowerShell:
$env:CLAUDE_CODE_ENABLE_TASKS = "false"
まとめ
Claude CodeのTasks機能により、以下が可能になりました。
- 永続的なタスク管理: セッション終了後も継続可能
- セッション間共有: 複数ターミナルでの並列開発
- 依存関係の明示: タスク間の順序を定義可能
マルチエージェント開発はまだ手動調整が必要ですが、大規模な実装作業の効率化に有効です。
今後のアップデートでさらに使いやすくなることが期待できます。
個人的な試行錯誤の過程で、かつてPlanが作成するTodosのタスクをそれぞれ個別のサブエージェントに担当させて並列実行するような構造を目指していた時期がありました。
しかし計画段階での制御、調整が複雑怪奇になり頓挫した過去があります。
Tasksのマルチエージェント対応は、シンプルにユーザの頭の中で「誰に何を担当させるか」を実行できる点が強力に感じます。





