todo.sh でタスク管理

2021/05/09に公開

年度も新しくなったということでタスク管理を見直したくなり、諸々と調査。OmniPlan とか Things とか色々とプロダクトはあるものの、OmniPlan で挫折した身としてはどれも気後れする。
そんな折、Todo.txt を見つけた。使ってみたら、なかなか良き使い心地。CLIサイコー!

インストール

$ brew install todo-txt
$ mkdir ~/.todo
$ cp -n /opt/homebrew/opt/todo-txt/todo.cfg ~/.todo/config

設定

素のconfigだと、todo.txt が /usr/local/bin 以下に作られてしまってアレなので、設定を変えておく

~/.todo/config
export TODO_DIR=$HOME/.todo

あと、コマンドが todo.sh だと長いので、alias t='todo.sh' した。

使い方

基本的な使い方

add で追加し、ls で確認して、done で完了にする。これが一連のサイクルになる

$ t add "todo.shの説明を書く"  # 追加
$ t ls  # 確認
1 todo.shの説明を書く
--
TODO: 1 of 1 tasks shown
$ t done 1  # 完了
$ t ls
--
TODO: 0 of 0 tasks shown

優先度

t pri で、優先度を設定できる

$ t pri 1 a
1 (A) 散歩に行く +home
TODO: 1 prioritized (A).

優先度を削除するときは t depri 1

優先度はAからZ (caseinsensitive) まで使えるけど、実際にはAとBの2つくらいで十分だと思う。今日やらなければならないタスク=A, 今週中には終わらせたいタスク=Bみたく。

設定した優先度はリスト表示したときに表示されるほか、t lsp A のように絞り込みもできる

alias today='todo.sh lsp a' としておくことにした

project と context

+@ を使って、タスク毎にプロジェクトとコンテキストを設定できる。まさにGTDじゃん。

t add "レンガを買う +花壇 @komeri"
t add "セメントを買う +花壇 @komeri"
t add "木材を買う +犬小屋 @komeri"
t add "牛乳を買う @aeon"

プロジェクトとコンテキストは ls する際に絞り込みで使える。

$ t ls @komeri
2 セメントを買う +花壇 @komeri
1 レンガを買う +花壇 @komeri
3 木材を買う +犬小屋 @komeri
--
TODO: 3 of 4 tasks shown
$ t ls @komeri +犬小屋
3 木材を買う +犬小屋 @komeri
--
TODO: 1 of 4 tasks shown

また、append で末尾に文字列を追加できる。既存タスクをプロジェクトに追加するのに便利。

$ t ls
1 散歩に行く
--
TODO: 1 of 1 tasks shown

$ t append 1 +home
1 散歩に行く +home

プロジェクトとコンテキストの一覧はそれぞれ t lsprjt lsc で参照できる。

その他のよく使いそうなコマンド

  • t del NUM: タスクを削除する
  • t replace NUM <new text>: タスクを修正する
  • t help: ヘルプ

zsh completions

zsh-5.8 (これを書いている時点で最新のリリース版) に含まれる todo.sh の completions はいくつかのコマンドが不足している。HEAD では直っているので上書きしてしまおう。

curl -fsSL https://raw.githubusercontent.com/zsh-users/zsh/master/Completion/Unix/Command/_todo.sh > _todo.sh \
&& cat _todo.sh > /opt/homebrew/share/zsh/functions/_todo.sh \
&& rm _todo.sh

むすびに

OmniPlan みたいにしゃちほこばらずに始められるのがいいですね。

というかこれ、チームメンバーの todo.txt を編集・参照できるようにすれば、タスクの割り振りとか進捗確認とかできてめっちゃハッピーなのでは。

Discussion