作ったばかりのトリガーはすぐ起動されない

人気ブログランキング

Google Apps Script は6分以上実行できない。
それは、公式サイト に書かれている。

じゃあどうするかって、Google Apps Script で6分以上の処理をする を参考にしてクリアしたと思っていた。

たまにトリガーが実行されないことがあったので調べてみた。
サンプルプログラムを書いて試してみると、1分後に起動させるように書いても1分後だったり、5分後だったりまちまちだった。
function createTrigger() {
ScriptApp.newTrigger("func").timeBased().after(1 * 60 * 1000);
}
function func() {
console.log("called");
}
この結果から、タイマーをチェックする間隔が結構長いのでは?と勘繰りマニュアルを調べてみた。

after(durationMilliseconds)
Specifies the duration (in milliseconds) after the current time that the trigger will run. (plus or minus 15 minutes).


プラスマイナス15分?何のことだと一瞬考えたが、それだけずれる可能性があるってことね。
ということは、15分未満の値を指定すると起動されない可能性があるってことになる。
ミリ秒まで指定できる意味がないじゃないか!ふざけたIF!

15分後に起動なんてしたくないし、起動されるかどうかわからないんじゃ使えない。
マニュアルをよく見ると、everyMinutes(n) というのがある。
これを使えばいいね。少なくとも15分以内に、最初の1分目のキックがされる。運が良ければ直ぐにキックされる。

トリガーを放置するとキックされ続けるので、トリガーで起動されたら、そのトリガーを消す必要がある。
※監視のためだと思うが、トリガーから呼び出された function が終わらない限りトリガーは消えない。

ちなみに、消すためには ScriptApp.getProjectTriggers() でトリガーと取り出す必要がある。
このメソッドのリファレンスは次のようになっている。

Gets all installable triggers associated with the current project.


カレントプロジェクトのトリガーを取得とあって、プロジェクトというのだから、複数ユーザでやっている場合は共有されてしまうと思ったが、実際はそうならない。
マニュアルおよびメソッド名が適切でない。

この記事へのコメント