ここで言う「トリガー」とは
Google Apps Scriptで書いた処理を
指定した日時に自動的に実行する機能のことです
スクリプトエディタのUI上からトリガーを設定する方法はこちら
以下のコードを実行すると
1分ごとにmyFunctionを実行するトリガーが追加され
その追加したトリガーを65秒ごとに削除します
(削除しないと永遠にトリガーが増えていく)
これはUI上で1分おきに実行するトリガーを設定するのとほぼ変わらないので
実用的なコードではないですが
トリガーのIDを指定して削除する例を書きたくて書いてみました
コード.gs
function createTimeDrivenTriggers() { var trigger = ScriptApp.newTrigger('myFunction') .timeBased() .everyMinutes(1) .create(); var trigger_id = trigger.getUniqueId(); Utilities.sleep(65000); deleteTrigger(trigger_id); } function deleteTrigger(triggerId) { var allTriggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < allTriggers.length; i++) { if (allTriggers[i].getUniqueId() == triggerId) { ScriptApp.deleteTrigger(allTriggers[i]); break; } } } function myFunction() { //実行したい処理 } |
意訳.gsこの処理は以下を実行する 指定した処理(例ではmyFunction)をトリガーに設定する 時間主導型で 指定した分毎(例では1分毎)に実行する トリガーを作成する 作成したトリガーのIDを取得する 指定した秒数待機する(例では65秒) deleteTriggerにトリガーのIDを渡す この処理は以下を実行する 現在のプロジェクトのすべてのトリガーを取得する トリガーの数だけ以下を繰り返す triggerIdを見つけたら そのトリガーを削除する 繰り返しの処理から抜ける この処理は以下を実行する 実行したい処理を書く |
おまけ
IDや時間の設定が本当に意図したとおりになっているのか
ログを出してみました
コード.gs
function createTimeDrivenTriggers() { var start = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss'); var trigger = ScriptApp.newTrigger('myFunction') .timeBased() .everyMinutes(1) .create(); var trigger_id = trigger.getUniqueId(); Logger.log(trigger.getUniqueId()); Utilities.sleep(65000); deleteTrigger(trigger_id); var end = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss'); Logger.log(["removed: " + trigger.getUniqueId(), "created_at: " + start, "end_at: " + end]); } function deleteTrigger() { var allTriggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < allTriggers.length; i++) { if (allTriggers[i].getUniqueId() == triggerId) { ScriptApp.deleteTrigger(allTriggers[i]); break; } } } function myFunction() { //実行したい処理 } |
意訳.gsこの処理は以下を実行する 現在日時を取得する 指定した処理(例ではmyFunction)をトリガーに設定する 時間主導型で 指定した分毎(例では1分毎)に実行する トリガーを作成する 作成したトリガーのIDを取得する それをログに出す 指定した秒数待機する(例では65秒) deleteTriggerにトリガーのIDを渡す 現在時刻を取得する トリガーIDと開始時間と終了時間をログに出す この処理は以下を実行する 現在のプロジェクトのすべてのトリガーを取得する トリガーの数だけ以下を繰り返す triggerIdを見つけたら そのトリガーを削除する 繰り返しの処理から抜ける この処理は以下を実行する 実行したい処理を書く |
参考
https://developers.google.com/apps-script/guides/triggers/installable