世の中には便利なタスク管理ツールが溢れていますが、みなさんどんなツールを使っていますか?私は高機能すぎるツールはなかなか使いこなせないので紙とペンくらいで十分なのですが、紙とペンでは自動化は難しいですよね。そこでTaskwarriorというCLIツールを使っています。
Taskwarrior ???
TaskwarriorはCLIからタスク管理を行うためのツールです。タスクの追加削除だけでなく、期限やタスク同士の依存関係なども設定できます。
かんたんな使い方
Taskwarriorはドキュメントが充実しています。が、私がそこまで色々な機能を使ってるわけではないので、すべてを説明するには知識不足です。今回は私が使っているかんたんな使い方を紹介します。
何はともあれタスクを追加しましょう。
task add 説明
追加したタスクはlist
コマンドを実行することで確認できます。
task list
taskコマンドにはls
やlist
などがあり、それぞれで出力できる値も異なります。設定値を確認するには以下のコマンドを実行します。
task show
show
だけで実行すると現在設定されている内容が全て出力されます。show
の後ろに文字列を追加するとで、その文字列にヒットした値だけが出力されます。
task show list.columns
この例では、list.columns
という文字列の入った設定が出力されます。これはtask list
コマンドでカラムに何を表示させるかが定義してあります。
例えばカラムに出力する値を変更する場合は以下です。
task config report.list.columns id,start.age,entry.age,...
一時的に値を変更することもできます。ソート順を変えてみます。
task rc.report.list.sort:due- list
この例ではlist
コマンドの期限を降順に変更しています。
タスクを開始するにはstart
コマンドを実行します。
task <task id> start
止めるにはstop
です。
task <task id> stop
タスクが完了したらdone
です。
task <task id> done
不要なタスクなら削除しましょう。
task <task id> delete
タスクのサマリーやバーンダウンチャートにも対応しています。
task summary task burndown.monthly
このように、タスクを管理するのに必要な機能は一通り備えています。
おれ流タスク管理
ここからは私の使い方を紹介します。
タスクは毎日入力する
タスクは毎朝入力しています。やることが全くないということはないですが、本当に何もなければ勉強に時間を充てるなど、できることを探す意味でも毎朝必ず入力しています。
割り込み作業は都度入力
後述しますが、タスクをエクスポートする機能を使って、今日やった作業をSlackで報告しています。なので、割り込み作業をタスクに登録していないと最終的に報告できないんですね。ですのでadd
してdone
するだけのタスクでも必ず入力します。
定期的なタスクは繰り替えし登録
Taskwarriorにはrecur
という定期的なタスクを登録できます。
例えば毎週月曜の10時から1時間ミーティングがあったとしましょう。
task add project:test recur:weekly scheduled:mon+10h due:scheduled+1h ミーティング
こうしておくと、毎週月曜日の10時から11時までの期限付きでタスクを登録できます。しかし、このタスク、実はずっと見えたままになっています。まだ先のタスクがずっと見えた状態ですと精神衛生上よくないので、実際にrecur
をつかう時にはwait
をいれるといいです。
task add project:test recur:weekly wait:mon scheduled:wait+10h due:scheduled+1h ミーティング
wait:mon
としておくことで、月曜になるまでこのタスクを隠しておくことができます。
タスクには優先度を設定する
TaskwarriorではHigh, Medium, Lowの3つの優先度をH
, M
, L
の文字で設定できます。
task add priority:H やること
H
に設定したタスクは本日中に着手します。M
に設定したタスクは最悪明日着手でも大丈夫です。L
に設定したタスクはいつかやります。- 優先度を設定していないタスクはメモのようなものなのでやらないかもしれません。
着手することをゴールとする
タスクが完了していなくても着手していれば退勤前にはdone
にします。なぜこんな方法をとっているかというと、長期的に完了できないタスクがあることで、作業を残してしまった罪悪感や強迫観念にかられ、しなくてもいい残業をしてしまうからです。また、長期的に1つのタスクが残っている時点で、タスクとしての粒度が間違っていますよね。
次の日もやらなければいけないタスクは次の日の朝にもう一度入力すればいいですし、1つの長期的なタスクでも作業内容が違っていれば違うタスクとして入力する方がタスクの粒度してしては正しい気がします。
出勤時、退勤時に出力
タスクの入力が終わったら今日やるタスク、退勤前には今日やったタスクを出力します。
今日やるタスクを出力
task rc.report.all.sort:due+,urgency- status:pending export all 2>/dev/null | jq -r '.[] | [.project + " " + .description] | .[]'
例えばこんなタスクを登録していたとしましょう。
task add project:テストプロジェクト ミーティング
この場合、出力される文字列はこのようになります。
テストプロジェクト ミーティング
プロジェクト名とタスクの説明を組み合わせることで、タスクの説明にプロジェクト名を含めなく済みます。
今日やったタスクの出力は以下です。
task rc.report.all.sort:due+,urgency- status:completed end:today export all 2>/dev/null | jq -r '.[] | [.project + " " + .description] | .[]'
status:completed
でフィルタしているので削除したタスクは出力されません。
出退勤時にはこの情報をSlackへ投下して、今日の作業予定を共有しています。
まとめ
Taskwarriorは使い方によって自動化をすすめることができます(cronに登録したり)。CLIツールですので慣れるまでに少し時間がかかるかもしれません。私のような使い方から始めるととっつきやすいと思いますので、この機会にデビューしてみてはいかがでしょうか。