GASのトリガーをスクリプトから削除する方法(deleteTrigger)
Google Apps Script(GAS)のトリガー登録は、通常スクリプトエディタの管理画面から設定・削除します。
実は、管理画面からだけでなく、スクリプトからトリガー削除可能です。
deleteTriggerメソッドを使って、GASのトリガーをスクリプトから削除する方法を解説します。
GASはトリガーによる自動実行可能
Google Apps Script(GAS)の強みはトリガー登録による自動実行です。
GASスクリプトで記述した処理は、スクリプトエディタのトリガー設定画面から、実行したいタイミングで登録できます。
Googleドキュメントを開いた時やスプレッドシートのセルを編集した時、さらに1時間に1回や毎週何曜日の特定時間帯に実行など設定可能です。
通常スクリプトエディタでトリガー削除
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スクリプトを用意することで、登録されたトリガーを削除することができます。
- ScriptApp.getProjectTriggersメソッドでトリガーを取得
- ScriptApp.deleteTriggerメソッドの引数にトリガーを指定して削除
GASで登録したトリガーを削除するサンプルコード
実際に、Google Apps Script(GAS)で登録済みのトリガーを削除するサンプルコードを解説します。
以下のGASコードでトリガーを取得→削除する処理を記述することができます。
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スクリプトエディタでトリガーを登録しておきます。
トリガーがセットされている状態で、トリガーを削除するサンプルコードを実行すると、トリガーが削除されます。
再度、GASスクリプトエディタのトリガー設定を確認すると、トリガー登録が削除されて設定がなくなっています。
特定のトリガーのみ削除したい場合は?
先ほどのトリガーを削除するGoogle Apps Script(GAS)サンプルコードは、getProjectTriggersメソッドで取得したトリガーをforループですべて削除する方法でした。
しかし、すべてのトリガーを削除するのではなく、特定の関数名のみのトリガーだけを削除したいケースも多いです。
そうした場合に、「トリガー登録された関数名が○○だった場合にトリガーを削除する」といった形にサンプルコードを改良してみます。
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メソッドで、削除したいTriggerオブジェクトを引数指定することで、トリガーを削除することができます。
トリガー登録・削除はGASのスクリプトエディタで操作することが多いですが、スクリプトから制御できると自動化のバリエーションがさらに増えます。
一定回数トリガー実行した場合や、トリガー実行が不要になったタイミングで自動削除できて便利です。
ぜひ、GASスクリプトのトリガー操作の自動化に取り組む場合は、deleteTriggerメソッドによる削除を活用しましょう。
ディスカッション
コメント一覧
まだ、コメントがありません