みなさんこんにちは。うえはら(@tifoso_str)です。
前回は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」だけを取り出すには下記のようにします。
スクリプトを下記のように変更し、実際にログで確認してみます。
function argumentCheck(e){ Logger.log(e); var calID = e.calendarId Logger.log('カレンダーIDは:%sです。',calID); }
これでカレンダーIDを取得できることが確認できたので、次はこのカレンダーIDを引数で受け取ってカレンダー名を返す関数を考えます。
カレンダーIDからカレンダー名を取得するスクリプト
カレンダーIDから目的のカレンダーをオブジェクトとして取得する為にはgetCalendarByIdメソッドを使用します。
getCalendarByIdメソッドについてはこちらの記事をご覧下さい。
カレンダーオブジェクトからカレンダー名を取得するには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(); }
あとは、更新を確認したいカレンダーの数だけトリガーを設定します。
それぞれのカレンダーで予定を変更するとそのカレンダーが変更された連絡が来るようななります。
まとめ
今回は、複数のGoogleカレンダー更新に対応するトリガー設定とスクリプトについてお伝えしました。
これで、複数のGoogleカレンダーのうち、どのカレンダーが更新されたかわかるようになりました。
次回は、Google Apps ScriptでGoogleカレンダーが更新されると1ヶ月以内のイベントを取り出す方法をお伝えします。