GASで時間指定でイベントを発火させる方法について
スプレッドシートに記載したタスクリストを取得し、ステータスが「未着手」「処理中」のタスクをSlackのメッセージで指定時間に送付するアプリをGASで書きたい時に、「○時○分」と時間指定ぴったりに送付させる方法について記載します。
前提
まずはGASでイベント発火を設定する方法について説明します。
-
左側にあるサイドメニューから目覚まし時計のマーク(トリガー)をクリックする。
-
実行する関数を選択の項目で「実行したい関数」を選択する。
-
時間ベースのトリガーのタイプを選択の項目で「日付ベースのタイマー」を選択する。
-
時刻を選択する項目で「実行したい時刻」を選択する。
問題
GASで用意されているトリガーは1時間単位でしか指定できないので、上記の例だと9時00分から9時59分の間に実行されてしまう。
例えば9時30分ちょうどにメッセージを送信したい……というような、時間指定ができない。
解決策
- 指定の1時間内に実行される用の関数を作成する。
- 作成した関数の中で下記の処理を書く。
- 指定する時刻をセットする
- 新規トリガーの設定と実際に行いたい処理(メッセージを送付するための関数)
// トリガー設定
function execute(){
// 実行時刻格納用の定数
const date = new Date();
// 実行したい時刻を指定する
// setHoursで時間を指定する
date.setHours(09);
// setMinutesで分を指定する
date.setMinutes(30);
// 新規トリガーの設定
// slackにメッセージを送信するための関数を指定する
ScriptApp.newTrigger('mainFunction').timeBased().at(date).create();
}
GAS内で新規トリガーを作成する構文に下記を代入する。
ScriptApp.newTrigger('関数名').timeBased().at(時刻をしていた変数).create();
ポイント
GASのトリガーは実行したい時間より早い時間を設定しておく。
9時30分にメッセージを送信したい場合、午前8~9時など指定時間より早い時間帯を指定する。
理由
例えば午前9~10時を指定してしまうと、9時45分にトリガーが実行されてしまう可能性があるので、早めの時間帯を設定する必要があるから。
無事に指定した時刻にメッセージが送信されました!
今回は例としてスプレッドシートの内容をSlackにメッセージを送信してみましたが、GASのイベント発火全般に利用できるので是非お試しください!