⏱️

プレーンテキストで時間管理をする klog

2024/05/08に公開

作業の時間を管理したいことあると思います。
作業の時間を計測すると、自分の仕事を振り返るのに便利ですし、時間の報告を義務付けられている場合もあるでしょう。
私は、個人のタスク管理と時間計測に taskTXT をしばらく使っていました。taskTXT は「プレーンテキスト + 時間計測」が、個人のタスク管理には最適であることを教えてくれました。タスク管理用の機能があるツールよりも、単なるテキストのほうが柔軟で扱いやすく、それにタイマーをつけるだけでよいのです。
似たようなツールがないかと探してたどり着いたのが klog です。

基本

klog は時間を表現するテキストの集合です。
時間はを以下のような形式で表現し、負の値や終了が決まっていない時間も表現できます。
klog では、1行のデータをエントリーと呼び、1日のエントリーの合計時間を簡単に集計してくれます。また #タグ をつけることもでき、タグごとの集計もできます。
他にもできることはたくさんあますが、ドキュメントがとてもよく書かれているので、ここでは詳しい紹介はしません。

2020-02-18
This record demonstrates various
ways of formatting summaries:
    2h #Badminton session (at the #gym)
    -120m This will be deducted from the total time.
    14:00 - ?

こんな感じで使う

1日の仕事の流れの中で、私がどのように klog を使っているかを紹介します。

  1. 仕事を始める
    今日は6時間働くのが目標なので、--should 6h オプションをつけて、記録を開始します。
    should を指定することで、あと何時間働く必要があるかをリアルタイムに確認することができます。
klog create work.klg --should 6h
klog start work.klg
  1. タスクを切り替える
    実装からミーティングやコードレビューなどへ、仕事のコンテキストが変わる場合は、switch します。
klog switch work.klg
  1. 休憩など、合計から差し引きたい場合
    昼休憩など、合計作業時間から差し引きたい活動をする場合は pause します。
    pause してる時間が リアルタイムに表示されるので、どのくらい休憩しているかは一目でわかります。
klog pause work.klg --summary 'Break' 
  1. 今日どのくらい仕事をしているかを確認する
    今日はあとどれくらい作業する必要があるのだろうか?と思ったら、今日の作業を follow します。
klog today work.klg --diff --now --follow
  1. 1日の終わりに、実装以外に時間を費やしていないかを確認しよう

例えばこのようなログがあると

2020-02-18
#work
    9:00 - 12:00 First task
    12:00 - 12:30 定例 #MTG
    12:30 - 15:00 Next task
    -1h 昼休憩
    15:00 - 16:00 #Review

tags で tag ごとの集計を

klog tags --today

このように出力することができます。

#mtg    30m
#review 1h 
#work   6h

Tips

klog コマンドは、.klg ファイルに対して操作を行います。仕事とプライベートで記録を分けたい場合は、ファイルを分けるのがよいでしょう。
ファイルにエイリアスをつけられる Bookmarks 機能があるため、切り替えはそこまで面倒ではありません。仕事用ファイルを@workとしてブックマークすると、このように記録をつけます。デフォルトのファイルを設定することもできます。

klog start @work

klog には、ソースコードにおけるコメント機能はありません。エントリーごとに説明をつけることは可能ですが、エントリーはあくまでも時間と紐づく必要があります。
例えば TODO task を klog ファイルに記録しておくには、日付ごとのブロックであるレコードの説明文として記載するか、0h のエントリーとして記載するのが良さそうです。

2020-02-18
Description for Record can be used as TODO List
    0h TODO: This is valid entry. But time is not recorded.
    11:00 - ? start working

Discussion