詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Googleカレンダーをターミナルからキーボードで操作する

全部キーボードで済ませたいシリーズです。

多忙な現代人の一日はその日の予定チェックから始まるわけです。普段であれば定期的な間隔で組まれたミーティングのリズムに身を委ねればいいわけですが、そこに非定型的なミーティングが紛れ込んでくる。これは採用面接など外部との機会であることが多く、そのぶん重要です。事前に入れてあるものを避けて予定を組もうとすると、参加者の数に応じて困難さが増していくので、ある程度は既存のものに被せて予定に招待してもらうことにしていると、いつの間にかダブルブッキングの嵐になっている。直前になって慌てて一方のミーティングに参加しないことを告げる……みたいなことを繰り返していてはいけませんね。

そういうわけで事前にカレンダーの重複を確認して、必要に応じて辞退したり再調整したりしたい。だけどそれを Google カレンダーのウェブ UI からマウスでポチポチやるのは非常につらい……。一応キーボードショートカットもあるんだけど、予定に応じる・辞退するのに tab キーを何度も叩く必要があり、効率的とは言えない。

そこで今回はターミナルで動く Google カレンダークライアントを作ってみたいと思います! 自分の要求は:

  • ある日の自分の予定を一望できる
  • 重複している予定がすぐにわかる
  • 予定への承諾・辞退が簡単にできる
  • 以上をキーボードで簡単に実現できる

作ったのがこちら。

GitHub - motemen/gcal-tui

こんな感じに動きます

人工的な予定で例を示すと、こんな感じ。

Screencast

ポイントは

  • j/k によるナビゲーションだけでなく、
  • tab でアクションの必要な予定にジャンプできる
    • 返事をしていない招待や、重複のある予定など
    • 重複のある予定のグループは ! マークで表示される
  • A または D で予定の招待に即座に返答できる
  • キャプチャには登場しないけど、もっと細かいことをしたければ o で Google カレンダーを開くこともできる

という点。これでキーボードから手を離すことなく予定の整理ができるようになった。われながら便利。

使い方

Google Cloud で OAuth 用の認証情報を取得する必要がある。これを JSON 形式でダウンロードして、<config_home>/gcal-tui/credentials.json に配置する。config_home は Go の os.UserConfigDir で得られるようなもの。

こういった手元用のツールで自分のための認可ができればよい場合には Application Default Credentials (ADC) を使うのがよい、と id:pokutuna に教えてもらったけど、なんかスコープによってはうまくいかないことがあるようで挙動が読めなかったので OAuth に逃げた。これが ADC でできるなら手数が減ってうれしい……。

今後の研究

Patches welcome です。

  • 予定の詳細ページがほしい
  • 予定を移動する機能がほしい
    • これは相手のスケジュールを調べたりしないといけないのでけっこう大変そう
  • 予定を辞退する際にコメントを残したい
  • メールに添付された ical ファイルをこれで開いて、特定の予定の詳細を開けるようにしたい
    • Google カレンダーの予定詳細ビュー、カレンダーの中のどこを示してるのかぜんぜんわからないので……

参考文献

はてなで一緒に働きませんか?