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過ぎに実行できるようになりました。
今日だけ時間をずらしたい場合は、手動でプロパティの値を変更すればできます。
セットする時間もコードの中に書くのではなく、プロパティとして持てば、簡単に時間変更が可能です。
以上です。
ディスカッション
コメント一覧
まだ、コメントがありません