【GAS】決まった時間ぴったりに動くトリガーを作成する
はじめに:GASのトリガー設定では時間指定ができない
GASの時間主導型>日付ベースのタイマー設定では、午前9時~午前10時といった、幅のあるトリガーセットしかできません。
しかし、正確な時間にGASを実行したい場合もあります。
- 9:00に本日の連絡をしたい
- 12:45にハミガキ運動の連絡をしたい
- 17:55に終業5分前を連絡したい
GASのトリガーセットを少し工夫すると、指定した時間にGASを実行することができるので紹介します。
この記事の対象者
- GAS初心者
- トリガー設定に不満のある方
- 決まった時間に動くGASを作りたい方
コードを使うための準備
特にありません。
※あなたが時間通りに動かしたいコードは必要。
コードの紹介
概要としては「トリガーをセットするコードを、日付ベースのタイマーでセットする」という流れです。
例として「17:50にendOfWorkという終業を通知するようなGASを動かす」という想定でコードを紹介します。
//トリガーをセットするGAS
function setTrigger() {
const today = new Date();
today.setHours(17)//実行したい時間
today.setMinutes(50);//実行したい分
//特定の日付のトリガーを作成
//実行したいfunction名を入れる
ScriptApp.newTrigger('endOfWork').timeBased().at(today).create();
}
function endOfWork() {
/*
終業を通知するコードを書く
*/
//トリガーをすべて取得
const triggers = ScriptApp.getProjectTriggers();
//endOfWorkという名前のトリガーを削除
for (const trigger of triggers) {
if (trigger.getHandlerFunction() === 'endOfWork') {
ScriptApp.deleteTrigger(trigger);
}
}
}
上のコードに対してsetTriggerを日付ベースのタイマーで午後3時から午後4時にセットしておきます。
そうすると、15時~16時の間にsetTriggerが動いて、17:50にendOfWorkが動くトリガーをセットしてくれます。
17:50にendOfWorkが終了したら、setTriggerによってセットしたendOfWorkを削除して終了となります。
このトリガーの削除はなぜ必要かというと…
setTriggerによってセットされるトリガーは、日付ベースのタイマーのうち、特定の日時のトリガーとしてセットされます。
特定の日時のトリガーは、実行後も期限切れのトリガーとして残り続けてしまうのです。
そのため、実行後にendOfWorkのトリガーをすべて削除するコードが必要となります。
(期限切れのトリガーが蓄積されてしまうので…)
おわりに
決まった時間にGASを動かしたいと思う場面は、意外に多いように思います。
「トリガーをセットするコードを、日付ベースのタイマーでセットする」という考え方は少しややこしいですが、1度理解してしまえば簡単です。
ぜひ、思った時間に動くコードを作成してみてくださいね。
Discussion