カビパン男と私

HOME/横書き縦書き

awk でログをつけて時間管理してみる

自分が何を何時間しているのか知りたくなることがある。それができそうな時間管理アプリや、ウェブ・サービスを見てみると、どれも随分難しそうだ。簡単に言うと、いろいろできすぎる。

私がやりたいのは、そんなに難しいことじゃない。予定通り進行しているかどうかをチェックするのは別の方法でやるし、進捗を誰かと共有する必要もない。あらかじめタスクの種類を分類しておく必要も感じない。たんに、自分が何をやったのか記録をとって集計したい。

簡単なことは、簡単に済ませたい。そこで自分で短かいスクリプトを書くことにした。

データ構造は極めて単純で、タスク名とそのタスクの終了時刻がずらっと並んでいるものでいい。タスクの開始時刻は、前のタスクの終了時刻なのだから、記録する必要はない。「ハイ、いま○○を終了」というタイミングでログをつけるわけだ。

2019/01/08-00:30:14 dummy
2019/01/08-01:09:39 読書
2019/01/08-05:40:09 睡眠
2019/01/08-06:40:09 弁当作り
2019/01/08-07:03:09 朝食

これは私のログの一部だ。00:30 から 01:09 まで読書をして、01:09 から 05:40 まで眠って……となっている。最初のタスクが dummy となっているが、これは読書を開始時刻がわかるように登録したダミーのタスクである。

タスク名をそのタスクが終了後に記入するという方法は、私にとても合っている。始めてみて気が乗らないときは、自由に別の事ができるからだ。

おまけ

gawk で書いてみた(log.awk)。記録も集計もこれひとつで行う。

記録するためには、

gawk -f log.awk mylogfile.txt のように起動すると入力待ち受けになる。タスク名を入力すると終了する。

あるいは、echo 作業 1 | gawk -f log.awk mylogfile.txt のようにタスク名をパイプで流してもよい。

あるいは、gawk -f log.awk mylogfile.txt 作業 1 のように、コマンドライン引数としてタスク名を渡すこともできる。

いずれにせよログファイルを使い分けないなら gawk -f log.awk mylogfile.txt のところは共通なわけで、ここのところはシェルのエイリアスか何かにしておけば便利だ。

mylogfile.txt はたんなるテキストだから、間違って登録したら、これを直接エディタで編集する。

集計するには、タスク名の代わりに集計する日または期間を使うだけである。下はその書式である。ぎゃくに言うと、下の書式にあてはまる文字列をタスク名として使うことはできない。

ついでながら、レポート出力を sort コマンドでソートするためのメモ。

タスクabc順: gawk -f log.awk mylogfile.txt today | sort -bf

時間の長さ順: gawk -f log.awk mylogfile.txt today | sort -t $'\t' -k 2 -r

@kabipanotoko