171
170

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EngraphiaAdvent Calendar 2016

Day 3

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

Last updated at Posted at 2016-12-02

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分にスクリプトを実行させることに成功しました。

171
170
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
171
170

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?