GASのトリガーをスクリプトから削除する方法(deleteTrigger)

Google Apps Script(GAS)のトリガー登録は、通常スクリプトエディタの管理画面から設定・削除します。

実は、管理画面からだけでなく、スクリプトからトリガー削除可能です。

deleteTriggerメソッドを使って、GASのトリガーをスクリプトから削除する方法を解説します。

GASはトリガーによる自動実行可能

Google Apps Script(GAS)の強みはトリガー登録による自動実行です。

GASスクリプトで記述した処理は、スクリプトエディタのトリガー設定画面から、実行したいタイミングで登録できます。

Google Apps Script(GAS)で時間ベースのトリガー実行した設定画面

Googleドキュメントを開いた時やスプレッドシートのセルを編集した時、さらに1時間に1回や毎週何曜日の特定時間帯に実行など設定可能です。

通常スクリプトエディタでトリガー削除

Google Apps Script(GAS)のトリガーは、前述したスクリプトエディタで編集します。

登録したトリガーが不要になり、削除したい場合は、トリガー設定画面に移動します。

Google Apps Script(GAS)のスクリプトエディタのトリガー設定で、三点リーダーをクリックして、「トリガーを削除」

削除するトリガーをマウスホバーし、右側に表示される3点リーダ「︙」をクリックし「トリガーを削除」を選択すると、トリガーを削除できます。

GASスクリプトからトリガー削除可能

実はGUIから以外でも、Google Apps Script(GAS)のスクリプトからトリガーを削除可能です。

GASスクリプトからトリガーの削除ができれば、不要になったタイミングで自動的にトリガーを削除するといった処理も実装できます。

最初のうちはGASのコードでトリガーを削除する機会は少ないです。

しかし、GASによる自動化をさらに促進していく場合、トリガー削除も自動でできると便利です。

トリガー削除するScriptApp.deleteTrigger

Google Apps Script(GAS)のコードでトリガー登録を削除するには、ScriptAppクラスのdeleteTriggerメソッドを使用します。

ScriptApp.deleteTrigger(削除したいTriggerオブジェクト)

deleteTriggerメソッドは引数に指定したTriggerオブジェクトをトリガー登録から削除してくれます。

GASのトリガー情報が格納されているTriggerオブジェクトは、ScriptApp.getProjectTriggers()の戻り値から取得できます。

getProjectTriggersメソッドによるGASトリガーの取得方法は以下の記事で解説しています。

そのため、以下の2Stepを実行するGASスクリプトを用意することで、登録されたトリガーを削除することができます。

  1. ScriptApp.getProjectTriggersメソッドでトリガーを取得
  2. ScriptApp.deleteTriggerメソッドの引数にトリガーを指定して削除

GASで登録したトリガーを削除するサンプルコード

実際に、Google Apps Script(GAS)で登録済みのトリガーを削除するサンプルコードを解説します。

以下のGASコードでトリガーを取得→削除する処理を記述することができます。

Google Apps Script(GAS)でScriptApp.deleteTriggerメソッドでトリガー登録を削除するサンプルコード
function triggerTestA() {
  console.log('トリガーAのテストです');
}
function triggerTestB(){
  console.log('トリガーBのテストです');  
}
function delTrigger(){
  //GASプロジェクトに設定したトリガーをすべて取得
  const triggers = ScriptApp.getProjectTriggers();
  //トリガーの登録数をログ出力
  console.log('トリガー数:' + triggers.length);
  //トリガー登録数のforループを実行
  for(let i=0;i<triggers.length;i++){
    //取得したトリガーをdeleteTriggerで削除
    ScriptApp.deleteTrigger(triggers[i]);
  }
}

まず、トリガー登録する2つのテスト用関数を用意しています。

その後、delTrigger関数では、GASプロジェクトに設定されたトリガーをすべて取得し、forループでトリガーの数だけ繰り返しdeleteTriggerでトリガーを削除しています。

トリガー削除のスクリプトを走らせる前にGASスクリプトエディタでトリガーを登録しておきます。

Google Apps Script(GAS)でトリガー削除を実行するスクリプトを実演するため、トリガーを登録

トリガーがセットされている状態で、トリガーを削除するサンプルコードを実行すると、トリガーが削除されます。

Google Apps Script(GAS)でScriptApp.deleteTriggerメソッドでトリガー登録を削除するサンプルコードを実行した結果

再度、GASスクリプトエディタのトリガー設定を確認すると、トリガー登録が削除されて設定がなくなっています。

すべてのトリガーに対してScriptApp.deleteTriggerメソッドを実行してトリガーを削除

特定のトリガーのみ削除したい場合は?

先ほどのトリガーを削除するGoogle Apps Script(GAS)サンプルコードは、getProjectTriggersメソッドで取得したトリガーをforループですべて削除する方法でした。

しかし、すべてのトリガーを削除するのではなく、特定の関数名のみのトリガーだけを削除したいケースも多いです。

そうした場合に、「トリガー登録された関数名が○○だった場合にトリガーを削除する」といった形にサンプルコードを改良してみます。

Google Apps Script(GAS)で特定の関数名のトリガー登録のみ、ScriptApp.deleteTriggerメソッドでトリガー登録を削除するサンプルコード
function delTrigger(){
  //GASプロジェクトに設定したトリガーをすべて取得
  const triggers = ScriptApp.getProjectTriggers();
  //トリガーの登録数をログ出力
  console.log('トリガー数:' + triggers.length);
  //トリガー登録数のforループを実行
  for(let i=0;i<triggers.length;i++){
    //取得したトリガーの関数がTestAの場合、deleteTriggerで削除
    if(triggers[i].getHandlerFunction()==='triggerTestA'){
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}

取得したトリガー情報を持つTriggerオブジェクトで、getHandlerFunction()メソッドから関数名が取得できるので、if文の条件判定で削除処理を行っています。

このようにトリガーを削除時に関数名で条件判定を行えば、削除したい関数のトリガーのみ削除できます。

Google Apps Script(GAS)で特定の関数名のトリガー登録のみ、ScriptApp.deleteTriggerメソッドでトリガー登録を削除するサンプルコードで、triggerTestAのみ削除し、triggerTestBは削除されない

そのほか、イベントタイプやトリガーソースを参照して、特定の実行条件のトリガーのみ削除することも可能です。

まとめ・終わりに

今回、Google Apps Script(GAS)で登録されているトリガーを削除する方法を紹介しました。

ScriptApp.deleteTriggerメソッドで、削除したいTriggerオブジェクトを引数指定することで、トリガーを削除することができます。

トリガー登録・削除はGASのスクリプトエディタで操作することが多いですが、スクリプトから制御できると自動化のバリエーションがさらに増えます。

一定回数トリガー実行した場合や、トリガー実行が不要になったタイミングで自動削除できて便利です。

ぜひ、GASスクリプトのトリガー操作の自動化に取り組む場合は、deleteTriggerメソッドによる削除を活用しましょう。