作りたいものプログラムの仕様

Google Calendarが更新されたとき、予定が重複していないか検知し、重複していたら、slackに通知する。

言語

Google Apps Script (GAS)

必要な処理と関数をまとめる

slackに通知するには、slackAppのライブラリを使うか、もしくはslackに対してペイロードを直接APIで投げればいいので、ここでは割愛します。

主題は、以下です。

  • カレンダーが変更された時、どうやって取得する?
  • 時間の重複をどうやって取得する?

カレンダーが変更された時、どうやって取得する?

これは普通に、トリガーで、「カレンダーが変更された時」で取得できます。カレンダーのID( a@bb.co.jp など )を指定できます。トリガーで設定された関数に、例えば e で受け取ると、e.calendarId の値でcalendarIdを取得できます。

注意点

a@bb.co.jp で実行されるGASにおいて、a@bb.co.jp のカレンダーを取得する場合は、難しいことを考える必要はありません。

しかし a@bb.co.jp で実行されるGASから、 b@bb.co.jp のカレンダーを検知したい場合は、以下の設定が必要です。

  • b@bb.co.jp のカレンダーが、a@bb.co.jp に対して、共有されていること
  • a@bb.co.jp のマイカレンダーに、b@bb.co.jp が設定されていること

二つ目は以外と忘れがちですので、注意します。

また、削除までおこなう場合、カレンダー変更の権限をGAS実行のIDに渡しておく必要があります。

時間の重複をどうやって取得する?

時間の重複は、以下のコードで取得できます。

この関数で重複を確認し、もし重複していた場合、最終更新日付が遅いものを削除します。

コード全文

では、コード全文を紹介します。

まず、Google Driveで新規作成し、「Google Apps Script」を作成します。タイトルはなんでもOKです。

なお、実際には Underscore.js や、moment.js をライブラリとして読み込んでいましたが、今回はコード.js を一枚コピペして設定すれば動くように書き直しました。

なお、slackに投稿するコードは割愛します。

トリガーへの設定

トリガーへの設定ですが、時計のロゴをクリックし、新規追加します。以下のように設定することで、指定したカレンダーに対して、設定ができます。

最終更新: 2024年4月6日