見出し画像

GAS|指定した時刻にトリガーを設定する(誤差 ±15 分)|timeBased|newTrigger|ScriptApp|Google Apps Script|開発裏話

マンガポスト日本版」では、Google ドライブ内に保存している「コミックス発売日情報」を参照して、その日付を基に毎日自動配信(ツイート)しています。

毎日決められた時分秒に実行しているのではなく、その日の情報量の多さに応じて自動計算し、トリガーを任意時刻に設定しています。以下はその一例です。

// 13:57
var date = new Date();
date.setHours(13);
date.setMinutes(57);

// creates the trigger
ScriptApp.newTrigger('functionName').timeBased().at(date).create();

こうすることで、決まった時刻(上記なら 13:57)に細かくトリガーを設定できるので、「正確なスケジュールが実行できる」と思われるかもしれませんが、実はそうではありません

GAS のトリガーには、間違いなくその時刻に実行するという機能はなく、リファレンスには以下の通りに書かれているので、注意が必要です。

Specifies when the trigger will run (plus or minus 15 minutes).

最大で「±15 分」もの誤差があります。実行時間が「13:42 ~ 14:12」となる可能性があるのです。これが、リファレンスに記載された正しい仕様です。

マンガポスト日本版」において、今日現在、指定した時刻に実行されなかったケースは殆どありませんが、実装する際は、この「不正確さ」を念頭に入れておかなければ、思わぬ不具合になり兼ねません。

ところで、GAS のトリガーは、実行したら自動的に削除されるものではありません。ですので、以下の通り、明示的に削除しなければ、実行済みのトリガーがプロジェクト内に溜まり続けてしまいます

マンガポスト日本版

マンガポスト日本版の Twitter 公式アカウントです。
漫画(まんが)・コミックの新刊情報を毎日配信中!

コーヒーブレイク

ある日突然、ある町のスーパーマーケットのむすめが、スーパーマンになってしまった。「女の子のくせに、えらいものになってくれたね」と嘆く両親だったが、町内会長がやって来て、「スーパーマンの店と大はやりになるだろう」と言ったことから、両親は大喜び。「がんばってスーパーマンをやりなさい」と言われるものの、むすめは何をしたらいいのかわからず……(第1話)。
乗っていた惑星間航行ロケットが故障し、生き残ったのはオレ1人。水、食料ともに底をついたが、救助艇がくるのは23日後だという。やっとの思いで不時着した地球型の惑星。そこには低い段階ながらも文明があり、ミノアというかわい子ちゃんとも出会うことができた。ところが、その文明というのが実は……(第2話)。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?