うーんGoogle Apps Scriptの時間ベースのトリガーじゃ正確な時間に実行できない。どうすればいいのかしら?
例 : GASで毎日0:00に実行したい
GoogleAppsScriptのトリガーは時間ベースのトリガーでも1時間のうちどこで実行するかわからない問題があり、正確な時間に実行したくなることがあります。
以下のコードは毎日、明日の0:00時にトリガーを作成します。
function myfunction() {
// 処理
setTrigger()
}
function setTrigger() {
// 今日の日付を取得
const date = new Date();
// 翌日に変換
date.setDate(date.getDate() + 1);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
ScriptApp.newTrigger('myfunction').timeBased().at(date).create();
}
dateはDateオブジェクトのインスタンスなのでこれに日付と時間をセットし、at() の引数として設定します。一旦トリガーをセットすれば myfunction() で setTrigger() が実行されるので毎日正確な時間に指定の関数が実行できます。
まとめ
Google Apps Scriptで正確な時間に関数を実行したい場合は Dateオブジェクトに時間を設定してnewTrigger() を使ってスクリプトでトリガーを作成します。ちなみにさきほどの見出しで解説したコードは毎日指定の時間にトリガーをセットするコードでしたが、これを応用すると「毎日指定した時間から〇時間おきにトリガーをセット」みたいなこともできます。
Google Apps Scriptのトリガーは20個までという制限があるためその点には注意が必要です。以下の記事でスクリプトで無効なトリガーを削除する方法を紹介していますので参考にしてみてください。
Google Apps Scriptの無効なトリガーをスクリプトで削除する
コメント