GoogleAppsScript

Google Apps Scriptの日毎のトリガーで時間をもっと細かく設定する

Googleスプレッドシート等のGoogle Apps Scriptを指定した時・分に毎日実行させるための方法をまとめます。

日毎のトリガーに設定できるのは単位

Googleドライブで使用できるGoogle Apps Scriptは、トリガーを設定することで様々なタイミングで自動的に実行することができますが、毎日6時のような指定をした場合、実行は時間ぴったりではなく6時から7時の間というアバウトなタイミングになってしまいます。
6時ちょうどや6時1分前のような指定はできないのです。

ここで[日タイマー]ではなく[特定の日時]を選択すると分単位まで指定することもできますが、これだと毎日実行させるには1日ごとにトリガーを設定しなければなりません。

解決方法

実はGoogle Apps Scriptにはトリガーを設定する関数があるので、予め設定しておいた日毎のトリガーから、その日の[特定の日時]のトリガーを設定することで、分単位の時間で毎日スクリプトを実行することが可能になります。

今回は毎日17時59分にスクリプトが実行されるようにしてみましょう。

まずはスクリプトエディタの[リソース][編集][現在のプロジェクトのトリガー]にて、トリガーを設定するための関数を毎日実行するよう設定します。
(目的の時間より前に実行されるよう時間を早めにしてある)
トリガー.jpeg

スクリプトは以下の通り

// その日の17時59分にトリガーを設定
function setTrigger() {
  var triggerDay = new Date();
  triggerDay.setHours(17);
  triggerDay.setMinutes(59);
  ScriptApp.newTrigger("main").timeBased().at(triggerDay).create();
}

// その日のトリガーを削除する関数(消さないと残る)
function deleteTrigger() {
  var triggers = ScriptApp.getProjectTriggers();
  for(var i=0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == "main") {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}

// 実行したいスクリプト本体
function main() {
  deleteTrigger();

  //
  // ここで何かする
  //
}

これで毎日呼び出されるsetTrigger()により、その日の17時59分にmain()を実行するトリガーがセットされ、その結果めでたく毎日17時59分にスクリプトを実行させることに成功しました。