JustFocus×watchcat ~ pomodoroの回数を自動でpixelaに記録する ~
はじめに
ここ最近は COVID-19 の影響で原則自宅勤務のため、自宅から仕事をしています
はじめての本格的なリモートワークなため最初の頃はペースが掴めず、働いた以上の疲労感を感じてしまうことがありました
しかし、ポモドーロテクニックを取り入れてからは、ちょっとずつリズムが掴めて来たように思います
(きちんとした椅子を購入したからなだけかもしれません w)
この記事では、どんなツールを使ってポモドーロしているかを紹介したいと思います
PomodoroTimer 期
はじめは ISUCON チームメンバーの 1 人である@hilotterが作った
を使っていました
このツールのいい点は、なんと言ってもpixelaと連携し作業ログを残すことができる点です (ブログ記事)
ただ、自分の場合はポモドーロ終了の通知が来ても
- あともう少しだけ
- 切りが悪い…からもうちょい
- etc
と作業をなんだかんだ継続してしまい、気付くと結構な時間が経過しているということがありました
JustFocus×watchcat 期
そこで丁度よいアプリは無いかなと思って調べてよさそうだったのが
です
1pomodoro 終了したら、この用にグレーな画面で覆われて強制的に休憩させられます
ただし、画面が覆われても、ワンクリックでポモドーロを再開/中止できるので緊急な対応中でも問題はなく、ついつい作業を続けてしまう自分にはぴったりでした
ただ、このアプリは pixela と連携することができませんでした… (まぁ、できる方が稀だと思いますw)
そこでなんとかして JustFocus を pixela と連携してみることにしました
pixela 連携
幸いなことに JustFocus はどんな操作がされたかをログに出力しています
log の一部
23:14:11.929 INFO JFASCommands.performDefaultImplementation():82 - Will start a Pomodoro timer.
23:14:11.929 INFO JFApp.shortBreak():238 - shortBreak
23:14:15.317 INFO BreakViewController.clickedStopTimerButton():493 - clickedStopTimerButton
23:14:15.318 INFO JFApp.stopBreak():396 - Stop break timer manualy
23:15:22.691 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFPomodoroCommand
23:15:22.691 INFO JFASCommands.performDefaultImplementation():63 - Will start a Pomodoro timer.
23:15:22.692 INFO JFApp.startPomodoro():192 - startPomodoro
23:15:34.252 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFPomodoroCommand
23:15:34.252 INFO JFASCommands.performDefaultImplementation():59 - Timer is running, won't respond to this action.
23:16:21.606 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFPomodoroCommand
23:16:21.606 INFO JFASCommands.performDefaultImplementation():59 - Timer is running, won't respond to this action.
23:16:22.406 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFStopTimerCommand
23:16:22.406 INFO JFASCommands.performDefaultImplementation():31 - Will stop current timer.
23:16:22.406 INFO JFASCommands.performDefaultImplementation():35 - Will stop Pomodoro timer
23:16:22.408 INFO JFASCommands.performDefaultImplementation():46 - Timer stopped.
10:18:45.844 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFPomodoroCommand
10:18:45.844 INFO JFASCommands.performDefaultImplementation():63 - Will start a Pomodoro timer.
10:18:45.844 INFO JFApp.startPomodoro():192 - startPomodoro
10:31:59.481 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFShortBreakCommand
10:31:59.481 INFO JFASCommands.performDefaultImplementation():82 - Will start a Pomodoro timer.
10:31:59.481 INFO JFApp.shortBreak():238 - shortBreak
10:37:16.757 INFO JFApp.startPomodoro():192 - startPomodoro
11:02:16.075 INFO JFApp.shortBreak():238 - shortBreak
11:09:04.218 INFO BreakViewController.clickedStopTimerButton():493 - clickedStopTimerButton
11:09:04.219 INFO JFApp.stopBreak():396 - Stop break timer manualy
11:09:08.526 INFO JFASCommands.performDefaultImplementation():14 - Perform command: JustFocus.JFStopTimerCommand
11:09:08.526 INFO JFASCommands.performDefaultImplementation():27 - Timer is not running, won't respond to this action.
12:24:11.547 INFO JFApp.showPreferences():405 - showPreferences
12:25:20.058 INFO JFApp.showPreferences():405 - showPreferences
そこでログを監視し pomodoro が終了したログが出力されたら pixela に記録することにしました
今回はログの監視に tkuchiki/watchcat を使用しました
(ちなみに tkuchiki/watchcat は tkuchiki が作った ISUCON 用便利ツールです)
daemonize は手元の mac で動かしたいので launchd を使用しました
設定ファイルは以下のような感じです
- record.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.github.com.Konboi.pomodoro</string>
<key>ProgramArguments</key>
<array>
<string>/some/path/launchd.sh</string>
</array>
<key>StandardOutPath</key>
<string>/some/path/log/launchd.sh.log</string>
<key>StandardErrorPath</key>
<string>/some/path/log/launchd.sh.err.log</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
- launchd.sh
#!/bin/bash
watchcat --interval=60s --no-changed=1 --filesize=1 --file /some/path/
justfocus.log -c post.sh
- post.sh
#!/bin/bash
export PIXELA_USER_TOKEN=<PIXELA_USER_TOKEN>
cat - | (grep shortBreak && ( if [ $? -eq 0]; then pi pixel increment -u <USER> -g <GRAPH>; fi)) || true
あとは launchd の設定ディレクトリに plist を置いてあげて load してあげれば動くと思います
$ launchctl load record.plist
設定を変更するときは unload してから設定を修正してから再度 load してあげます
$ launchctl unload record.plist
さいごに
最近はこんな感じで pomodoro を使って仕事をしています という紹介でした
launchd 使ったの始めてでしたが、意外とすんなり動いてよかったです
そして気軽に記録できる pixela は偉大だ…と改めて思いました
アスキー・メディアワークス
売り上げランキング: 366,732