Goでターミナル上で動くPomodoro、その名もgomodoroを作った

僕は開発をする時はポモドーロ・テクニックを使うようにしてる。
最近今まで使っていたアプリがまともに使えなくなってしまったので乗り換えを検討した。

色々検討した結果自分で作ってしまうことにしたんだけど、それは次の理由から

  1. かかった時間は記録しておきたい
  2. ターミナルで動作させたい

1つ目のかかった時間を記録させることに関しては自分が何に時間をかけたのかを後から振り返りたいけど覚えておくのも面倒だし自分でどこかに記録するのも面倒なのでポモドーロをしたら勝手に記録してほしい。
2つ目のターミナルで動作させたいは完全な好みで普段コードを書く時はvimを使っているのでターミナルで作業しているので、出来ればブラウザ移動とかしたくない。

これを満たすものがGoで作ったPomodoroのgomodoro!!

gomodoroとは?

github.com

機能としては

  • ポモドーロ・テクニック機能
    • 25分の活動と5分の休憩を繰り返して3回まわした後の休憩は15分の休憩を繰り返す
  • タスク追加機能
    • 何のタスクに対してポモドーロを行っているかを管理するため
  • 活動時間をTogglに記録
  • 0秒になると通知センターで終わったことを通知する
    • ターミナルでずっと出すのも邪魔なのでタブとかでわけておいても終わったことが分かるようにするため

こんな感じで動く

f:id:hatappi1225:20171105183911g:plain

使い方

Goが入っている方はgo get github.com/hatappi/gomodoroでもインストール出来るし、ここMacOSLinuxそれぞれの環境ごとのバイナルを置いてあるのでGoがなくてもいける。

後はTogglにデータを連携しないといけないので設定ファイルを作る必要がある。
ApiTokenはtogglのプロフォール画面から取得が出来る。
PIDはtogglのProjectIDでProject画面の任意のプロジェクトのURLから取得出来る。
例:) https://toggl.com/app/projects/xxxx/edit/yyyy の時はyyyyがPID

[Toggl]
ApiToken = "xxx"
PID=yyyyy

これで準備は出来たので次のコマンドを叩くだけ

$ gomodoro

最初はタスクがないのでタスク登録を促される。
タスクがある時に起動すると次のような画面が表示される。
選択する時はjで下へ移動して、kで上へ移動する。
新規タスクを作る時はこの画面でnを押すことで出来る。

f:id:hatappi1225:20171105183123g:plain

後はポモドーロをこなすだけ!!

なんでGoで書いたの?

特に理由はなくておそらくRubyの方が書いてる歴が長いので早くFirst Releaseできたんだろうけど、最近Goを書いているのでGoの練習がてらでやってみたかった。
それだけ。

技術的なところ

今回はポモドーロのタイマーを動かしつつもタイマーとめたりアプリを閉じたりみたいな操作をうけつけたかったのでgorutineを使ってタイマーとキー入力をうけつけるようにした。 go ~~~みたいな感じでスレッドさくっと立てられるのは便利!

後はタイマー表示したりタスクを選択する部分に関してはpecoでも使われているtermbox-goを使った。
これも最初は癖があるけど使いなれるとターミナル上で色々描けるようになるので便利。

github.com

今後に関して

とりあえず自分は使うので足りない機能追加したりバグ潰したりのんびりやっていく。