Google Apps Scriptで使用済みのトリガーを削除する方法


トリガー削除

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASのスクリプトからトリガーを操作する方法をシリーズでお伝えしています。

前回は、毎日決まった時刻に実行するトリガーの設置の方法についてお伝えしました。

Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定
Google Apps Scriptのトリガー設定は毎日実行する場合は、午前8時~9時のように1時間の幅があります。また、時間を細かく指定するには、2018年2月16日08:30のように日にちも設定する必要があります。 この二つを使用して、毎日指定した時間にスクリプトを実行させるトリガーを設定します。

しかし、このままでは毎日トリガーが設置されるので、どんどん増えていってしまうんですね…ということは、「トリガーの削除」が必要なのです。

ということで、今回は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);
    }
  }
  
}

流れとしては以下のとおりです。

  1. 現在のプロジェクトのトリガーすべてを配列で取得
  2. 配列をループし、指定の関数名がセットされているトリガーかどうかを判定
  3. 該当のトリガーを削除

現在のプロジェクトのすべてのトリガーを取得

まず、現在のプロジェクトのすべてのトリガーを取得します。

ScriptAppクラスのgetProjectTriggersメソッドを使用します。

ScriptApp.getProjectTriggers()

getProjectTriggersメソッドの戻り値はTriggerオブジェクトの配列です。

指定の関数名かどうかを判定する

for…of文でトリガーの配列についてループを行い、トリガーに設定されている関数が「myFunction」かどうかを判定します。

トリガーに設定されている関数名を取得するには、TriggerクラスのgetHandlerFunctionメソッドを使用します。

Triggerオブジェクト.getHandlerFunction()

getHandlerFunctionメソッドは関数名を文字列で返しますので、if文で「myFunction」かどうかを判定することができます。

トリガーの削除

トリガーの削除にはScriptAppクラスのdeleteTriggerメソッドを使用します。

ScriptApp.deleteTrigger(トリガー)

引数の「トリガー」には削除するTriggerオブジェクトを指定します。

トリガーを削除するスクリプトを呼び出す

毎日指定時刻に実行する関数(ここでは「myFunction」)が呼び出されたら、その呼び出したトリガーは不要となります。

なので、関数myFunctionの中でdelTriggerを呼び出して、トリガーを削除すればよいのです。

function myFunction(){
  
  delTrigger();
  console.log('実行されました');
  
}

実際に、関数delTriggerが実行されると、たくさんたまっていた「myFunction」のトリガーがすべて削除されました。

不要なトリガーが削除された

まとめ

今回は、Google Apps Scriptで指定のトリガーを削除する方法をお伝えしました。

前回の毎日決まった時刻にスクリプトを実行するトリガー設定と併せて使用することで、余計なトリガーを増やさなくて済みますね。

次回は、休みの日はゆっくりしたい!ということで、平日のみトリガーを作成する方法をお伝えします。

どうぞお楽しみに!

連載目次:GASのスクリプトからトリガーを操作する方法

GASのトリガーはメニューから設定する以外に、スクリプトからも設置や削除が行えます。本シリーズでは、ScriptAppsサービスを使ったトリガーの操作方法についてお伝えしていきます。
  1. Google Apps Scriptで毎日決まった時刻にスクリプトを実行するトリガー設定
  2. Google Apps Scriptで使用済みのトリガーを削除する方法
  3. Google Apps Scriptで営業日を判定してトリガーを作成する方法

タイトルとURLをコピーしました