【GAS】時間指定で毎日定期実行されるトリガーを設定する
やりたいこと
GASにおいて、指定した時間(hh:mm)に毎日実行されるようトリガーを設定したい。
しかしGUI上のトリガー設定では日付ベースのタイマーを使うことで「hh〜(hh+1)時」に実行するよう指定できるだけで、これだとその1時間の中でいつ実行するかは指定できない。
解決法
スクリプトを実行するたびにトリガーを削除・設定することで解決できる。
function myFunction() { Logger.log("日付が変わりました。");}例として今回はこの関数を00:00に毎日実行させてみることにする。
1. トリガーの生成
function createTrigger() { const nowDate = new Date(); const runDate = new Date( nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate() + 1, 0, 0 );
ScriptApp.newTrigger("myFunction").timeBased().at(runDate).create();}トリガー生成用の関数を実装する。
runDateに定期実行したい時間を指定- 毎日実行させたいので
dayには翌日を指定 - 00:00に実行したいので
hoursとminutesはそれぞれ0を指定
- 毎日実行させたいので
ScriptApp.newTriggerの引数には実行したい関数名を指定
2. 旧トリガーの削除
このままだと毎日生成したトリガーが残り続けてしまうので、実行済みのものは削除する必要がある。
function deleteTrigger() { const registeredTriggers = ScriptApp.getScriptTriggers(); registeredTriggers.forEach((registeredTrigger) => { if (registeredTrigger.getHandlerFunction() === "myFunction") { ScriptApp.deleteTrigger(registeredTrigger); } });}旧トリガー削除用の関数を実装する。
ScriptApp.getScriptTriggers()で既存のトリガーを取得し、その中から対象のものを削除している。
3. トリガー関数を呼び出す
function myFunction() { Logger.log("日付が変わりました。");
deleteTrigger(); createTrigger();}あとはメインとなる関数を実行する度にトリガー関数を実行すればOK。
もし平日のみに実行したい、という場合は下記の方法で実現できる。
【GAS】日本の休日・祝日をカレンダーから判定する
4. 初回実行のトリガー追加
今回実装したスクリプトを実行しなければトリガーは生成されないので、初回実行日の分は手動で設定する必要がある。

上記設定のトリガーを追加すれば完了。これで毎日00:00にmyFunctionが実行される。