エクスポート・インポートができるやつがいい。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
探す
Name | UI |
---|---|
TaskWarrior | CLI |
手順
- インストール
- 使ってみる
- Hook
1. インストール
- インストール
- バージョン確認
~/.taskrc
の自動生成~/.task/
の確認- ヘルプ
1-1. インストールする
sudo apt install taskwarrior
この操作後に追加で 1,937 kB のディスク容量が消費されます。
1-2. バージョン確認
$ task --version 2.5.1
1-3. ~/.taskrc
の自動生成
$ task --help A configuration file could not be found in Would you like a sample /home/pi/.taskrc created, so Taskwarrior can proceed? (yes/no) yes
yes
を入力してEnterキー押下した。
1-4. ~/.task/
の確認
関連ファイルは~/.task
ディレクトリ配下にある。
- ~/.task
- hook/
- backlog.data
- completed.data
- pending.data
- undo.data
1-5. ヘルプ
$ man task
$ task help
2. 使ってみる
- タスクを表示する
- タスクを追加する
- ステータス変更
- エクスポート/インポート
- レポートの表示
2-1. タスクを表示する
コマンド | 説明 |
---|---|
task |
task next の省略形 |
task next |
緊急度が高い順に表示 |
task list |
保留中のタスクを表示 |
task all |
完了したものも含めてすべて表示 |
task {id} |
指定IDのタスク詳細を表示 |
task completed |
完了したタスクのみ表示 |
task end:today all |
今日完了したタスクのみ表示 |
task status:deleted all |
削除したタスクのみ表示 |
たとえば以下のような表示になる。
$ task next ID Age Description Urg 1 4min TaskWarriorをインストールする 0 2 3min TaskWarriorのドキュメントを読む 0 3 5s TaskWarriorの使用ログを書く 0 3 tasks
$ task 1 No command specified - assuming 'information'. Name Value ID 1 Description TaskWarriorをインストールする Status Pending Entered 2019-02-18 14:41:13 (30min) Last modified 2019-02-18 15:11:09 (14s) Virtual tags PENDING READY UNBLOCKED UUID 243e5ac5-cefb-4277-8a14-678387680342 Urgency 0 Date Modification 2019-02-18 15:06:03 Start set to '2019-02-18 15:06:03'. 2019-02-18 15:11:09 Start deleted (duration: PT5M6S).
2-2. タスクを追加する
$ task add (任意のタスク概要)
たとえば以下のようにする。
$ task add TaskWarriorをインストールする Created task 1.
2-3. ステータス変更
タスクを完了するにはtask {id} done
とする。({id}
はtask next
で表示されたものを指定する)
コマンド | 概要 |
---|---|
task {id} start |
Urgency (緊急)が0 から4 に増加した(start せずともdone できる) |
task {id} stop |
Urgency (緊急)が元に戻る |
task {id} done |
status がcompleted になる |
task {id} delete |
status がdeleted になる |
ステータスによると以下のような状態がある。
status | 和 | command |
---|---|---|
pending | 保留 | task add |
deleted | 削除 | task {id} delete |
completed | 完了 | task {id} done |
waiting | 待機中 | ? |
recurring | 繰り返し | ? |
タスクを表示してみる。
task {id} start
すると緊急度が上がり赤く表示される。
task {id} stop
すると緊急度が下がり元通り。
task {id} done
するとステータスがpending
からcompleted
に変わる。
$ task 1 done
完了したタスクのみ表示する。
$ task completed ID UUID Created Completed Age Description - 243e5ac5 2019-02-18 2019-02-18 2h TaskWarriorをインストールする 1 task
2-4. エクスポート/インポート
$ task export [ {"id":1,"description":"TaskWarriorのドキュメントを読む","entry":"20190218T054218Z","modified":"20190218T064523Z","start":"20190218T064523Z","status":"pending","uuid":"0055d80d-2cff-45cf-9e07-7b0948a51543","urgency":4}, {"id":2,"description":"TaskWarriorの使用ログを書く","entry":"20190218T054533Z","modified":"20190218T054533Z","status":"pending","uuid":"45b4731f-df84-469f-ae7e-174738c7ee82","urgency":0}, {"id":0,"description":"削除するタスク","end":"20190218T061859Z","entry":"20190218T061718Z","modified":"20190218T061904Z","status":"deleted","uuid":"edd86192-5408-4a17-8cbd-c385a2ed3ad7","urgency":0}, {"id":0,"description":"TaskWarriorをインストールする","end":"20190218T061358Z","entry":"20190218T054113Z","modified":"20190218T061358Z","status":"completed","uuid":"243e5ac5-cefb-4277-8a14-678387680342","urgency":0} ]
$ task export > /tmp/work/tasks.json $ task import /tmp/work/tasks.json
削除するタスク
のタスクだけを削除してインポートしてみたところ、以下のような応答が返ってきた。
Importing '/tmp/work/tasks.json' skip 0055d80d-2cff-45cf-9e07-7b0948a51543 TaskWarriorのドキュメントを読む skip 45b4731f-df84-469f-ae7e-174738c7ee82 TaskWarriorの使用ログを書く skip 243e5ac5-cefb-4277-8a14-678387680342 TaskWarriorをインストールする Imported 3 tasks.
タスクの内容はインポート前と変わらなかった。このことから以下のことがわかる。
- importは既存のタスクに追加する形で行う
- UUIDが同一のタスクは追加せずスキップする
2-5. レポートの表示
コマンド | 説明 |
---|---|
task summary |
進捗バーを表示 |
task burndown.daily |
1日あたりのタスク状態を棒グラフで表示 |
task status:completed count |
完了したタスクの累計数 |
task summary
burndown.daily
task status:completed count
$ task status:deleted count 1
3. Hook
コマンド実行時に任意のコードを実行する。
Git Hookと同じらしい。それも使ったことがないので試しにやってみる。
- ファイル名
- 実行環境
- データ入出力形式
- 実装してみる
3-1. ファイル名
ファイル名=イベント名+任意
イベント名 | 説明 |
---|---|
on-launch |
起動時。起動防止できるタイミング |
on-exit |
終了時。 |
on-add |
タスク新規作成時(保存前) |
on-modify |
タスク変更時(保存前)。完了や削除もこれに含まれる |
実行順はファイル名の辞書順。
3-2. 実行環境
入出力 | CLI | pythonコード |
---|---|---|
引数 | 標準入力 | sys.stdin.readline() |
戻り値 | 標準出力 | print |
3-3. データ入出力形式
JSON。
3-4. 実装してみる
on-add
タスク追加時のイベント処理を実装してみる。
touch ~/.task/hook/on-modify-completed-01 chmod 755 ~/.task/hooks/on-add-00 pluma ~/.task/hooks/on-add-00
実行可能なhookスクリプトを確認する。
$ task diagnostics
... Hooks System: Enabled Location: /home/pi/.task/hooks Active: on-add-00.py (executable) Inactive: ...
/home/pi/.task/hooks/on-add-00.py
#!/usr/bin/python3 # coding: utf-8 import sys import json added_task = json.loads(sys.stdin.readline()) added_task['description'] = '★' + added_task['description'] print(json.dumps(added_task)) sys.exit(0)
task add {discription}
したときに実行される。タスクのdiscription
先頭に★
を付与する。
on-modify
タスク変更時のイベント処理を実装してみる。
touch ~/.task/hook/on-modify-00-completed.py chmod 755 ~/.task/hooks/on-modify-00-completed.py pluma ~/.task/hooks/on-modify-00-completed.py
実行可能なhookスクリプトを確認する。
$ task diagnostics
... Hooks System: Enabled Location: /home/pi/.task/hooks Active: on-add-00.py (executable) on-modify-00-completed.py (executable) Inactive: ...
/home/pi/.task/hooks/on-modify-00-completed.py
#!/usr/bin/python3 # coding: utf-8 import sys import json old_task = json.loads(sys.stdin.readline()) new_task = json.loads(sys.stdin.readline()) if 'completed' == new_task['status'] and 'completed' != old_task['status']: new_task['description'] = '▲' + new_task['description'] print(json.dumps(new_task)) sys.exit(0)
task {id} done
したときに実行される。ステータスがcompleted
に変化したらタスクのdescription
先頭に▲
を付与する。
参考
- https://taskwarrior.org/
- https://kore1server.com/382/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3ToDo%E3%83%84%E3%83%BC%E3%83%AB%E3%80%81TaskWarrior
所感
いい感じ。
じつはまだ他にもたくさん機能がある。たとえば以下。
- プロジェクト機能
- タスク間の依存関係
- 日時設定
- いつまでに完了させる予定か
- いつまでに完了しないときに自動削除するか
特に依存関係は良さそう。タスクを小分けにできるし順序付けできる。いずれ使ってみたい。