1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TODO管理のステータス設計の正解を調べた

1
Last updated at Posted at 2026-07-24

todo / in_progress / done で足りなくなった

自作のTODO管理CLIを、todo / in_progress / done の3ステータスで運用しています。シンプルで気に入っていました。

ところがある日リストを眺めると、数週間動いていないタスクが2つ。1つは相手の返事待ちで止まっている依頼。もう1つは、読みかけのまま再開の目処が立たない分厚い技術書。どちらも同じ todo の顔をして並んでいます。

blocked を足そうか。いや on_hold か。pending や waiting を持つツールも見かけます。考えているうちに、これは「どの名前にするか」ではなく「そもそも増やしていいのか」という問題に見えてきました。

そこで、タスク管理手法の古典である GTD と、Jira / Linear / Notion / Asana / Todoist / Things の公式ドキュメントを一通り調べました。この記事はその報告です。先に言えるのは、この論点はツール設計の世界でほぼ決着がついていて、答えは「ステータスはいくつが正解」という数の話ではなかった、ということです。

GTD では「返事待ち」と「塩漬け」は別の枝

最初に当たったのは GTD です。GTD(Getting Things Done)は David Allen が2001年の同名の書籍で提唱したタスク管理手法で、Todoist や Things など現行ツールの設計にも影響を与え続けている古典です。骨格はシンプルで、気になることをすべて書き出し、「今アクションできるか?」を起点とするフローチャート(公式のワークフロー図)で1件ずつ振り分けていきます。今回の論点に関わる部分だけ抜き出すと、こういう構造です。

この図を見て、冒頭の悩みに何十年も前から名前が付いていたことを知りました。「止まっているタスク」の置き場(黄色の2つ)が、フローチャートの別々の枝に用意されているのです。

  • Waiting For: 実現してほしいが、次のアクションの責任が他者にあるもの。「actionable = yes」側、委譲の出口
  • Someday/Maybe: 今はやると決めていないもの。「actionable = no」側、保留の出口

Waiting For は「いつから待っているか」の日付を記録し、週次レビューで「催促する」「状況を確認する」という自分のアクションに変換します。一方 Someday/Maybe の存在理由は、リソースを割く約束のストレスなしにアイデアを捕捉できること。唯一のコミットは「週次で見直す」ことだけです。

冒頭の2タスクを当てはめると、返事待ちの依頼は Waiting For、読みかけの本は Someday/Maybe。きれいに腑分けできてしまいました。

ならステータスを2つ足せば終わりでしょうか。自分もそう思いかけたのですが、ツール側の設計を見ると話はそう単純ではありませんでした。

主要ツールはなぜ「3分類 + α」に収束するのか

次にツール側です。各ツールのデフォルト構成を並べると、名前も数もバラバラに見えて、骨格が同じであることに気づきます。どれも「未着手 / 進行中 / 完了」という3つの大分類に集約できるのです。

ツール デフォルトのステータス 「未着手 / 進行中 / 完了」との対応
Jira To Do / In Progress / Done そのまま3分類
Notion To-do / In Progress / Complete の3グループ そのまま3分類(グループ内の細分だけ自由)
Linear Backlog / Unstarted / Started / Completed / Canceled 未着手を2つに割り、完了に中止を足した拡張
Asana / Todoist complete / incomplete さらに粗い2分類

しかもこの骨格は、偶然の一致ではなくベンダーが意図的に守っているものでした。Notion のヘルプには "You can't change the three main categories."(3つのメイングループは変更できない)と明記されています。自由にステータスを足せる Jira ですら、公式ドキュメントで「ステータスの追加は複雑性を増やす。ワークフローはリーンに保て」と警告している。Linear に至っては、カテゴリの種類と順序をシステムレベルで固定した理由を "Flexible software lets everyone invent their own workflows, which eventually creates chaos as teams scale."(柔軟なソフトウェアは各自にワークフローを発明させ、スケール時にカオスを生む)と言い切っています。

では、この3分類に入らない「止まっている」という情報を、各ツールはどう扱っているのか。ここが調べていて一番面白かった部分です。どのツールも Blocked をデフォルトステータスに持っていません。

  • Jira: フラグ(Flagged = Impediment)で表現
  • Linear: blocked by の関係リンクで表現
  • Todoist: @waiting_for ラベルで表現(GTD 公式ガイドの推奨)

なぜステータスにしないのか。「工程のどこにいるか」と「止まっているか」を掛け合わせてみると分かります。

To Do(未着手) In Progress(進行中)
順調 これから着手する 作業中
止まっている 着手前に先方の回答待ち 実装途中で仕様の確認待ち

「止まっている」は、どの工程にいても起こり得ます。つまりこの2つは独立した軸です。ここで Blocked を1本のステータス列に混ぜてしまうと、「In Progress で止まった」タスクは Blocked に上書きされて「どの工程で詰まったのか」という情報が消えます。だから各ツールは、工程は3分類のステータスで持ち、止まっているかどうかは直交する印(フラグ・リンク・ラベル)で足す。見出しに書いた「3分類 + α」は、この構造のことです。

増やした先にあるもの

では、この収束を無視して増やすとどうなるか。実例があります。Atlassian のパートナー企業が自社の Jira を監査したところ、70 を超えるステータスが見つかりました。In Review / Under Review / Being Reviewed が同居する世界です。最終的に 8 まで削減されました。

理論的な裏付けもあります。Hick の法則によると、選択肢が n 個あるときの判断時間は log₂(n) に比例して増えます。ステータスを1つ増やすことは、タスクに触れるたびに「これはどれに当たるか」という n 択の分類クイズを自分に課すことと同じです。しかも境界が曖昧な選択肢(On Hold と Blocked の違い、など)は1回あたりの判断コスト自体も押し上げます。

やっかいなのは、追加は一瞬でできるのに削除は難しいという非対称です。既存タスクの移行を考えると、一度増えたステータスはまず戻りません。実務者の経験則は「7以下、理想は4〜6、まず3から始めよ」でした。

判定基準は2つ

ここまでの材料で、冒頭の問いに答えが出せます。ステータス設計の正解は数ではなく、増やす前に通すべき2つの判定基準でした。

  1. その状態は、取るべきアクションが違うか。waiting なら「催促する」、someday なら「定期的に再判断する」。アクションが同じなら、それは別ステータスではなくただのラベルで足ります
  2. その状態を見直す運用がセットで存在するか。レビューのないステータスは、どんなに正しく分類してもタスクの墓場になります

GTD が Waiting For と Someday/Maybe を週次レビューとセットで定義しているのも、Linear が固定カテゴリの上でしか自由を認めないのも、この2条件の言い換えとして読めます。逆に、この2条件を満たさないステータス(とりあえずの On Hold など)は放置される場所になる、というのが実務者の一致した見解でした。

もう1つ、ツール横断で共通していた設計判断があります。ステータスには「タスクがどの置き場にいるか」だけを表現させ、どの置き場のタスクにも付き得る修飾(blocked のような「止まっている」印)は直交軸(フラグ・ラベル・リンク)に逃がすこと。ステータス1本に全部詰め込まないことで、どの工程で詰まりやすいかの分析も守られます。

で、正解のステータスは何なのか

ここまでの材料を組むと、答えは使う場面で2つに割れました。

チームの開発ツールなら、ツール各社の公式見解のままが正解だと思います。「未着手 / 進行中 / 完了」の3分類を核に、必要なら工程を細分して総数は7以下。止まっているかどうかはフラグや関係リンクで持つ。

個人のタスク管理なら、自分の答えは次の5つです。

ステータス 意味 取るべきアクション
todo やると決めている。未着手 着手する
in_progress 作業中 進める
waiting 次のアクションの責任が他者にある 週次レビューで催促要否を判断
someday やるとはまだ決めていない 週次レビューで再開か削除かを判断
done 完了 なし

「さっき、止まっているかどうかは直交軸に逃がせと言ったのに、waiting をステータスにするのか」と思われたかもしれません。ここの区別の基準は、それが置き場か、修飾かです。GTD のワークフロー図を思い出してください。Waiting For と Someday/Maybe は枝の出口、つまりタスクの置き場として定義されていました。置き場は1タスクに1つしかないので、ステータス(タスクが今どこにいるか)と同じ構造をしています。一方 blocked は、どの置き場のタスクにも付き得る修飾です。だから blocked をステータスにすると壊れるけれど、waiting と someday はステータスにしてよい。

マトリクスの言葉で言えば、「In Progress の途中で返事待ちになった」という工程の記憶は確かに消えます。チームでボトルネック分析をするなら致命的です。ただ、個人のリストでやりたいのは催促と再判断だけで、そこは「何を待っているか」のメモ1行で足ります。

冒頭の2タスクのその後

というわけで、CLI に waiting と someday を足しました。順序だけは判定基準の2を律儀に守り、先に週次レビューの手順へ「waiting の催促」と「someday の再判断」を書き加えてから、ステータスを実装しました。逆だと、増やした瞬間に墓場が2つできるだけなので。

返事待ちの依頼は waiting になり、何を待っているかのメモと一緒に、週次レビューで催促要否を確認する対象になりました。読みかけの技術書は someday に落として、週次レビューのたびに「まだ読みたいか」を問い直すことにしました。興味を失っていたら消します。罪悪感なく消せるようになることが、Someday/Maybe の一番の効能だと思っています。

あなたのリストで数週間止まっているそのタスクは、催促すれば動くものですか。それとも、実はもう手放してよいものですか。

参考リンク(一次情報)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?