GithubのIssueからGoogleカレンダーに締め切りを設定する

僕は普段の仕事の管理は短期のものはAppleのリマインダーを利用していて、忘れそうなものはGoogleカレンダーに締切を終日登録しています。

ペパボでは全職種がGithubを利用し業務を行っているため、だいたいの社の採用イベントや出張などはIssue化されていて、そこに期日などが書いてあります。

そういった経緯から、あるとき

「これ、そもそもIssue起票者が勝手に締切設定してくれたら、俺何も意識しなくていいじゃん」

と思いつき、シュッと作った感じです。こんなIssueを書くと

こんな感じで登録されます。

動作要件はこんな感じ

  1. GithubIssueのタイトルに[締切]、もしくは[締め切り]を含み、日時っぽい文字列がある([yyyy/mm/dd] or [mm/dd] or [yyyy/mm/dd hh:mi] or [mm/dd hh:mi])
  2. 予定を追加するメンバーがGithubのメールアドレスを公開している。
  3. 本文でメンションが飛んでいるメンバー、グループに所属するメンバーのカレンダーに締め切り予定が追加される。

この仕組を社内で作ったときのIssueはこれ。

夏と書いてますが作ったのDecemberですね。もともとはシングルファイルのRubyスクリプトで動かしていたのですが、先日ツイートしたら思ったよりリアクションあったのでDockerfileにして公開しました。Rubyの実行環境ごとDockerで固めるとシングルバイナリのように扱えてめちゃくちゃ便利ですよね。最近Docker for Macとか当たり前だから、brewとかで配布するのもdocker run前提でいんじゃね?とか思い始めています。

実行方法はたったこれだけです。k8sのjobで動かすなり、cronで動かすなりしてもらえると嬉しいです。

# Please change api when using with ghe (GITHUB_API)
docker run -e GITHUB_TOKEN=$(GITHUB_TOKEN) \
  -e GOOGLE_CALENDER_ID=$(GOOGLE_CALENDER_ID) \
  -v `pwd`/credential.json:/opt/simekiri/credential.json \
  -v `pwd`/token.yaml:/opt/simekiri/token.yaml \
  -it pyama/simekirikirimai:0.0.1

Googleカレンダーの予定の追加にはoAuth認証が必要なのでDevelopers Consoleでプロジェクトを作成し、認証情報を作成してください。 作成した認証情報はjsonファイルでダウンロードできるので、ダウンロード後、実行ディレクトリに credential.jsonとして配置しておくと、上の実行方法と同じように実行できます。token.yaml は認証情報の保存先なので、認証後に作成されるので初回実行時は存在する必要はありません。

実行すると下記のメッセージが出るので、表示されたURLにアクセスして、oAuth認証してください。

Open the following URL in the browser and enter the resulting code after authorization:
https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&c....

また予定の追加先となる、カレンダーIDについては下記の記事が詳しいです。

ペパボでは「Githubカレンダー」のような共通カレンダーを作成して運用管理しています。注意点としては予定の追加を行う際にGithubのプロファイルから対象者のメールアドレスを取得し、Googleアカウントと紐付けるため、Githubのプロファイル上でそのユーザーがメールアドレスを公開している必要があります。

なにか困ったことがあれば雑にTwitterでご連絡いただければだいたい対応するのでぜひ使ってみてください。