見出し画像

毎日決まった時間にGAS実行[GAS]

検索してみたところ、「毎日決まった時間にGASを実行する」を解説するweb記事はたくさんありました。
幾つかの記事を参考にさせていただき、自分が使いやすいように改良したものが下記の「setTrigger」関数です。

function myFunction() {
  console.log("setTriggerのテストです");
}


function setTrigger() {

  const funcName = "myFunction";
  const time     = "09:18";

  const triggers = ScriptApp.getProjectTriggers();

  for (const trigger of triggers) {
    if (trigger.getHandlerFunction() === funcName) {
      ScriptApp.deleteTrigger(trigger);
    }
  }

  const hour   = parseInt(time.split(":")[0]);
  const minute = parseInt(time.split(":")[1]);

  const date = new Date();
  date.setHours(hour);
  date.setMinutes(minute);
  ScriptApp.newTrigger(funcName).timeBased().at(date).create();

}

色々なスクリプトに転用できるよう、最初の2行→

  const funcName = "myFunction";
  const time     = "09:18";

で「実行したいファンクション名」「実行したい時刻」を代入するだけ、という構造にしました。

1日に数回実行する場合は、「実行したい時刻」を配列にすることにしました。

function myFunction2() {
  console.log("複数setTriggerのテストです");
}

function setTriggers() {

  const funcName = "myFunction2";
  const times    = ["09:32", "10:15", "11:00", "17:49"];

  const triggers = ScriptApp.getProjectTriggers();

  for (const trigger of triggers) {
    if (trigger.getHandlerFunction() === funcName) {
      ScriptApp.deleteTrigger(trigger);
    }
  }

  for (const time of times) {

    const hour   = parseInt(time.split(":")[0]);
    const minute = parseInt(time.split(":")[1]);

    const date = new Date();
    date.setHours(hour);
    date.setMinutes(minute);
    ScriptApp.newTrigger(funcName).timeBased().at(date).create();

  }
}

上記スクリプトを記述し、関数「setTrigger」「setTriggers」にトリガーを設定します。
「実行したい時刻」より後にトリガーを設定すると意図しない時刻に実行されるようですので、午前0-1時が良いでしょう。

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