- Todoist とは
- ToDo が一向に片付かない
- Todoist 標準のリマインダーではだめなのか
- 解決策: Claude Code に毎時、全件読み上げさせる
- そのまま貼れる設定3ファイル
- 貼る前に用意するもの
- 1. Todoist の MCP サーバーにつなぐ
- 2. 読み上げを許可し、モデルを軽いほうに落とす
- 3. cron の登録・取得・仕分け・読み上げの手順を書く
- 貼ったら
/todoist-reminderを打って鳴らし始める - 毎時うるさいので、嫌でも片付く
- 仕分け方は自分で書き換えられる
- 結果: 今日ぶんと期限切れが0件になった
- 毎時のリマインドが来ない・ずれるとき
- 新しい会話を始めたときと、7日たったときに消える
- 鳴る時刻はずれる
- まとめ
こんにちは、wandです!
私は Todoist で ToDo を管理しているのですが、
今日ぶんと期限切れが30件前後ある不健全な状態が、数ヶ月のあいだ恒常化していました。
それが、Claude Code に Todoist の MCP サーバーをつなぎ、
毎時読み上げさせるようにしたところ、0件になりました!
毎時うるさいので、嫌でも片付きます。
この記事では、そのために置いた設定と、そのまま使えるプロンプトをご紹介します。
Todoist とは
Todoist | ToDo リストで仕事と生活を整えよう世界中で 3,000 万人以上の人々やチームが愛用する「タスク& ToDo リスト」アプリのTodoist。念願だった集中する時間、心の平穏、整った生活を手に入れよう。
Todoist は ToDo タスク管理サービスです。
ブラウザ・スマホアプリ・デスクトップアプリから、同じリストを見られます。
AI から読み書きするための MCP サーバーも公開されていて、
Claude Code からは接続先の URL を1つ書き、OAuth を通せばつながります。
ToDo タスクには日付を設定でき、その日が来たものと、
やらないまま日付を過ぎたものは、「今日」の画面に集まります。
この記事で読み上げさせるのも、そこに集まるぶんです。
ToDo が一向に片付かない
私は Todoist を活用して数年になります。
ToDo が綺麗に片付くこともあるのですが、忙しい時期などは
「今日」の画面に30件前後が溜まった状態が数ヶ月続くことも。
「タスクが片付かない」状態が常態化してしまいます。
30件の中身は、その日じゅうにやるものばかりではありません。
決めた日をとうに過ぎたまま残っているものや、
やらなくてよくなったのに閉じていないものが混ざっています。
リストを開いて1件ずつ見ないかぎり、その区別は付きません。
Todoist 標準のリマインダーではだめなのか
決まった時刻に鳴らすだけなら、Todoist のリマインダーでも、
Google カレンダー連携から飛ばす通知でもできます。
タスク名を1件ずつ見させて、自分にとって重要かどうかで分けさせる。
時刻で鳴らすだけの通知にはできないのが、ここです。
解決策: Claude Code に毎時、全件読み上げさせる
Claude Code のセッション内 cron から、日中は1時間おきに次の3つを走らせています。
- Todoist の今日ぶんと期限切れを全件取り出す
- 自分にとって重要かどうかで仕分ける
- 件数と全件のタスク名、仕分けた結果の件数を読み上げる
読み上げに使っているのは、手元では macOS の say です。
読み上げさせて耳で片付ける話そのものは、PR レビューの記事に書きました。
【プロンプト配布】PR レビューを AI に読み上げさせて、ながら作業で片付ける溜まった PR レビューを耳で聞いて「OK」と返すだけにしました。
そのまま貼れる設定3ファイル
貼る前に用意するもの
| もの | 補足 |
|---|---|
| Claude Code | セッション内 cron の挙動は 2.1.261 で確かめたものです。鳴らせるのはセッションを開いているあいだだけです |
| Todoist のアカウント | MCP サーバーの接続に OAuth を通します |
| 読み上げのコマンド | 手元では macOS の say です。ほかの環境では自分のコマンドに読み替えてください |
2026年9月時点の情報です。
リマインドを受け取りたいディレクトリに、次の3つを置きます。
1. Todoist の MCP サーバーにつなぐ
{
"mcpServers": {
"todoist": {
"type": "http",
"url": "https://ai.todoist.net/mcp"
}
}
}
.mcp.json に書いたサーバーは、対話セッションで最初に使うときに1度だけ承認を求められます
(MCP サーバーの設定のドキュメント)。
置いたら /mcp を打って todoist の OAuth を通しておきます。
通していないと、リマインドがタスクを取りに行くところで止まります。
2. 読み上げを許可し、モデルを軽いほうに落とす
毎時発火のたびに許可を聞かれると自動化にならないので、say は先に通してあります。
{
"model": "sonnet",
"effortLevel": "medium",
"permissions": {
"allow": [
"Bash(say:*)"
]
}
}
model と effortLevel を軽いほうに落としてあるのは、毎時走らせるからです。
ただし、このファイルを置いたディレクトリでは、ユーザー設定の model と effortLevel がこれらの値に上書きされます。
上書きされるのはそのディレクトリの中だけで、ほかのリポジトリには影響しません。
リマインド以外の作業も同じディレクトリでするなら、この2行は消してください。
3. cron の登録・取得・仕分け・読み上げの手順を書く
cron に渡すプロンプトまで、この1枚に入っています。
---
name: todoist-reminder
description: >-
日中の毎時リマインド (8:13〜20:13) をこのセッションの cron に仕込み、その場で1回出す。
Todoist の今日ぶんと期限切れのタスクを全件取り出し、重要度 (自分の資産が増えるか) と
緊急度 (いま手を打たないと実害が出るか) の4象限に仕分けて、テキストと読み上げの両方で報告する。
読み上げにもサマリーを含める。cron 発火時と、スラッシュコマンドで呼ばれたときに使う。
---
# Todoist の毎時リマインド
## 方針
### 全件出す
要約や「変化なし」で畳むと、抱えている量が見えなくなる。
毎時のリマインドがうるさいなら、それはリマインドの問題ではなく
タスクを抱えすぎているという信号なので、**省略せず全件出す**。
うるささを減らす手段はタスクを減らすことであって、出力を削ることではない。
4象限サマリーは全件列挙の代わりではなく、そのあとに足すもの。
### 「重要」は自分を基準にする
一般的な重要度ではなく、**この人にとっての**重要度で分ける。
**重要** — 放っておいても誰も催促してこないが、やれば自分の資産が増えるもの。
- 健康に関すること
- 自分自身のビジネスに関すること
- 時間があったらやりたいのに、やれていないこと
**重要でない** — 他人の都合で降ってきたもの、および生活の維持コスト。
- 上司や取引先からの差し込み。依頼元にとって重要でも、この人にとっては重要ではない
- 支払い・申込み・行政手続き・名義変更などの事務
- 他人が待っている連絡 (謝罪・報告・調整)
- 家事、掃除、定期タスク
**日付が近いことは「重要」の理由にならない。** この取り違えが最も起きやすい。
### 緊急
いま手を打たないと実害が出るもの。自分ごとでも緊急になる。
**日付では決めない。** 時期を逃すと取り返しがつかないもの (生き物、季節もの) は、
日付の遠近と関係なく緊急に上げる。
### 1件ずつ、字面だけで判断する
複数のタスクを「引越し案件」のように束ねて、束の重要度で各件を判断しない。
関連づけは高い確率で外れるうえ、外れたまま重要度を引き上げてしまう。
**タスク名に書いてあることだけで分類する。**
字面から自分の資産に効くか判断できないものは重要でない側に置き、
末尾に「判定に迷った件」として挙げる。勝手に解釈して重要側へ繰り上げない。
## 手順
### 1. 重複確認
`CronList` を実行する。cron 式 `13 8-20 * * *` のジョブが既にあれば登録し直さない。
### 2. 未登録なら登録
`CronCreate` を次の内容で1件だけ呼ぶ。
- `cron`: `13 8-20 * * *`
- `recurring`: `true`
- `prompt`: 下記「cron に渡す prompt」をそのまま渡す
ジョブは7日で自動失効する。
登録できたかどうかは1行で報告する (例: `リマインド仕込み済み (8:13〜20:13 毎時・7日で失効)`)。
### 3. 取得する
`mcp__todoist__find-tasks-by-date` を `startDate=today`, `overdueOption=include-overdue`,
`limit=100` で呼ぶ。`hasMore` が true なら `cursor` で続きも取り、**全件そろえてから**分類に入る。
### 4. 出す
「出力形式」のとおりテキストを出し、続けて「読み上げ」のとおり読み上げる。
テキストを出さずに読み上げだけ、はしない。**それ以外の作業を勝手に始めない。**
## 出力形式
### 前半: 全件列挙
`今日ぶん N 件 / 期限切れ M 件` の1行サマリに続けて、
「今日ぶん」「期限切れ」に分けて全件を1件1行で挙げる。
各グループ内は放置が長い順。期限切れには決めた日を添える。
行はタスク名 (と決めた日) だけにして、提案や次アクションは書かない。**件数が多くても省略しない。**
### 後半: 4象限サマリー
Ⅰ〜Ⅳ の順に、各象限の件数を添えて出す。
- **Ⅰ. 重要 × 緊急** — 1件1行
- **Ⅱ. 重要 × 非緊急** — 1件1行。放置日数 (決めた日から今日までの日数) を添える。
ここが本題なので、見出しに「本来ここに時間を置きたい」と添える
- **Ⅲ. 重要でない × 緊急** — 1行に読点区切りでまとめる。見出しに「時間を吸っている本体」と添える
- **Ⅳ. 重要でない × 非緊急** — 1行に読点区切りでまとめる
そのあとに次の2つだけを短く書く。**分析を広げない。**
1. 全体に占める「重要でない」の件数と割合
2. 判定に迷った件 (あれば) と、どちらに転ぶかの1行
## 読み上げ
読み上げ文は次の3つをこの順でつなぎ、`Bash` で `say -v Kyoko -r 200 '<つないだ文>'` を
1回だけ実行する。**サマリーまで必ず読み上げる。**
1. `今日N件、期限切れM件。`
2. 全件のタスク名を、テキストと同じ順で読点で並べたもの (間引かない)
3. `重要かつ緊急A件、重要だが手つかずB件、重要でないのに急かされているC件、残りD件。`
- 声は `Kyoko` (`ja_JP`)、速度は `-r 200`
- 読み上げ文はシングルクォートで囲む。タスク名に含まれるシングルクォートは取り除く
- テキスト出力をそのまま読ませない (記号・URL・日付まで読まれる)。
記号は読まず、長いタスク名は意味が通る範囲で短くする
- 全件読むので、抱えている数が多いほど長くなる。長いと感じたらタスクを減らす合図
- `say` は再生が終わるまでブロックする。数十秒かかりうるが前景実行のままにする
## cron に渡す prompt
```
日中の毎時リマインドの時間です。todoist-reminder スキルを実行してください。
手順は .claude/skills/todoist-reminder/SKILL.md が唯一の正です。
それ以外の作業は始めないでください。
```
## 前提
- `.mcp.json` の `todoist` サーバーが接続済みであること (未認証なら `/mcp` から OAuth)
- 読み上げコマンドが使えること (macOS なら `say -v '?' | grep Kyoko` で確認)。
毎時の許可プロンプトを避けるため `.claude/settings.json` の `permissions.allow` に
`Bash(say:*)` を入れておく
- cron ジョブは Claude Code がアイドルのときだけ発火する。長い作業を回している間は後ろにずれる
鳴るのは日中の毎時 (13 8-20 * * *) です。
取ってくるのは今日ぶんと期限切れで、先の日付をつけたタスクは出てきません。
別の時間帯にするなら、cron 式は SKILL.md の「1. 重複確認」と「2. 未登録なら登録」の
2か所にあります。どちらも同じ値に書き換えてください。
片方だけ直すと、重複確認が永久に一致しなくなります。
時間帯を書いた文言は4か所です。description の「日中」と (8:13〜20:13)、
「2. 未登録なら登録」の報告の例、それと cron に渡す prompt の「日中」です。
読み上げコマンドを自分のものに替えるときは、.claude/settings.json の許可と、
SKILL.md の「読み上げ」「前提」の2つの節を直します。
Kyoko や -r 200 は say のオプションなので、そこも自分のコマンドのものに読み替えてください。
貼ったら /todoist-reminder を打って鳴らし始める
置いただけでは鳴りません。cron を登録するのは Claude なので、
セッションを開いて1回打つところから始まります。
スキルはディレクトリ名がそのままスラッシュコマンドになるので
(スキルのドキュメント)、
この配布物なら /todoist-reminder です。
打つと cron が登録され、続けてその場で1回読み上げが走ります。
あとは会話を開いたままにしておけば、毎時鳴ります。
毎時うるさいので、嫌でも片付く
1時間おきに、抱えている件数と全件のタスク名、仕分けた結果の件数が耳に流れてきます。うるさいです。
仕込んだ会話を開いているかぎり、静かにする方法はタスクを減らすことしかありません。
画面の通知は見なかったことにできますが、読み上げは勝手に耳に入ってきます。
1件ずつ潰すか、その場で「これはやらない」と決めて閉じるか、日付を動かすか。
どれかをやらないかぎり、次の時間も同じ数を聞かされます。
これが強制力としてはたらきます。
仕分け方は自分で書き換えられる
間に LLM を挟んでいるので、何をどう出すかは日本語で書けます。
サマリーの粒度も、優先度の付け方も、上に載せた SKILL.md を書き換えれば変わります。
私が使っているのは、重要と緊急の2軸で4象限に分ける形です。
毎時聞いていて多かったのは、Ⅲ (重要でない×緊急) と Ⅳ (重要でない×非緊急) でした。
書き換えて使うときのために、それぞれの指示が何のために入っているのかを並べておきます。
| 指示 | 何のためか |
|---|---|
| 「重要」を自分基準で定義する | 一般的な重要度で分けると、他人の都合で降ってきたものが上に来る |
| 緊急かどうかを日付で決めさせない | 私は Todoist の日付を、締め切りではなく、その日にやると決めた印として使っている。その日の 15:00 に入れた筋トレは、緊急ではない |
| 1件ずつ、字面だけで判断させる | この指示がないとタスクを論理的にまとめようとしてしまい、タスク名しか手掛かりがないので見当違いな結果になる。例: 「ブログ記事書く(重要)」「知人のブログ構築代行(重要でない)」が ブログ という単語に引っ張られてまとまってしまう |
| 省略せず全件出させる | 要約すると抱えている量が見えなくなる。1行にタスク名だけを並べさせ、提案や次アクションは書かせない。読み上げが短くなるのは、タスクが減ったときだけにする |
| 象限の見出しに役割を書かせる | 番号だけでは、どこに時間を割きたいのかが伝わらない。Ⅱ (重要×非緊急) には「本来ここに時間を置きたい」、Ⅲ (重要でない×緊急) には「時間を吸っている本体」と添えさせている |
重要と緊急の2軸で整理する考え方そのものは、
『完訳 7つの習慣 人格主義の回復』の「第3の習慣:最優先事項を優先する」から借りています。
第Ⅱ領域 (重要×非緊急) に自分の時間を割けているか、というのがもとの話です。
7つの習慣®「第3の習慣:最優先事項を優先する」 | フランクリン・コヴィー・ジャパン株式会社7つの習慣®における「第3の習慣:最優先事項を優先する」は、想像力(目に見えないものを思い描く力)をベースにしています。
完訳 7つの習慣 人格主義の回復 (新書サイズ)
結果: 今日ぶんと期限切れが0件になった

数ヶ月のあいだ30件前後あった今日ぶんと期限切れが、0件になりました!
数ヶ月ぶりに「今日」のタスクがぜんぶ消えました ✨
ブログの執筆にまつわるものは、その場で Claude に gh CLI を叩かせて
GitHub の issue へ転記させました。
このブログの原稿は git のリポジトリに置いてあり、
microCMS をやめて Markdown + git へ移してから、
issue と原稿が同じ場所に並んでいます。
重要でないものは、リスケやクローズで整理が進みました。
毎時のリマインドが来ない・ずれるとき
知っておけば、鳴らないときに慌てずに済むところが2つあります。
手元の Claude Code 2.1.261 と、公式ドキュメントで確かめたものです。
新しい会話を始めたときと、7日たったときに消える
cron ジョブはセッションの中にあります。
新しい会話を始めるとそのセッションのジョブは消えるので、
そのつど /todoist-reminder を打ち直します。
claude --resume や claude --continue で会話を再開したときは、
失効していない定期ジョブは戻る、とドキュメントに書かれています。
配布物の「1. 重複確認」で CronList を見ているのは、そこで二重に登録しないためです。
定期ジョブは作成から7日で失効します。最後に1回鳴って、そこで消えます。
同じ会話を7日以上続けるなら、そこでもう一度打ち直してください。
鳴る時刻はずれる
| 挙動 | どうなるか |
|---|---|
| 発火するのは Claude Code が動いていて、かつアイドルのときだけ | セッションを閉じている間は鳴らない。長い作業を回している間も、リマインドが後ろにずれる |
| 指定した分ちょうどには来ない | スケジューラが時刻をずらして鳴らす |
say は再生が終わるまでブロックする | 全件読むので、抱えている数が多い日ほど長くかかる |
表の上2つは Claude Code の定期タスクのドキュメント
に書かれているとおりです。say がブロックするのは手元で見たものです。
分単位で正確に鳴らしてほしい用事には向きません。
これは、いま抱えているものを聞き直して状況をつかむための毎時リマインドです。
まとめ
Todoist の今日ぶんと期限切れを Claude Code のセッション内 cron で毎時取り出し、
仕分けてから全件読み上げさせています。
30件前後あった今日ぶんと期限切れが、0件になりました!
| 置くもの | 役割 |
|---|---|
.mcp.json | Todoist の MCP サーバーにつなぐ |
.claude/settings.json | 読み上げを許可し、モデルを軽いほうに落とす |
.claude/skills/todoist-reminder/SKILL.md | cron の登録・取得・仕分け・読み上げ |
仕込んだ会話を開いているかぎり、静かにするにはタスクを減らすしかありません。
そして間に LLM がいるので、仕分け方も出し方も日本語で書き換えられます。
貼るのは3ファイル、あとは Todoist に OAuth を通します。
鳴り始めるのは、セッションを開いて /todoist-reminder を打ってからです。
会話を新しくするたびに、また打ち直します。
ここまで読んでくださったそこのあなたも、まずは1回、
自分の Todoist を仕分けさせて聞いてみてください。

wand
「wand」は魔法の杖を意味します。魔法のようにさまざまなものを自分の手で生み出せるようになりたい、そんな思いを込めました。 ハンドメイド、家庭菜園、DIY、プログラミング等、「つくる」をテーマに色々なことをしていきたいと思っています。 Amazonのアソシエイトとして、wand は適格販売により収入を得ています。 GitHub: https://github.com/wand2016
