gcalcliを使う

私はカレンダー、スケジュール管理として公私共にGoogleカレンダーを使用している。そういう人は多いのではないだろうか。実際にとてもよくできている。仕事関連のタスクはGithub Issue、Confluence、Asanaなど、それぞれのプロジェクトが指定するもの使用しており、個人のタスク管理にはOrg-modeを使用している。それぞれのサービスやツールそれ自体はとてもよくできているが、それぞれの足並みが揃わないのは常々気になっていた。各種サービスやツールが同じような機能を提供し、独自のインターフェースを持っている。私はEmacsを常々使用しているから、独自のインターフェースを強制されると、悲しい気持ちになる。触れるのは私なのに、それを私以外の誰かが強制し、しかもそれが「僕が考えた最強のUI」になっているため、私の求める操作感には全く合わないのだ。それぞれのサービスのUIデザイナーやフロントエンドエンジニアは頑張っているだろうが、どこまで行ってもそれは「僕が考えた最強のUI」であって、それぞれの人に配慮したものにはならない。もし本当に使いやすいUIを目指すなら極端なカスタマイズ性が必要であって、そのデフォルト値としての仮のUIを提供することになる。人が求める操作性というのは、人によって大きく異なるからだ。だが残念ながら、そういった考えで実装されているプロダクトというのは少ない。私はEmacsを起点にして作業を進めたいため、EmacsからGoogleカレンダーに対し、ある程度の操作ができるように、整備を進めていくことにした。

インストール

Google Calendarのコマンドラインインターフェースとして実装されたgcalcliをmacOS上にインストールして使うことにした。

brew install gcalcli

認証

Google認証に必要な以下の値を事前にWebコンソールから準備しておく。

  • GOOGLE_OAUTH2_CLIENT_ID
  • GOOGLE_OAUTH2_CLIENT_SECRET

認証が済んでいない場合、以下のコマンドを実行するとWebブラウザを開き、Google認証のページにアクセスする。そのページからGoogle認証の手続を進める。

gcalcli --noauth_local_webserver --client-id=GOOGLE_OAUTH2_CLIENT_ID --client-secret=GOOGLE_OAUTH2_CLIENT_SECRET

コンソール上ではコードの入力待ちの状態となる。認証を進めるとコードが発行される。そのコードをコピーし、コンソールに入力することで認証が完了する。

サブコマンド

サブコマンド用途
list利用可能なカレンダーを一覧表示する
search
editカレンダーの予定を編集する
delete
agenda一定期間の議題を取得する
updates特定の期間の日時以降の更新を取得する
conflicts
calwカレンダー形式で週ベースの議題を取得する
calmカレンダー形式で月の議題を取得する
quickイベントをカレンダーにすばやく追加する
add詳細なイベントをカレンダーに追加する
importics/vcal ファイルをカレンダーにインポートする
remindイベントが <mins> 時間以内に発生した場合にコマンドを実行する

利用可能なカレンダーの一覧

gcalcli list

今日の予定

gcalcli agenda $(date +'%Y-%m-%dT00:00:00') $(date +'%Y-%m-%dT23:59:59')

Emacs Lisp

;;; calendar-google.el --- Google Calendar for Emacs. -*- lexical-binding: t -*-

;; Copyright (C) 2022 TakesxiSximada

;; Author: TakesxiSximada <[email protected]>
;; Maintainer: TakesxiSximada <[email protected]>
;; Version: 1
;; Package-Version: 20221216.0000
;; Package-Requires: ((emacs "30"))
;; Date: 2022-12-16

;; This file is part of aws cli.el.

;; calendar-google.el is free software: you can redistribute it and/or
;; modify it under the terms of the GNU Affero General Public License as
;; published by the Free Software Foundation, either version 3 of the
;; License, or (at your option) any later version.

;; calendar-google.el is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; Affero General Public License for more details.

;; You should have received a copy of the GNU Affero General Public
;; License along with this program.  If not, see
;; <https://www.gnu.org/licenses/>.

;;; Code:

;;; Customization
(defun calendar-google ()
  (interactive)
  (async-shell-command "gcalcli agenda $(date +'%Y-%m-%dT00:00:00') $(date +'%Y-%m-%dT23:59:59') --tsv"))

(provide 'calendar-google)
;;; calendar-google.el ends here