Google Apps Scriptで指定した日時に処理を行わせるようにしてみます。
使い方・注意点
前回の記事ではスプレッドシートを操作するためにスプレッドシートからエディタを開きましたが、今回はGoogleアカウントにログインして、Google Apps Scriptのエディタに直接アクセスして使用します。
指定した時間から15分前後の誤差がある場合があるようです。
そのため、厳密な時間指定はできないようなので注意が必要です。
スクリプトファイルが不要になって削除しても、トリガーは残ります。
そのため、例えば毎週処理を実行するような指定をしていた場合、スクリプトファイル削除後も処理は実行され続けます。
この記事の最後に記載していますが、スクリプトファイルを削除する前にトリガーを削除するようにしてください。
X秒/分/時間後に実行する
一定時間後に処理を実行したい場合、after()を使います。
JavaScript
function setTrigger() { // 10分後に実行 ScriptApp.newTrigger('sendMail').timeBased().after(10 * 60 * 1000).create(); } // 実行する関数 function sendMail() { // 自分へのメールの送信 var email = Session.getActiveUser().getEmail(); var subject = 'タイトル'; var body = '本文'; GmailApp.sendEmail(email, subject, body); }
newTrigger(function) | トリガー実行時に処理する関数を指定。 |
---|---|
after(ms) | 何ミリ秒後にトリガーが実行されるかを指定。 引数の指定単位はミリ秒。 |
create() | トリガーを作成。 |
指定日時に実行
指定した日時に処理を実行したい場合、at()を使います。
JavaScript
function setTrigger() { // 2017年2月21日 7時30分に実行 var triggerDay = new Date(2016, (2 - 1), 21, 7, 30, 0, 0); ScriptApp.newTrigger('sendMail').timeBased().at(triggerDay).create(); } // 実行する関数 function sendMail() { // 自分へのメールの送信 var email = Session.getActiveUser().getEmail(); var subject = 'タイトル'; var body = '本文'; GmailApp.sendEmail(email, subject, body); }
at(date) | トリガーの実行時期を指定。 引数は日付型で指定。 |
---|
指定日の深夜に実行
JavaScript
function setTrigger() { // 2017年2月21日の深夜に実行 ScriptApp.newTrigger('sendMail').timeBased().atDate(2017, 2, 21).create(); } // 実行する関数 function sendMail() { // 自分へのメールの送信 var email = Session.getActiveUser().getEmail(); var subject = 'タイトル'; var body = '本文'; GmailApp.sendEmail(email, subject, body); }
atDate(year, month, day) | トリガーの実行する日を指定。 引数は年,月,日をカンマ区切りで指定。 |
---|
何日かおきに指定した時間に実行
何日かおきに指定した時間に実行する場合、atHour()とeveryDays()を使います。
毎日(1日おき)の場合はeveryDays(1)とします。
JavaScript
function setTrigger() { // 毎日15時に実行 ScriptApp.newTrigger('sendMail').timeBased().atHour(15).everyDays(1).create(); } // 実行する関数 function sendMail() { // 自分へのメールの送信 var email = Session.getActiveUser().getEmail(); var subject = 'タイトル'; var body = '本文'; GmailApp.sendEmail(email, subject, body); }
atHour(hour) | トリガーの実行する時間を指定。 |
---|---|
everyDays(n) | 何日おきにトリガーを実行するかを指定。 |
何週かおきに指定した曜日の時間に実行
何週かおきに指定した曜日に実行する場合、everyWeeks()とonWeekDay()を使います。
JavaScript
function setTrigger() { // 毎週月曜10時に実行 ScriptApp.newTrigger('sendMail').timeBased().atHour(10).everyWeeks(1).onWeekDay(ScriptApp.WeekDay.MONDAY).create(); } // 実行する関数 function sendMail() { // 自分へのメールの送信 var email = Session.getActiveUser().getEmail(); var subject = 'タイトル'; var body = '本文'; GmailApp.sendEmail(email, subject, body); }
everyWeeks(n) | 何週おきにトリガーを実行するかを指定。 |
---|---|
onWeekDay(day) | トリガーが実行される曜日を指定。 |
トリガーの解除
登録されているトリガーをすべて削除します。
JavaScript
// トリガーの全削除 function deleteTrigger() { var triggers = ScriptApp.getProjectTriggers(); for(var i=0; i < triggers.length; i++) { Logger.log(triggers[i].getUniqueId()); ScriptApp.deleteTrigger(triggers[i]); } }
etProjectTriggers() | 現在のプロジェクトに関連付けられている全てのトリガーを取得 |
---|---|
getUniqueId() | トリガーを区別する一意の識別子を返す。 |
deleteTrigger(trigger) | 指定したトリガーを削除。 |
【参考サイト】
- Class ScriptApp | Apps Script | Google Developers
- Class Trigger | Apps Script | Google Developers
- Class ClockTriggerBuilder | Apps Script | Google Developers
- Google Apps Scriptでトリガーを活用しよう | eye4brain
コメントが承認されるまで時間がかかります。