【GAS】指定した時間に実行するトリガーを追加する方法

notepc-on-desk プログラミング

Googleが提供するサービス「Google Apps Script(GAS)」。

GASは、JavaScriptベースのスクリプト言語で、Googleアカウントを持っていれば無料で使えます。

GASを使えば、スプレッドシートやGmailをはじめ、ほかのGoogleのサービスと簡単に連携することができます。

この記事では、指定した時間にGASを実行する、トリガーについて説明します。

トリガーとは

GASには、指定した日時に関数を自動で実行させる「トリガー」という機能があります。

トリガーを使えば、定期的に実行したい処理を自動化することができます。

毎日、LINEに通知を送ることもできます。

トリガーを追加するには、スクリプトエディタで「トリガーを追加」をクリックし、実行したい関数などを指定します。

event-line-10

このトリガーは、sendMailという関数を、毎日午後6時~7時に実行します。

この方法の場合、実行する時間には、1時間の幅があります。

例えば、「午後6時15分に実行したい」と思っても、「午後6時~7時」という指定しかできません。

実行するのが、おおよその時間でいいなら問題ないですが、分まで指定して実行したい場合には、この方法だと難しいです。

トリガーで正確な時間を指定する

決まった時間に実行するには、スクリプトからトリガーを追加します。

次のスクリプトは、「main関数を今日の18時30分に実行する」トリガーを追加します。

//トリガーを追加する
const setTrigger = () => {
  //トリガーの時間を設定
  const triggerDay = new Date();
  triggerDay.setHours(18);   //18時
  triggerDay.setMinutes(30); //30分 

  ScriptApp.newTrigger("main")
      .timeBased()
      .at(triggerDay)
      .create();
}

//実行させたいメイン関数
const main = () => {
  console.log("実行されました");
}

スクリプトエディタに、入力して「setTrigger」を実行してください。

実行したら、トリガーが追加されたか確認してみます。

trigger1
trigger2

時間ベースのトリガーのタイプが「特定の日時」で、時間が「18:30」になっていますね。

これで、今日の18時30分に実行されるトリガーを追加できました。

トリガーの追加方法の説明

トリガーを追加しているのが、ScriptAppクラスのnewTriggerメソッドです。

トリガーで実行したい関数名を、newTrigger()の引数に渡します。

timeBased()で時間ベースのトリガーを指定して、at()にトリガーを実行する時間を渡します。

ScriptApp.newTrigger("main") //実行する関数
    .timeBased()             //時間ベースを指定
    .at(triggerDay)          //実行させる時間を指定
    .create();               //トリガーを追加

今回は、at()でトリガーの時間を指定しましたが、それ以外の方法もあります。

after(ミリ秒):今から、ミリ秒後に実行するトリガーを追加

everyMinutes(n):n分おきに実行するトリガーを追加(n=1、5、10、15、30の数値で指定)

onWeekDay(曜日):実行する曜日を指定したトリガーを追加

main関数を実行するトリガーを追加する使用例です。

//10分後に実行するトリガー
ScriptApp.newTrigger("main")
    .timeBased()
    .after(10 * 60 * 1000)
    .create();
//5分おきに実行するトリガー
ScriptApp.newTrigger("main")
    .timeBased()
    .everyMinutes(5)
    .create();
//毎週金曜日の午前10時~11時に実行するトリガー
ScriptApp.newTrigger("main")
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.FRIDAY)
    .atHour(10)
    .create();

トリガーを削除する

スクリプトを使って、トリガーを追加することができました。

しかし、1度だけ実行するトリガーを追加していくと、プロジェクトのトリガーがどんどん増えていきます。

trigger3

消したいトリガーが多いと、1つずつ手で消すのは大変ですよね。

トリガーの削除もスクリプトから行えます。

次は、プロジェクト内のすべてのトリガーを消すためのスクリプトです。

//プロジェクト内のすべてのトリガーを削除
const deleteTrigger = () => {
  //プロジェクトのすべてのトリガーを取得
  const triggers = ScriptApp.getProjectTriggers();

  //すべてのトリガーをループ処理
  for(const trigger of triggers){
    ScriptApp.deleteTrigger(trigger);  //トリガーの削除
  }
}

getProjectTriggers()は、現在のプロジェクトのすべてのトリガーを返します。

そして、取得したトリガーについてループ処理を行い、deleteTrigger()でトリガーを削除しています。

うまくいかないとき

トリガーを設定したのにうまくいかないときは「タイムゾーン」を確認してみてください。

タイムゾーンは、以下の方法で確認できます。

  • マニフェストファイルで確認
  • 以前のエディタで確認

マニフェストファイルで確認する

タイムゾーンの確認の方法は、スクリプトエディタで左の「歯車マーク」をクリックし、『「appsscript.json」マニフェストファイルをエディタで表示する』にチェックを入れます。

project-setting

「<>エディタ」をクリックして「appsscript.json」を開き、「timeZone」が「Asia/Tokyo」になっているか確認します。違う場合は「Asia/Tokyo」に変更してください。

select-timezone

以前のエディタで確認する

「以前のエディタ」を使用して確認する方法もあります。

event-line-9

以前のエディタにして、「ファイル」→「プロジェクトのプロパティ」から「タイムゾーン」が「(GMT+09:00)東京」になっているか確認してください。

まとめ

GASには、自動で関数を実行するトリガーという機能があります。

手動でトリガーを追加する場合、実行する時間の細かい指定ができません。

実行する時間を細かく指定したい場合は、スクリプトでトリガーを追加します。

タイトルとURLをコピーしました