在宅勤務でMTGをバックレないような仕組みを作る
以前から在宅勤務を行っているのだが、「会議が始まることを教えてくれる同僚が居ない」というのは在宅勤務における大きい課題だと思う。オフィスで働いていれば、ゾロゾロと移動するチームメンバーを見て気付けたり、声の掛け合いができる。在宅勤務だと会議に出てこないと「アイツ絶対寝てるだろ」思われるリスクが非常に高い。
会議のバックレを防ぐために私は、朝にその日に開催されるMTGの時間を調べiPhoneのタイマーをセットするという作業を行っていた。会議の予定は全て社内のグループウェアGaroonに登録されているので、そこから転記する。幸いなことに私は平社員なので1週間あたりの会議の数も少なく、この運用でもまぁまぁ上手く回っていた。ただ、日を重ねる毎に段々と面倒な気持ちが大きくなってきたので、仕組みで解決しようと考え始めた。
今回のピタゴラスイッチの全体像はこのような感じになる。極力コードを書きたくないという怠惰な気持ちが全面的に現れた設計となっている。
社内グループウェア Garoon
就業先の会社で予定管理に利用されているのが、Cybozu社のGaroonというグループウェアである。UI等に若干レガシーを感じつつも、5年も使ってるので使いにくいとは感じることは少ない。
ただ、予定が始まることをユーザに通知する方法は限られている。Windows,Mac,iPhone,Android向けに公式のアプリケーションが提供されているものの、なんとなく惜しい。
- スマホ向け「Kunai」: 予定の取得を行うためにアプリを開いて更新ボタンを押す必要がある。毎日朝更新しても、突然昼あたりに入った会議には気付けない。とてもつらい。
- PC向け「Cybozu Desktop」: Windowsデフォルトのトーストではなく独自の通知を出してくる。非常に稀にCPUを1コア分使い切って固まっている。(自分の環境だけ?)
Cybozu Garoon → Google Calendar
個人の予定管理にも利用しているGoogle Calendarに予定を転送すれば、普段の予定調整も楽になるはずだ。適当に検索してみると公式のドキュメントが見つかる。しかし初っ端の1行で既に終わっている。
こちらのサンプルプログラムは Java 9 以降では動作しません。 https://developer.cybozu.io/hc/ja/articles/204426680
さあどうしよう。作るか。
Go言語でGaroonのREST APIを叩くためのクライアントライブラリが提供さていた。オンプレ版に対応していなかったが、PRを投げたら爆速で対応して頂き感謝… こちらのライブラリを利用して、Garoonの予定をGoogle Calendarに転送するコードを記述した。Google Calendarに存在してGaroonに無い予定は問答無用で消されてしまうので、新規カレンダーを作成するのが良いはず。
- 今回の成果物: https://github.com/kamijin-fanta/grn-gcal-sync
- 利用したライブラリ: https://github.com/otoyo/garoon
社内のグループウェアへのリンクや、コメント欄も転記される。コメントにZoomのアドレスが貼っていればそのまま参加が可能だ。(何を隠せば良いのか分からず、とりあえずほとんど塗りつぶしておいた…)
特に凝った事は行ってないが、最近流行りのGitHub Actions,Packagesを利用し、ついでにWorkflowsへの対応を行っておいた。別のリポジトリにて以下のようなWorkflowとアクセストークンを仕込めば勝手に平日の日中に同期が始まる。ログの事も考える必要はないし、ジョブが異常終了すればメールが飛んでくる。CIにも使えるし日常作業の自動化にも使えるGitHub Actionsは最高だ。CRONジョブもサーバレスの時代だ。
# .github/workflows/schedule.yml
name: schedule
on:
schedule:
- cron: '0 0-10 * * 1-5' # At minute 0 past every hour from 9 through 19 on every day-of-week from Monday through Friday.
push:
jobs:
run_sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: login
run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: build and push
run: |
docker run --env-file=.env -v $PWD/token.json:/token.json docker.pkg.github.com/kamijin-fanta/grn-gcal-sync/grn-gcal-sync:v1.0.0 /grn-gcal-sync --gcal-token-path=token.json sync
1回あたりのジョブ実行時間は15~30秒程度だった。Actionsのページで表示される実行時間は、課金対象の時間より少し長めに表示されている。実行マシンが割当されるまでに10秒~数分掛かるが勿論この時間は課金対象ではない。平日日中に1時間毎というスケジュールであれば、十分にGitHubの無料プランでもまかなえるようだ。
SmartBandでの通知
iPhoneへのイベント通知は、Google Calendarのアプリを設定するだけで出る。ただ、大体通知に気付かない。なので観測範囲で少し流行っているSmartBandのXiaomi Mibandを購入した。今はMiband 5が出ているようだが、自分が買ったタイミングでは4だった。
5の存在知らなかったけどまぁ良いか pic.twitter.com/PK9WxFv603
— カミジン@チャーハン (@kamijin_fanta) July 31, 2020
iPhoneへの対応に少々不安があったものの、特に問題は無く同期することが出来た。専用のアプリで設定することで、iPhoneの通知を全てスマートバンドへ転送できる。通知が有るたびにブブッと少し震える。自分しか気付けないくらいの振動だ。
おわり
これで在宅勤務中にも会議をバックレない仕組みが構築できた。毎日何度か行っている作業がなくなったのは精神的にも楽になった。しかしSlackの通知が全部飛んできては1週間で精神を病みそうなので、通知の取捨選択は今まで以上に慎重に行う必要が有るように思った。