柏木です。
前回,GASのトリガーの挙動がなんだかおかしいという記事を書きました。
その後進展があったので,そちらのご報告になります。
前回までのあらすじ
わざわざ記事をたどるのがめんどくさいという方のために,前回までのあらすじです。
とりあえずGASのトリガーの挙動がおかしくなったので,GASのトリガーをプログラムから設置するのではなく,手で設置する形で様子見をすることにした…というのが前回まで。
もう一度やってみる
GASのトリガー設定画面から設定すればうまくいくことは分かりました。
ダメ元でもう一度コードから設定するようにしてみました。
コードは下記。
function setTrigger() { let setTime = new Date(); setTime.setMinutes(setTime.setMinutes() + 5); //実行から5分後にセットされるようにしたい ScriptApp.newTrigger("myFunction").timeBased().at(setTime).create(); }
そのままですが,実行から5分後にトリガーをセットしてくれというものです。
あれ?普通に起動してる…?
なぜかは分かりませんが,今度はトリガーが正常にセット→起動→実行→セット(以下繰り返し)ができるようになっていました。
なんでだ。
なんか助走みたいなものが必要だったってこと?
ということはコードからセットすることもできるようになるのでは…?
というわけで以前のコードに戻してみる
以前のコード(トリガー部分抜粋)は下記。
function setTrigger() { let setTime = new Date(); setTime.setDate(setTime.getDate() + 1); //翌日にセットしたいので +1 してます setTime.setHours(15); //15時台にセットしたい setTime.setMinutes(00); //15時ぴったりにセットしたいので00としています ScriptApp.newTrigger("myFunction").timeBased().at(setTime).create(); }
これで数日間実行させましたが,今度は以前のように問題なく起動するようになっていました。
まとめ
これが正しい方法かは分かりませんが,とりあえず解決に至ったので,解決に至るまでの手順を簡単にまとめます。
- 権限を付与し直すため,新しくファイルを作る
(コードはそのままコピペでよい) - 一度自分がコードからセットしたいものに近いトリガーをトリガー画面からセットして助走させてみる
- 成功したら元のコードに戻す
以上になります。
GASを含めすべての技術は独学なので,専門の方から見たらありえない部分だらけかと思いますが,参考になれば幸いです。