みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASのスクリプトからトリガーを操作する方法をシリーズでお伝えしています。
前回は、毎日決まった時刻に実行するトリガーの設置の方法についてお伝えしました。
しかし、このままでは毎日トリガーが設置されるので、どんどん増えていってしまうんですね…ということは、「トリガーの削除」が必要なのです。
ということで、今回はGoogle Apps Scriptで使用済みのトリガーを削除する方法をお伝えします。
では、行ってみましょう!
前回のおさらい
前回作成したコードはこちらです。
function setTrigger(){ const time = new Date(); time.setHours(23); time.setMinutes(59); ScriptApp.newTrigger('myFunction').timeBased().at(time).create(); }
実行した日の23:59に「myFunction」を動作させるトリガーを設定するというものです。
この関数setTriggerを、日付ベースのトリガーに設定することで、毎日決まった時刻にmyFunctionを実行させることができるわけです。
しかし、関数setTriggerにより、毎日トリガーが設定されるので、気がつくと以下のようにどんどんと使用済みのトリガーが増えていってしまいます。
ですから、これらのトリガーを都度削除するという処理が必要になってきます。
指定のトリガーを削除するスクリプト
指定のトリガーを削除するスクリプトはこちらです。
function delTrigger() { const triggers = ScriptApp.getProjectTriggers(); for(const trigger of triggers){ if(trigger.getHandlerFunction() == "myFunction"){ ScriptApp.deleteTrigger(trigger); } } }
流れとしては以下のとおりです。
- 現在のプロジェクトのトリガーすべてを配列で取得
- 配列をループし、指定の関数名がセットされているトリガーかどうかを判定
- 該当のトリガーを削除
現在のプロジェクトのすべてのトリガーを取得
まず、現在のプロジェクトのすべてのトリガーを取得します。
ScriptAppクラスのgetProjectTriggersメソッドを使用します。
getProjectTriggersメソッドの戻り値はTriggerオブジェクトの配列です。
指定の関数名かどうかを判定する
for…of文でトリガーの配列についてループを行い、トリガーに設定されている関数が「myFunction」かどうかを判定します。
トリガーに設定されている関数名を取得するには、TriggerクラスのgetHandlerFunctionメソッドを使用します。
getHandlerFunctionメソッドは関数名を文字列で返しますので、if文で「myFunction」かどうかを判定することができます。
トリガーの削除
トリガーの削除にはScriptAppクラスのdeleteTriggerメソッドを使用します。
引数の「トリガー」には削除するTriggerオブジェクトを指定します。
トリガーを削除するスクリプトを呼び出す
毎日指定時刻に実行する関数(ここでは「myFunction」)が呼び出されたら、その呼び出したトリガーは不要となります。
なので、関数myFunctionの中でdelTriggerを呼び出して、トリガーを削除すればよいのです。
function myFunction(){ delTrigger(); console.log('実行されました'); }
実際に、関数delTriggerが実行されると、たくさんたまっていた「myFunction」のトリガーがすべて削除されました。
まとめ
今回は、Google Apps Scriptで指定のトリガーを削除する方法をお伝えしました。
前回の毎日決まった時刻にスクリプトを実行するトリガー設定と併せて使用することで、余計なトリガーを増やさなくて済みますね。
次回は、休みの日はゆっくりしたい!ということで、平日のみトリガーを作成する方法をお伝えします。
どうぞお楽しみに!