在宅勤務で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 に無い予定は問答無用で消されてしまうので、新規カレンダーを作成するのが良いはず。

社内のグループウェアへのリンクや、コメント欄も転記される。コメントに 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 だった。

iPhone への対応に少々不安があったものの、特に問題は無く同期することが出来た。専用のアプリで設定することで、iPhone の通知を全てスマートバンドへ転送できる。通知が有るたびにブブッと少し震える。自分しか気付けないくらいの振動だ。

おわり

これで在宅勤務中にも会議をバックレない仕組みが構築できた。毎日何度か行っている作業がなくなったのは精神的にも楽になった。しかし Slack の通知が全部飛んできては 1 週間で精神を病みそうなので、通知の取捨選択は今まで以上に慎重に行う必要が有るように思った。

利用画像