GASのトリガーを「毎日19時30分」のように「分単位」まで時間指定する方法【コピペ可!】

Google Apps Scriptの時間設定トリガーはデフォルトでは「1:00-2:00の間のどこか」といった具合で、1時間単位で指定することはできますが、分単位まで指定することができません。
この記事では、強制的に分単位で設定する方法について記述します。

目次

トリガーの基本概念と時間指定の課題

まず、GASで利用可能なトリガーの基本的な種類と、それぞれの特徴を理解しておくことが重要です。通常、時間主導型トリガーは「日次」「週次」「月次」などの単位で設定できますが、時間指定は1時間単位でしか行えません。そのため、特定の分にスクリプトを実行したい場合、標準の設定では不可能です。

しかし、Google Apps Scriptでは、トリガー自体をGASから設定する処理を組むことが可能であり、その場合は分単位の指定することが可能になります。

トリガーの設定コードの紹介

以下に、分単位でトリガーを設定するためのサンプルコードを紹介します。このコードは、指定した時間(例えば、翌日の9:59)にスクリプトを実行するためのトリガーを設定するものです。

// 翌日9:59にトリガーをセットする処理
function setMinTrigger() {
  let triggers = ScriptApp.getScriptTriggers();
  for(let trigger of triggers){
    let funcName = trigger.getHandlerFunction();
    if(funcName == 'exampleFunction'){                                     //function名を定期実行したい関数名に変更する
      ScriptApp.deleteTrigger(trigger);
    }
  }
  let now = new Date();
  let y = now.getFullYear();
  let m = now.getMonth();
  let d = now.getDate();
  let date = new Date(y, m, d+1, 9, 59);
  ScriptApp.newTrigger('exampleFunction').timeBased().at(date).create();   //function名を定期実行したい関数名に変更する
}





// 定期実行したい処理
function exampleFunction() {
  /* ----------------------------
  // ここに定期実行したい内容をかく
  ------------------------------*/
  setMinTrigger();   //上記内容が処理し終える度に、翌日9:59にトリガーがセットする
}

たったこれだけで完了です。

setMinTrigger関数内の

  let now = new Date();
  let y = now.getFullYear();
  let m = now.getMonth();
  let d = now.getDate();
  let date = new Date(y, m, d+1, 9, 59);
  ScriptApp.newTrigger('copyValueToLastRow').timeBased().at(date).create();

の部分を修正すれば、時間指定も変化させることができます。

例えば、2日置きの23:30に起動したい場合は、

// 翌々日23:00にトリガーをセットする処理
function setMinTrigger() {
  let triggers = ScriptApp.getScriptTriggers();
  for(let trigger of triggers){
    let funcName = trigger.getHandlerFunction();
    if(funcName == 'exampleFunction'){
      ScriptApp.deleteTrigger(trigger);
    }
  }
  let now = new Date();
  let y = now.getFullYear();
  let m = now.getMonth();
  let d = now.getDate();
  let date = new Date(y, m, d+2, 23, 00);
  ScriptApp.newTrigger('exampleFunction').timeBased().at(date).create();
}




// 定期実行したい処理
function exampleFunction() {
  /* ----------------------------
  // ここに定期実行したい内容をかく
  ------------------------------*/
  setMinTrigger(); //上記内容が処理し終える度に、翌日9:59にトリガーがセットする
}

コードの詳細な解説

トリガーのクリアと再設定

まず、setMinTrigger関数では、既存のトリガーを確認し、同じ関数名で設定されたトリガーがあれば削除します。これにより、重複したトリガーの設定を防ぎ、管理をシンプルにします。

日付と時間の設定

次に、Dateオブジェクトを使用して、翌日の特定の時間(9:59)を設定します。new Date(y, m, d+1, 9, 59)で、翌日の9:59に実行されるようにトリガーを設定しています。この部分が、分単位での時間指定を可能にしている要点です。

定期的なトリガーの再設定

copyValueToLastRow関数は、定期的に実行したい処理を記述する場所です。この関数の最後で、再度setMinTrigger関数を呼び出すことで、処理が終わるたびに翌日の9:59にトリガーが再設定されます。これにより、毎日同じ時間に処理を実行させることができます。

より柔軟なスケジュール設定のための応用例

この方法を応用すれば、より複雑なスケジュールや特定の時間帯に実行したい処理のトリガーを柔軟に設定することが可能です。例えば、特定の曜日だけ異なる時間に実行したり、特定の条件を満たしたときにのみトリガーを設定することもできます。

よくある質問とトラブルシューティング

GASでトリガーの日時指定はできますか?

このコードを使用すれば、GASのトリガーを特定の日時に設定することが可能です。標準の設定では分単位の指定ができませんが、この方法なら可能になります。

GASのトリガーは時差を指定できますか?

標準のGASでは時差を設定する機能はありませんが、スクリプト内で計算を行い、異なるタイムゾーンに合わせて日時を設定することは可能です。

GASのトリガーの実行時間はずれることがありますか?

Googleサーバーの負荷やトリガーの登録状況により、実行時間がわずかにずれることがあります。この場合も、再設定のロジックを使って確実に再トリガーを設定することで、安定した実行が可能です。

GASのトリガーの編集時と変更時の違いは何ですか?

編集時はトリガーの既存の設定内容を変更する際に使用し、変更時は新しいトリガーを設定する際に使用します。

まとめ

GASを使ったスクリプトの自動化は非常に便利ですが、トリガーの設定においては時間指定が1時間単位であることがしばしば制約となります。本記事で紹介した方法を使えば、分単位での細かい時間指定が可能になり、より柔軟なスケジュール管理が可能となります。ぜひ、この方法を活用して、GASによる自動化をさらに進化させてください。

目次