Googleが提供するサービス「Google Apps Script(GAS)」。
GASは、JavaScriptベースのスクリプト言語で、Googleアカウントを持っていれば無料で使えます。
GASを使えば、スプレッドシートやGmailをはじめ、ほかのGoogleのサービスと簡単に連携することができます。
この記事では、指定した時間にGASを実行する、トリガーについて説明します。
トリガーとは
GASには、指定した日時に関数を自動で実行させる「トリガー」という機能があります。
トリガーを使えば、定期的に実行したい処理を自動化することができます。
毎日、LINEに通知を送ることもできます。
トリガーを追加するには、スクリプトエディタで「トリガーを追加」をクリックし、実行したい関数などを指定します。
このトリガーは、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」を実行してください。
実行したら、トリガーが追加されたか確認してみます。
時間ベースのトリガーのタイプが「特定の日時」で、時間が「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度だけ実行するトリガーを追加していくと、プロジェクトのトリガーがどんどん増えていきます。
消したいトリガーが多いと、1つずつ手で消すのは大変ですよね。
トリガーの削除もスクリプトから行えます。
次は、プロジェクト内のすべてのトリガーを消すためのスクリプトです。
//プロジェクト内のすべてのトリガーを削除
const deleteTrigger = () => {
//プロジェクトのすべてのトリガーを取得
const triggers = ScriptApp.getProjectTriggers();
//すべてのトリガーをループ処理
for(const trigger of triggers){
ScriptApp.deleteTrigger(trigger); //トリガーの削除
}
}
getProjectTriggers()は、現在のプロジェクトのすべてのトリガーを返します。
そして、取得したトリガーについてループ処理を行い、deleteTrigger()でトリガーを削除しています。
うまくいかないとき
トリガーを設定したのにうまくいかないときは「タイムゾーン」を確認してみてください。
タイムゾーンは、以下の方法で確認できます。
- マニフェストファイルで確認
- 以前のエディタで確認
マニフェストファイルで確認する
タイムゾーンの確認の方法は、スクリプトエディタで左の「歯車マーク」をクリックし、『「appsscript.json」マニフェストファイルをエディタで表示する』にチェックを入れます。
「<>エディタ」をクリックして「appsscript.json」を開き、「timeZone」が「Asia/Tokyo」になっているか確認します。違う場合は「Asia/Tokyo」に変更してください。
以前のエディタで確認する
「以前のエディタ」を使用して確認する方法もあります。
以前のエディタにして、「ファイル」→「プロジェクトのプロパティ」から「タイムゾーン」が「(GMT+09:00)東京」になっているか確認してください。
まとめ
GASには、自動で関数を実行するトリガーという機能があります。
手動でトリガーを追加する場合、実行する時間の細かい指定ができません。
実行する時間を細かく指定したい場合は、スクリプトでトリガーを追加します。