とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
各種SNSのフォローもよろしくお願いいたします。

おれ流タスク管理のすゝめ

世の中には便利なタスク管理ツールが溢れていますが、みなさんどんなツールを使っていますか?私は高機能すぎるツールはなかなか使いこなせないので紙とペンくらいで十分なのですが、紙とペンでは自動化は難しいですよね。そこでTaskwarriorというCLIツールを使っています。

Taskwarrior ???

taskwarrior.org

TaskwarriorはCLIからタスク管理を行うためのツールです。タスクの追加削除だけでなく、期限やタスク同士の依存関係なども設定できます。

かんたんな使い方

Taskwarriorはドキュメントが充実しています。が、私がそこまで色々な機能を使ってるわけではないので、すべてを説明するには知識不足です。今回は私が使っているかんたんな使い方を紹介します。

何はともあれタスクを追加しましょう。

task add 説明

追加したタスクはlistコマンドを実行することで確認できます。

task list

taskコマンドにはlslistなどがあり、それぞれで出力できる値も異なります。設定値を確認するには以下のコマンドを実行します。

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ツールですので慣れるまでに少し時間がかかるかもしれません。私のような使い方から始めるととっつきやすいと思いますので、この機会にデビューしてみてはいかがでしょうか。