Obsidian×タスクシュートが捗りそう
計画通りに作業を進めるのってすごく難しいですよね。計画を立てる時の自分と実行する時の自分がまるで別人のように思ってしまうことがしょっちゅうです。
こういうタイプに良く効くという薬であるという噂の、タスクシュートという管理方法をやってみることにしました。
タスクシュートを実践する方法を調べたところ、Excel、タスクシュートアプリ「たすくま」、クラウドサービスであるTaskChute Cloudなどがあるようですが、私はObsidianで一元管理したいので、どうにかやれないか模索しました。
Dynamic Timetable
なんと、プラグインを作ってくださっている神様がいました。
Dynamic Timetableというプラグインになります。
このプラグインでは、決まった書式でタスクを記載していくと、それをタスクシュートのようなタイムテーブルとして表示してくれる上、時刻と実績時間の記録や、タスクの中断なども記録してくれる優れモノです。
詳しくは作成者のL7Cyさんの記事があるのでご参照ください。
タスクは下記のように書きます。
- [ ] タスク名 ;見積もり時間 @予定開始時刻
このタイムテーブルでタスク完了を入力すると、
[ ] タスク名 ;実績時間 @開始時刻
とテキストが書き換えられ、見積時間があとで参照できなくなってしまいます。
実際、その日にタスクを消化していく上ではこれで十分なのですが、自分の場合は見積もり時間と実績時間に乖離があることがほとんどなので、修正していくためにも後で見返したいです。
とのことなので、この用途としては少し向いていないです。
そこで、記入フォーマット少し工夫し、見返しやすいようにDataviewを作成しました。
Dataviewで可視化
まずフォーマットですが、
- [ ] タスク名:見積時間 ;見積時間 @予定開始時刻
としました。見積もり時間の入力重複しますが、慣れれば問題ないです。これにより、タスク完了を入力すると、
- [ ] タスク名:見積時間 ;実績時間 @開始時刻
となり、最初に書いた見積時間を残すことができます。
で、Dataviewで見積時間、実績時間及び開始・終了時刻を表で可視化します。スクリプトはこちらです。
```dataviewjs
dv.table(
["完了", "タスク名", "見積時間", "開始時間","終了時間", "実績時間"],
dv.current().file.tasks
.filter(task => task.text.includes(";"))
.map(task => {
const taskText = task.text;
const completed = task.completed;
const parts = taskText.match(/(.*)\s*:\s*(\d+)\s*;\s*(\d+)\s*(?:@\s*(\d{1,2}:\d{2}))?/);
if (parts){
const [_, taskName, estimatedTime, actualTime, startTime] = parts;
let endTime
if (startTime){
endTime = moment("2000/01/01 " + startTime);
endTime = endTime.add(Number(actualTime), "minute").format("HH:mm")
}
return [
completed ? "■" : "□",
taskName,
estimatedTime + "分",
startTime ? startTime : "",
endTime ? endTime : "",
actualTime + "分"
]
}
})
)
```
すると、こんな感じに表示できます。
せっかくなのでタグもつけてタスク種類ごとの時間なども算出し、グラフにでもしてみようかなぁなんて考えたり。結局やれてませんが。
自分的には結構便利なので、よかったらやってみてください!
この記事が気に入ったらサポートをしてみませんか?