前回は毎日決まった時刻にスクリプトを実行するトリガー設定についてお伝えしました。
ですが、作成したsetTriggerスクリプトで「myFunction」を呼び出すトリガーが毎日作成されます。
トリガーは実行されても、そのまま残るので毎日増えていくことになります。
11:05と11:15に「myFunction」を呼び出したトリガーですが、19:30でもそのまま残っています。
そこで今回は、myFunctionを実行するときに、使用済みのトリガーを削除する方法をお伝えします。
指定のトリガーを削除するスクリプト
それでは、指定のトリガーを削除するスクリプトをご紹介します。
下記スクリプトを実行すると、myFunctionを呼び出すトリガーを削除します。
function delTrigger() { var triggers = ScriptApp.getProjectTriggers(); for(var i=0; i < triggers.length; i++) { if (triggers[i].getHandlerFunction() == "myFunction") { ScriptApp.deleteTrigger(triggers[i]); } } }
流れとしては
1. プロジェクトに関連付けられている全てのトリガーを取得
2. 指定のトリガーか判定
3. トリガーの削除
このようになるので、一つずつ解説していきます。
トリガーの取得
まずは、プロジェクトに関連付けられている全てのトリガーを取得します。
トリガーの取得にはScriptAppクラスのgetProjectTriggersメソッドを使用します。
getProjectTriggersメソッドの戻り値はTriggerオブジェクトの配列となっているので、2行目で取得した全てのトリガーを配列triggersに代入しています。
指定のトリガーか判定
削除したい指定のトリガーは「myFunction」を呼び出すトリガーです。
トリガーが呼び出す(実行する)ファンクション名を確認する為に、TriggerクラスのgetHandlerFunctionメソッドを利用します。
getHandlerFunctionメソッドの戻り値はファンクション名なので、if文を利用して、取得したファンクション名が「myFunction」か判定し、同じであれば次のトリガー削除に進みます。
トリガーの削除
トリガーの削除にはdeleteTriggerメソッドを使用します。
for文とif文を利用して、取得したファンクション名が「myFunction」かの判定を、配列の先頭から配列の長さの回数だけ繰り返し処理します。
これで、毎日setTriggerを呼び出すトリガーは削除されずに、setTriggerで作成したトリガーだけが削除されます。
トリガーを削除するスクリプトを呼び出す
毎日指定時刻に実行するスクリプトが呼び出された瞬間、その呼び出したトリガーは不要となります。
今回呼び出されるのは「myFunction」なので、この中の実行したい処理の前でdelTriggerを呼び出して、トリガーを削除します。
function myFunction(){ delTrigger(); /* 実行したい処理 */ }
まとめ
今回は、Google Apps Scriptで指定のトリガーだけを削除する方法をお伝えしました。
前回の毎日決まった時刻にスクリプトを実行するトリガー設定と併せて使用することで、メニューからでは設定できない内容でも、自由にトリガー設定できるようになります。
次回は休みの日はゆっくりしたい!ということで、平日のみトリガーを作成する方法を解説します。