ここで言う「トリガー」とは
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
