複数のGoogleカレンダー更新に対応するトリガー設定とスクリプト


複数カレンダー
みなさんこんにちは。うえはら(@tifoso_str)です。

前回はGoogleカレンダーで予定が更新された時にチャットワークに通知する方法をお伝えしました。

Googleカレンダーで予定が更新された時にチャットワークに通知する
Google Apps Scriptのトリガー設定にGoogleカレンダーの更新が使用できるようになりました。今回はどのような時にトリガーが実行されるのか確認していきます。実行されるとチャットワークへメッセージが送信され、更新が確認できます。

更新を確認したいカレンダーが一つの時は前回のままでもいいと思いますが、複数になるとどのカレンダーが更新されたのか確認するために工夫が必要です。

まず思いつくのは、カレンダーの数だけ関数を作成してそれぞれにトリガー設定する方法だと思います。

ですが、この方法では確認したいカレンダーが増えるたびに関数を作成する必要があり、メンテナンス性が悪いです。

そこで今回はメンテナンス性に考慮した、複数のGoogleカレンダー更新に対応するトリガー設定とスクリプトについてお伝えします。

スポンサーリンク

トリガーが実行されるときに渡される引数

カレンダーが更新されるとトリガーによって関数が実行されますが、その関数には引数が渡されています。

まずは、どのような引数が渡されているか確認します。

下記は関数「argumentCheck」が実行されると引数「e」を受け取って、ログ表示するスクリプトです。

function argumentCheck(e){
  Logger.log(e);
}

この引数「e」はイベントオブジェクトと呼ばれ、このオブジェクトを通してイベントの色々な情報を得ることができます。

カレンダーが更新されたときに関数「argumentCheck」が実行されるように、トリガーを設定します。

トリガー設定

設定が終わったら、カレンダーを更新します。
Google Apps Scriptに戻って、ctrl+Enterでログを確認します。

トリガーログ

ログの内容は「authMode=認証モード」「calendarId=カレンダーID」「triggerUid=トリガーID」になっています。

カレンダーIDがわかれば、どのカレンダーか判別できますね。

引数の中から「calendarId」だけを取り出す

トリガーから渡される引数には、「authMode」と「calendarId」と「triggerUid」が含まれているので、ここから「calendarId」だけを取り出す必要があります。

「calendarId」だけを取り出すには下記のようにします。

e.calendarId

スクリプトを下記のように変更し、実際にログで確認してみます。

function argumentCheck(e){
  Logger.log(e);
  
  var calID = e.calendarId
  Logger.log('カレンダーIDは:%sです。',calID);
}

カレンダーIDログ

これでカレンダーIDを取得できることが確認できたので、次はこのカレンダーIDを引数で受け取ってカレンダー名を返す関数を考えます。

カレンダーIDからカレンダー名を取得するスクリプト

カレンダーIDから目的のカレンダーをオブジェクトとして取得する為にはgetCalendarByIdメソッドを使用します。

getCalendarByIdメソッドについてはこちらの記事をご覧下さい。

毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
Google Apps Scriptを使ってチャットワークに色々と送ることができます。Googleカレンダーから当日の予定を取得してチャットワークに送る方法についてお伝えしたいと思います。
CalendarApp.getCalendarById(カレンダーID)

カレンダーオブジェクトからカレンダー名を取得するにはgetNameメソッドを使用します。

Calendarオブジェクト.getName()

スクリプトは下記のようになります。

function calendarName(calID) {
  var calendar = CalendarApp.getCalendarById(calID);
  return calendar.getName();
}

カレンダーIDを引数で受け取って、それを元にカレンダーオブジェクトを取得し、カレンダーオブジェクトからカレンダー名を取得する流れです。

更新されたカレンダー名をチャットワークへ送信するスクリプト

前回のスクリプトを元に、カレンダー名を取得する部分を追加します。

function sendMessageCW(e) { 
  var calID = e.calendarId; //カレンダーID取得
  var calName = calendarName(calID); //カレンダー名取得
  var client = ChatWorkClient.factory({token: 'XXXXXXXXXXXXXXXXXXXX'}); //チャットワークAPI
 
  client.sendMessage({
    room_id:*********, //ルームID
    body: calName + 'のカレンダーで予定が変更されました。'});
}

function calendarName(calID) { //カレンダー名を取得する関数
  var calendar = CalendarApp.getCalendarById(calID);
  return calendar.getName();
}

あとは、更新を確認したいカレンダーの数だけトリガーを設定します。

複数のカレンダーID

それぞれのカレンダーで予定を変更するとそのカレンダーが変更された連絡が来るようななります。

複数カレンダーCW確認

まとめ

今回は、複数のGoogleカレンダー更新に対応するトリガー設定とスクリプトについてお伝えしました。

これで、複数のGoogleカレンダーのうち、どのカレンダーが更新されたかわかるようになりました。

次回は、Google Apps ScriptでGoogleカレンダーが更新されると1ヶ月以内のイベントを取り出す方法をお伝えします。

連載目次:GASでカレンダーイベントをトリガーにする方法

GASのイベントトリガーとして新たに加わった「カレンダーの更新」を使用すれば、カレンダーの操作をきっかけにスクリプトを動作させることができます。このシリーズでは、カレンダーの更新トリガーの基本の使い方から、一歩進んだテクニックをお伝えしていきます。
  1. Googleカレンダーで予定が更新された時にチャットワークに通知する
  2. 複数のGoogleカレンダー更新に対応するトリガー設定とスクリプト
  3. GASでGoogleカレンダーが更新されると1ヶ月以内のイベントを取り出す
  4. GASでGoogleカレンダーが更新された時にイベントを特定してチャットワークへ送信

タイトルとURLをコピーしました