GoogleAppsScriptで定時実行する

毎日、同じ時間に実行したい

GoogleAppsScriptで毎日1回、特定の時間に実行したいことはよくありますが、標準機能の日時のトリガー設定は時間単位しかできません。

トリガーを 午前0時~1時にセットすると、何分に実行されるかわかりません。(セットしたトリガーがはじめに午前0時13分に実行すると以降も同じ時間に実行してるっぽいですが、明示的に指定ができません。)

GASの中でトリガーを設定できる

GoogleAppsScriptのコードでトリガーを設定できる関数があります。

日時のトリガーを設定することで、決まった時間に実行できそうです。ただし、不要なトリガーを削除する必要もあります。

https://qiita.com/sumi-engraphia/items/465dd027e17f44da4d6a

プロジェクトのプロパティを利用する

GASにはプロジェクト単位でプロパティがあります。プロパティ、つまり属性です。名前と値がセットになったものです。身長:170cm、体重:60kgとか。

ファイループロジェクトのプロパティで一覧を確認できます。GASからこのプロパティを操作できます。

実行する時間をのプロパティにセットする

トリガーを短い時間の間隔で起動し、プロパティの値をみて、処理を実行するかどうかを決めれば、ほぼ希望通りの時間に起動できます。

今回はトリガーを5分間隔にしました。毎日11:30すぎに実行希望です。

/*
毎分実行する処理
11:30を超えたらメール送信する
スクリプトのプロパティに次に実行する日時(11:30)をセットしている
*/
function minuteCron(){
  // cron処理チェック
  var cronCheckTime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyMMddHHmmss');
  var cronTime = PropertiesService.getScriptProperties().getProperty('crontime');
  // 前回、設定した時刻を超えたら
  if(cronCheckTime > cronTime){
    
    myFunction(); // 実行したい処理
    // 明日の時間をセット
    var newCronTime = new Date();
    newCronTime.setDate(newCronTime.getDate() + 1); // 明日の
    newCronTime. setHours(11,30,00); // 11:30に実行
    PropertiesService.getScriptProperties().setProperty('crontime', Utilities.formatDate(newCronTime, 'Asia/Tokyo', 'yyMMddHHmmss'));
  }
}
/*
メール送信処理
*/
function myFunction() {
  // メール送信処理
}

5分おきのトリガー追加

毎日11:30過ぎに実行できるようになりました。

今日だけ時間をずらしたい場合は、手動でプロパティの値を変更すればできます。

セットする時間もコードの中に書くのではなく、プロパティとして持てば、簡単に時間変更が可能です。

以上です。