お久しぶりです,柏木です。
GASでとりあえずなんでもやれるものは自動化してきた柏木ですが,とうとうGASで引っかかってしまったのでやったことと対処をメモ程度に書き留めておきます。
Contents
トリガーが起動しなくなった!
今まではなんの問題もなく起動していたトリガーが起動しなくなりました。
書いていたコード(トリガー部分抜粋)は以下のようなものです。
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(); }
そのままですが,翌日の15時ぴったりにmyFunctionを実行するトリガーをセットするだけのコードです。
myFunction自体はドキュメント・スプレッドシートに特定の情報を書き込むというだけのシンプルなものなのです。
これが今まではなんの問題もなく動いていたのですが,GASのエディタが変わったタイミングあたりから,突然動かなくなってしまいました。
以下に柏木が取った対処などを書き留めます。
挙動の確認
以下,確認した挙動です。
挙動の確認のため,コードを下記のように変更しました。
function setTrigger() { let setTime = new Date(); // setTime.setDate(setTime.getDate() + 1); // setTime.setHours(15); // setTime.setMinutes(00); setTime.setMinutes(setTime.setMinutes() + 5); //実行から5分後にセットされるようにしたい ScriptApp.newTrigger("myFunction").timeBased().at(setTime).create(); }
1:手動で実行
問題なし。
トリガーも問題なく5分後にセットされる。
ドキュメント・スプレッドシートにも問題なく書き込みがされている。
2:1(手動起動時)に設定されたトリガーで実行
問題なし。
トリガーもセットされるし,書き込みにも問題がない。
3:2(トリガー起動時)に設定されたトリガーで実行
ここで起動しなくなってしまう。
偶然の可能性もあるので複数回やってみたが,どうしてもこの3でそもそも起動しなくなるみたい…。
実験
1:権限の見直し
このプログラムはドキュメント・スプレッドシートに書き込みを行うものだったので,エディタが変わったタイミングで権限になにか引っかかるものができたのかな…と思い権限の見直しをしました。
…といっても,権限の見直しをするより新しくスクリプトファイル作ったほうが確実なのでは…?ということで,全く同じコードを別なスクリプトファイルに貼り付けてみました。
結果:挙動変化せず
2:タイムゾーンの見直し
タイムゾーンがどうも関係しているらしいという記事を見つけたので,タイムゾーンを確認してみました。
appscript.jsonでも確認したが,Asia/Tokyoとなっているのでどうも問題なさそう。
結果:挙動変化せず
3:仕方ないのでトリガー画面からセットしてみる
これはすごく悔しいけれど,「5分おきにセット」であればトリガーの設定画面から「分ベースのタイマー」>「5分おき」でいけるのでセットしてました。
結果:これならいける
悔しいけれどこれならいけた。
もちろん,トリガーをセットしているコード自体がトリガー画面の命令とは違うので「そうかこれなら大丈夫なのか…」というところではあるんだけれど,なんだか腑に落ちない…。
一体何が原因なんだろうか…。
とりあえずの対処として
原因はいまいちわからないですが,このプログラムにおいて一番困るのは,毎日実行してくれないこと。
なので,とりあえず毎日決まった時刻(今回だったら15時ぴったり)に実行してくれればそれは理想ですが,最悪ぴったりでなくてもいいわけです。
なので,今回はとりあえずの対処として,GASのトリガー設定画面から,「日付ベースのタイマー」>「午後15時〜午後16時」でセットすることにしました。
やっぱり原因がわからないともやもやしてしまうのでしばらく原因調査は続けるつもりです。
続報がありましたらまたこちらにてお知らせします。