散らばってるタスク表をClaudeCodeとNotionを使って一元管理

個人で動かしているプロジェクトが増えてきて、TODOがあちこちに散らばっていました。

それをNotionのデータベース1つにまとめて、登録や更新はClaudeCodeに任せるようにしました。

自分でタスク表を書き直さなくてよくなって、だいぶ楽になりました。

この記事では、その仕組みと、実際に回してみて分かったことを書きます。

忙しい人向け

  • ClaudeCodeからNotionへは、Notion公式のMCPサーバーでつないでいます。

    claude mcp addで登録して、ClaudeCodeの中で/mcpからログインするだけです(ClaudeCodeのドキュメント)。

  • Notionには「タスク」と「プロジェクト」の2つのデータベースを作り、すべてのプロジェクトのタスクを1つのタスクDBに入れています。

  • DBのIDやプロパティの書き方、「完了にするときは完了日も入れる」といった決まりは、ClaudeCodeのSkillに書いています。

  • タスクを登録・更新するだけのセッションと、実際に作業するセッションを分けています。

    タスク管理の会話に作業の中身が混ざると、会話が長くなって精度が落ちるからです。

  • 困っているのは、作業が終わってもタスクを完了にしてくれないことがある点です。

前はリポジトリごとにTODOを置いていた

Notionに移す前は、リポジトリごとにTODO.mdやtasks.mdを置いていました。

プロジェクトが少ないうちはそれで足りていました。

ただ、数が増えると、どこに何が残っているのかを見るのに、リポジトリを1つずつ開く必要がありました。

複数のプロジェクトのタスクを1つの画面で見たい、というのが一番の理由です。

ほかにも、外にいるときにスマホから見たり、思いついたことをその場で足したりしたいと思っていました。

Markdownのファイルだと、スマホから見るのも書くのも面倒です。

そこで、スマホのアプリもあって、ClaudeCodeから直接読み書きできるNotionにまとめることにしました。

タスクの登録をAIに任せたかったので、ClaudeCodeから触れることが決め手でした。

ClaudeCodeからNotionにつなぐ

Notionは公式のMCPサーバーを公開しています(Notionのドキュメント)。

MCPは、ClaudeCodeのようなAIツールから外部のサービスを操作するための仕組みです。

登録はターミナルで次のコマンドを1回打つだけです。

claude mcp add --transport http --scope user notion https://mcp.notion.com/mcp

--scope userを付けると、どのプロジェクトでClaudeCodeを起動してもNotionを使えるようになります(ClaudeCodeのドキュメント)。

プロジェクトをまたいでタスクを扱いたいので、私はこれにしています。

登録したら、ClaudeCodeの中で/mcpを開き、ブラウザでNotionにログインして許可すれば使えるようになります。

つながっているかは、ターミナルで確かめられます。

claude mcp list

notion: https://mcp.notion.com/mcp (HTTP) - ✔ Connectedと出ていれば大丈夫です。

タスクDBの作り

Notionには、「タスク」と「プロジェクト」の2つのデータベースを作りました。

プロジェクトDBには、リポジトリやアプリごとに1行ずつ入れています。

タスクDBには、すべてのプロジェクトのタスクを入れて、どのプロジェクトのタスクかはリレーション(別のDBの行とつなぐ項目)で持たせています(Notionのヘルプ)。

タスクDBの主な項目は次のとおりです。

項目 種類 中身
名前 タイトル タスクの名前
ステータス ステータス 未着手 / 進行中 / 完了 / 取り下げ
優先度 セレクト 高 / 中 / 低
完了日 日付 完了にした日
メモ テキスト 一覧で見える短いメモ
参照パス テキスト 関係するファイルのパス
プロジェクト リレーション プロジェクトDBの行

ステータスの「取り下げ」は、やらないと決めたタスクです。

消してしまうと、なぜやめたのかが後から分からなくなるので、残すようにしています。

取り下げたタスクは、未完了の一覧には出したくありません。

一方で、完了率を出すときには「やった」に数えたくありません。

そのため、完了かどうか・数に入れるかどうかを数式(Notionのヘルプ)で出して、プロジェクトDBの完了率と残件数はそこから計算しています。

完了日は、月ごとに何件終わったかをグラフで見るのに使っています。

決まりはSkillに書いておく

NotionのDBを読み書きするときの決まりは、ClaudeCodeのSkillにまとめています。

Skillは、作業の手順や知識をSKILL.mdというファイルに書いておくと、ClaudeCodeが必要なときに読んで使ってくれる仕組みです(ClaudeCodeのドキュメント)。

Skillとサブエージェントの使い分けは、以前の記事でも書いています。

SKILL.mdの先頭のdescriptionに「タスクを追加して」「〇〇完了した」「残タスク一覧出して」のような言い方を並べておくと、そう話しかけたときにこのSkillが使われます。

Skillには、主に次のことを書いています。

  • タスクDBとプロジェクトDBのIDと、各プロジェクトの行のID
  • 項目の名前と種類、ステータスの意味
  • 完了にするときは、完了日も必ず同時に入れる。
  • 優先度は、私が言っていなければ空のままにする(推測で埋めない)。
  • 取り下げにするときは、完了日を入れない。

完了日を同時に入れる決まりは、Notionの無料プランだとデータベースのオートメーション(ステータスが変わったら日付を入れる、などの自動処理)が使えないためです(Notionのヘルプ)。

手で入れないと完了日が空のままになり、月ごとのグラフに乗りません。

実際に使ってみて分かった癖も、Skillに書き足しています。

たとえば、完了率のような数式の値は、MCPから読むと数字ではなく参照のような値で返ってきました。

そのため、件数を答えるときはステータスを数えるように書いています。

一覧を取るときに使うSQLの書き方も、通ったものを残しています。

SELECT "名前", "ステータス", "優先度"
FROM "collection://<タスクDBのID>"
WHERE "ステータス" IN ('未着手', '進行中')

未完了の絞り込みを!= '完了'にしないのは、「完了」がステータスの選択肢の名前と、ステータスのグループの名前の両方にあって紛らわしいからです。

IN ('未着手', '進行中')なら、取り下げも一緒に外れます。

タスク管理のセッションと作業のセッションを分ける

この運用で一番大事にしているのが、セッションの分け方です。

タスク管理用に1つセッションを立てて、そこではNotionのタスクの登録・更新・進捗の確認だけをします。

実際の作業は、タスクごとに新しいセッションを立てて進めます。

流れはおおむね次のとおりです。

タスク管理のセッション
  → Notionにタスクを登録する
  → 着手するタスクの指示文をファイルに書く
       (NotionのURL、完了条件、最初に読むもの、書き方の決まりなど)
  → 新しいセッションを立てて、その指示文を渡す

作業のセッション
  → Notionのタスクを「進行中」にする
  → 作業して、PRを出す
  → 作業中に別の課題を見つけたら、自分でタスクを作らず、タスク管理のセッションに登録を頼む

分けている理由はコンテキストです。

ClaudeCodeは、会話の履歴や読んだファイルをすべてコンテキストとして抱えて動きます。

タスク管理の会話の中で作業までやると、記事の本文やビルドのログがどんどん積み上がって、タスク管理に必要な情報が埋もれていきます。

コンテキストが長くなると精度が落ちる話は、コンテキストについての記事にまとめています。

分けておけば、タスク管理のセッションには「どのタスクがどの状態か」だけが残ります。

作業のセッションも、そのタスクに必要なことだけを読んで始められます。

作業中に見つけた別の課題をタスク管理のセッション経由で登録させているのも、同じ理由です。

作業のセッションがその場で直し始めると、本来のタスクから話がずれていきます。

Notionに登録しておけば、あとで忘れることもありません。

困っていること: 完了にしてくれない

いま困っているのは、作業が終わってもタスクを完了にしてくれないことがある点です。

Skillには「完了にするときは完了日も入れる」と書いてありますし、指示文にも「マージ後に完了にする」と書いています。

それでも、PRがマージされたあとにNotionを見ると、進行中のまま残っていることがあります。

原因はまだはっきりしていません。

Skillの書き方が悪いのかもしれないと思っています。

ほかに思い当たるのは、作業の流れです。

このブログでは、作業のセッションはPRを出したところで止まり、マージは私が自分でしています。

つまり「マージ後に完了にする」タイミングでは、作業のセッションはもう動いていません。

作業のセッションに完了を付けてもらうには、マージしたあとにもう一度話しかける必要があります。

いまは、タスク管理のセッションに進捗を聞いたときに、PRがマージされているかと突き合わせて、完了になっていないものを直してもらっています。

まとめ

  • リポジトリごとに散らばっていたTODOを、NotionのタスクDB1つにまとめました。

    スマホからも見られて、思いついたことをその場で足せます。

  • ClaudeCodeからはNotion公式のMCPサーバーでつなぎ、DBの書き方や完了日の決まりはSkillに書いています。

  • タスク管理のセッションと作業のセッションを分けて、それぞれのコンテキストに余計なものが混ざらないようにしています。

  • 作業が終わっても完了にしてくれないことがあり、いまはタスク管理のセッションでPRと突き合わせて直しています。

参考リンク