Claude Codeに「次のタスクやっといて」ができるタスク管理ツール Task Master を使ってみた
タスク管理できない人間のぼやき
ELYZAでプロダクト機械学習エンジニアをやっている中村(@tyo_yo_)です。
新しい機能を実装する際、PRD (プロダクト要求仕様書: Product Requirements Document) から実装すべきタスクを一つひとつ切り出していく作業。「ここはこうで、あそこはああで...」と考えながらチケットを作る時間って、正直コーディングより疲れませんか。
あと、歯を磨いている時にふと「あ、あの不具合直さなきゃ」と思い出す瞬間。スマホを取り出してバックログツールにメモしたり、いつのまにか混沌と化したバックログを見て目を背けてしまったり...
弊社ではGitflowに基づいた開発フローを採用しているのですが、Notionのボードビューでのタスク管理とはどうも噛み合わない部分がありました。PRやブランチの進行に合わせてカードを更新してもすぐにズレが生じたり、手動での同期が必要になったりして、結果的にどちらを信じればいいのか分からなくなる瞬間が多かったんですよね。
タスクに取りかかるという一番重いタスク
タスクをやるときに何が一番大変ですかと言われれば、結局タスクをやり始める瞬間が一番大変だと思うんです。
「さて、次は何をやるんだっけ?」とタスクリスト眺めて、「これをやるには、あれを先に調べて、これを確認して...」と考えているうちに、気づけば30分経っている。やっと取り掛かったと思ったら、途中で別のタスクが気になり始めて集中が途切れる。
理想を言えば、デバッガーでn
(next)キーを連打するみたいに、次のタスクが自動的に始まって、実装に集中できる状態が欲しいんですよね。「次これやって」「はい」「次これ」「はい」と、タスク管理のオーバーヘッドを最小限にしたい。
AIエージェントがタスクを管理してくれる時代?
Task MasterはClaude Codeと連携して動作するAI駆動のタスク管理ツールで、npmで公開されているオープンソースプロジェクトです(公式ページ)。
タスク管理系のAIエージェントツールってすごくいっぱいあるんですが、Task MasterはGitHub上で22.2kのスターがついていて、一番人気そうだったので触ってみました。
Task Masterの特徴
PRDを用意すれば、AIが自動的にタスクを生成して、適切なサブタスクに分解してくれます。「この機能を実装するには、まずこれやって、次にあれを...」という思考プロセスを、AIが代わりにやってくれるわけです。
最大の強みは、Claude Codeとの統合ですね。Claude Codeに「次は何やればいい?」と聞けば、Claude CodeがTask MasterのMCPツール(get_next_taskみたいなやつ)を実行してくれて、次にやるべきタスクをClaudeが進め始めてくれます。
自分がTask Masterで助かってるのは、タスク管理というものがtasks.jsonというJSONファイルによって管理されるようになることです。このtasks.jsonがsingle source of truthで、そのtasks.jsonはCLIやMCP、Claude Codeなどから様々な形でとても触りやすくなっています。
クイックスタート: 実際に使ってみる
ここからは、Task Masterを実際にセットアップして使い始めるまでの手順を見ていきます。
1. インストール
npm install -g task-master-ai
グローバルにインストールすることで、どのプロジェクトでもtask-master
コマンド(またはtm
エイリアス)が使えるようになります。
2. プロジェクトの初期化
task-master init
このコマンドを実行すると、こんな感じのディレクトリ構造が作成されます:
.taskmaster/
├── tasks/
│ └── tasks.json # タスクの本体
├── docs/
│ └── prd.txt # PRD用ファイル
├── config.json # AI モデル設定
└── templates/
└── example_prd.txt # PRDテンプレート
3. Claude Codeにタスクを作成してもらう
Claude Codeに対して「ブログを書こうと思うんだけど、これこれこういうこととこういうことをしたいから、タスクとサブタスク適当に切って」みたいな命令をしました。
すると、こんな感じのタスクが切られました。tasks.jsonが現れました:
{
"master": {
"tasks": [
...,
{
"id": 39,
"title": "Task Masterを使った技術ブログの執筆",
"description": "Task MasterとClaude Codeを組み合わせたタスク管理の実践を紹介する技術ブログを執筆する。エンジニア向けに、AIエージェントによるタスク管理の利便性と、既存のワークフロー(Notionでのタスク管理)との連携方法を示す。",
"details": "著者: ELYZA開発チームの機械学習エンジニア 中村\n公開先: Notion(社内レビュー後)\n想定読者: エンジニア(特にタスク管理に課題を感じている人)\n\nブログの構成:\n1. TLDR(箇条書きまとめ)\n2. 導入・課題提起(タスク管理の煩わしさ、心理的障壁)\n3. Task Masterの紹介\n4. 実際にやってみた(このブログ執筆プロジェクト自体をTask Masterで管理)\n5. おまけ: Notionへのエクスポート\n6. 技術的な深掘り(ディレクトリ構造、処理フロー、スラッシュコマンドとエージェントの関係)\n7. まとめ・個人的な感想\n\n参考記事:\n- PromptOps記事(ライトなトーンで実践的)\n- AIコーディング時代の自動化記事",
"testStrategy": "",
"status": "pending",
"dependencies": [],
"priority": "medium",
"subtasks": [
{
"id": 1,
"title": "要件定義とインタビュー",
"description": "ブログの目的、構成、トーン、想定読者について中村さんと確認する。参考記事のトーンを踏襲しながら、必要な要素を明確化する。",
"details": "",
"status": "done",
"dependencies": [],
"parentTaskId": 39
},
...
]
},
]
}
}
4. タスク一覧の確認
作ったタスクは、Task MasterのCLIコマンドから確認することもできます。
tm list
(tm
っていうエイリアス好き)
5. MCP設定
claude mcp add taskmaster-ai -- npx -y task-master-ai
6. モデル設定
Task Masterは内部でタスクの分解とかをするのにAIを使うんですが、そこのモデルを設定することができます。
Claude Codeのサブスクリプションを使うことができ、追加の費用はかかりません。.taskmaster/config.json
を以下のように設定します。
{
"models": {
"main": {
"provider": "claude-code",
"modelId": "sonnet",
"maxTokens": 64000,
"temperature": 0.2
},
"research": {
"provider": "claude-code",
"modelId": "opus",
"maxTokens": 32000,
"temperature": 0.1
},
"fallback": {
"provider": "claude-code",
"modelId": "sonnet",
"maxTokens": 64000,
"temperature": 0.2
}
}
}
現場のタスク管理フローと紐付ける
Task Masterはエンジニア向けのツールで、CLIやMCP経由でタスクを管理します。これはエンジニアにとってはとても便利なんですが、エンジニア以外の方は結構使いにくいという性質があります。
もちろん割り切って開発用のタスクだけで使うとか、色々方法は考えられるんですけど、例えばtasks.jsonをマスターデータとしてそれをGUIから編集できるようにするとか、色々工夫すればもちろんできるんですが、ここではシンプルに一方通行のエクスポートだけ、Task Masterの情報からNotion側にエクスポートする機能だけの追加で作りました。
/tm-export-report
コマンド
Task Master上のデータをNotionにエクスポートするClaude Codeのスラッシュコマンドを作りました。このコマンドは以下のような処理を行います。
- Task Masterの全タスク情報を取得
- 前回のスナップショットと比較して変更を検出
- Notionページを自動生成 (Notion MCPを使用)
実行すると、Notionに以下のようなページが生成されます。(かなり雑に作ったものなので参考までに。Outputのフォーマットだったり、トークン消費を抑えたりなど改善したいところはいっぱいあります…)
実際に使用したプロンプト .claude/commands/tm-export-report.md
```yaml
# Task Master 進捗レポート出力
現在のTask Master状態をNotionに出力し、全体進捗と前回からの変更を記録します。
## 実行手順
1. **現在時刻の取得:**
- `TZ=Asia/Tokyo date '+%Y-%m-%d %H:%M'` で日本時間を取得 (レポートタイトル用)
- `TZ=Asia/Tokyo date '+%Y%m%d-%H%M'` で日本時間を取得 (スナップショットファイル名用: YYYYMMDD-HHMM形式)
2. **現在のタスク取得:**
- `mcp__task-master-ai__get_tasks` (withSubtasks: true) で全タスク・サブタスクを取得
3. **前回スナップショット読込:**
- `.taskmaster/snapshots/tasks-snapshot-*.json` から最新のファイルを使用
- `ls -t` でタイムスタンプ順にソートして最新を取得
- スナップショットが存在しない場合は初回実行として扱う
4. **ステータス変更の計算:**
- 前回のスナップショットと現在の状態を比較
- ステータスが変更されたタスクを特定
- 変更の種類ごとに分類: 📋→🔄 (開始), 🔄→✅ (完了)
5. **Notionページコンテンツ生成:**
- **必ず以下のフォーマット例に従って作成すること**
- 2つのセクションで構成:
- **📊 全体進捗:** 全タスクの現在状態
- **📝 変更履歴:** 前回からの変更内容
6. **タスクエントリのフォーマット:**
- **タイトル行フォーマット:** `▶ {ステータス絵文字} {優先度絵文字} {タイトル}`
- ステータス絵文字:
- ✅ done
- 🔄 in-progress
- 📋 pending
- 優先度絵文字(ステータスの隣に配置):
- 🔴 high
- 🟡 medium
- 🟢 low (表示不要)
- タスクタイトル・説明は日本語に翻訳
- "タスクX:" のようなプレフィックスは不要
- トグル内容:
- タスク説明(1行目)
- 依存関係(ある場合のみ、次の行に「⚠️ X, Yを先に行う必要があります」)
- サブタスク一覧(通常の箇条書き)
7. **変更履歴のフォーマット:**
- 統計情報は不要
- ステータス変更ごとにセクション分け:
- **📌 新規追加されたタスク** (前回スナップショットに存在しないタスク)
- **📋→🔄 開始したタスク** (pending → in-progress)
- **🔄→✅ 完了したタスク** (in-progress → done)
- 各タスクの変更にサブタスクも含める
- 新規追加されたタスクには完全な説明とサブタスクを含める
8. **Notionページ作成:**
- `mcp__Notion__notion-create-pages` でページ作成
- 親ページ: `https://www.notion.so/path/to/your/page`
- ページタイトル: `進捗レポート - {YYYY-MM-DD} {HH:mm}`
- 毎回新しいページを作成
9. **スナップショット保存:**
- 現在の状態を `.taskmaster/snapshots/tasks-snapshot-{YYYYMMDD-HHMM}.json` に保存
- ファイル名形式: `tasks-snapshot-20251008-1351.json` (年月日-時分)
- 次回実行時のベースラインとして使用
10. **結果表示:**
- NotionページURLを表示
- 変更サマリーを表示
## 重要な注意事項
### フォーマット
- **必ず日本語で記載**(英語タイトルはすべて翻訳)
- タイトル行: ステータス絵文字 + 優先度絵文字(high/mediumのみ) + タイトル
- "タスクX:" のプレフィックスは不要
- サブタスク番号(1.1など)も不要、シンプルにタイトルのみ
- 変更履歴は📌新規追加、📋→🔄、🔄→✅でセクション分け
- 統計情報不要、実際の変更内容のみ記載
- 必ず上記フォーマット例に従うこと
### MCPツール利用時の注意点
**Notion MCP (`mcp__Notion__notion-create-pages`):**
- `pages` パラメータは必ずJSON配列形式で渡す
- ❌ 間違い: `pages` に長い文字列を直接渡す
- ✅ 正しい: `[{"properties": {...}, "content": "..."}]` の配列形式
- コンテンツが長い場合でも配列の要素として正しく構造化する
**Task Master MCP (`mcp__task-master-ai__get_tasks`):**
- `withSubtasks: true` を指定してサブタスクも取得
- `projectRoot` パラメータは必須(絶対パス)
```
おわりに
実際に導入してみて、ファーストインプレッションを書かせていただきました。
新しい技術に合わせて仕事のやり方を変えるのは簡単じゃないですよね。ただ、かつてITが紙ベースの業務を一変させたように、今度はAIやエージェントが私たちの働き方を大きく変えるタイミングなんじゃないでしょうか。
ELYZAでは、AIエージェントと協業する開発チームのメンバーを募集しています。
私たちと一緒に、AIコーディング時代の新しい開発体験を作りませんか?
ELYZA は機械学習エンジニアはもちろん、ソフトウェアエンジニアや AI コンサルタントなど、様々な職種で一緒に事業を前に進めてくれる仲間を募集しています。詳しくは下記をご覧ください。
Discussion