あら?Google Apps Scriptのトリガーって発動したら消えないの?
Google Apps Scriptのトリガーは繰り返し実行するものであれば無効にはならないのですが単発のトリガーの場合は無効になったまま残りつづけます。(わたしの確認した限りでは)ですので、無効になったトリガーをスクリプトで削除します。
無効なトリガーを削除するスクリプト
トリガーは手動で削除してもいいのですが、手作業は時間がかかります。しかもまとめて削除できるわけでもないので、スクリプトを使ってトリガーを削除します。
forでトリガーを削除するコード
let existingTriggers = ScriptApp.getProjectTriggers();
for (let i = 0; i < existingTriggers.length; i++) {
if (existingTriggers[i].getHandlerFunction() === "myFunction") {
ScriptApp.deleteTrigger(existingTriggers[i]);
}
}
for ofでトリガーを削除するコード
let existingTriggers = ScriptApp.getProjectTriggers();
for (let trigger of existingTriggers) {
if (trigger.getHandlerFunction() == "myFunction") {
ScriptApp.deleteTrigger(trigger);
}
}
コードの解説
ScriptApp.getProjectTriggers()
Google Apps Script プロジェクト内のすべてのトリガー(タイマーイベント)を取得します。
getHandlerFunction()
トリガーの関数名を取得します。つまり関数名が「myFunction」のものだけを削除するように条件をつくります「if (trigger.getHandlerFunction() == “myFunction”) 」
deleteTrigger()
特定のトリガーを削除します。
forとfor ofを使った方法を紹介しましたがどちらもやっていることは同じですのでどちらでもトリガーを削除することができます。
まとめと個人的見解
Google Apps Scriptのトリガーは単発のトリガーの場合は一回発動すると「無効」になってトリガーが残りつづけます。たとえば毎日単発のトリガーを設定するようなスクリプトを組んでいた場合、Google Apps Scriptのトリガーの最大数は20個までときまっていてこの制限にひっかかってしまうことになります。ですので今回はスクリプトでトリガーを削除する方法を紹介しました。
deletetriggerをつかってトリガーを削除する例としては、トリガーをセットするスクリプトの先頭で最初にトリガーを削除するコードを書いておくのがいいのかなと思います。(状況によって変わってくるとは思いますが…。)
わたしの場合はスクリプトを使ってトリガーをセットすることが多いのですが(手動でもトリガーをセットできるが詳細な時間が指定できない)最初、単発のトリガーは一回実行されたら自動で削除されるのかと思っていたのですが実際には消えないことが今回わかったのでこの記事を書きました。スクリプトでトリガーをセットする方法については以下の記事を参考にしてください。
Google Apps Scriptで正確な時間に関数を実行する方法
コメント