自動的にプログラムを実行するトリガー
トリガー
トリガーとは、GASで作ったプログラムを、何らかのきっかけ(スプレッドシートを開いた時ちとか、編集した時とか)で自動的に実行させる機能のことです。
前回、その1ではスクリプトエディターからトリガーを設定する(インストーラブルトリガー)方法について紹介しました。
今回、その2として、GASのスクリプトでトリガーを設定する方法(シンプルトリガー)を紹介したいと思います。
GASのスクリプトでトリガーを設定することによって、入力された値や条件によってトリガーを変更するなど、プログラムの動きによって柔軟なトリガー設定をすることが出来るようになります!
GASのスクリプトでトリガーを設定する方法
GASのスクリプトでトリガーを設定するには、ScriptサービスのScriptAppクラスのnewTriggerメソッドを使います。
返り値は、TriggerBuilderオブジェクトになります。
スプレッドシートに紐づく動作をきっかけにするトリガーの設定
スプレッドシートの動作に紐づくトリガーを設定するには、TriggerBuilderクラスのforSpreadsheetメソッドを使います。(DocumentsやFormには同じように別のメソッドがあります。)
引数には、SpreadsheetオブジェクトかSpreadsheetIDを指定します。
返り値は、SpreadsheetTriggerBuilderオブジェクトとなります。このクラスに様々なきっかけを検知するメソッドがあります。
SpreadsheetTriggerBuilderクラスのメソッド一覧
関数名 | 説明 |
---|---|
create() | Triggerを作成する |
onChange() | 構造変更や内容変更が発生したときに発動するトリガー |
onEdit() | 編集時に毎回発動するトリガー |
onFormSubmit() | スプレッドシート側から作成したフォーム上でデータが送信されたときに発動するトリガー |
onOpen() | スプレッドシートが起動したときに発動するトリガー |
onChangeメソッド
function createTrigger() {
// spreadsheetId = "***SpreadsheetID***";
// トリガーを作る
ScriptApp.newTrigger("TriggerFunction")
.forSpreadsheet(spreadsheetId )
.onChange() //変更時
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
onEditメソッド
function createTrigger() {
// spreadsheetId = "***SpreadsheetID***";
// トリガーを作る
ScriptApp.newTrigger("TriggerFunction")
.forSpreadsheet(spreadsheetId )
.onEdit() //編集時
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
onFormSubmitメソッド
function createTrigger() {
// spreadsheetId = "***SpreadsheetID***";
// トリガーを作る
ScriptApp.newTrigger("TriggerFunction")
.forSpreadsheet(spreadsheetId )
.onFormSubmit() //フォーム送信時
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
onOpenメソッド
function createTrigger() {
// spreadsheetId = "***SpreadsheetID***";
// トリガーを作る
ScriptApp.newTrigger("TriggerFunction")
.forSpreadsheet(spreadsheetId )
.onOpen() //スプレッドシートを開いた時
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
時限作動式のトリガーを設定する
スプレッドシートやドキュメントなどに関わらず、時間になったらや、一定間隔ごとにスクリプトを起動させたい場合は、TriggerBuilderクラスのtimeBasedメソッドを使います。
返り値は、ClockTriggerBuilderオブジェクトになります。このオブジェクトに時限作動させるためのトリガー設定のメソッドがあります。
ClockTriggerBuilderクラスのメソッド
関数名 | 説明 |
---|---|
create() | トリガーを作成する。 |
after(durationMilliseconds) | トリガー設定後、durationMilliseconds(ミリ秒)経つと発動するトリガー |
at(date) | dateで設定した日付に発動するトリガー |
atDate(year, month, day) | トリガーが指定された日付に起動することを指定します。デフォルトでは深夜(+/- 15分)近くです。 |
atHour(hour) | トリガーが実行されるトリガーの時間を指定します。 |
everyDays(n) | トリガーを毎日実行するように指定しますn。 |
everyHours(n) | n時間ごとにトリガーを実行するように指定します。 |
everyMinutes(n) | トリガーを毎n分実行するように指定します。 |
everyWeeks(n) | 毎週トリガーを実行するように指定しますn。 |
inTimezone(timezone) | トリガーが実行される指定された日付/時刻のタイムゾーンを指定します。 |
nearMinute(minute) | トリガーが実行される分を指定します(プラスマイナス15分)。 |
onMonthDay(day) | トリガーが実行される月の日付を指定します。 |
onWeekDay(day) | トリガーが実行される曜日を指定します。 |
afterメソッド
引数:durationMillisecondsは、ミリ秒で設定します。
function createTrigger() {
// トリガーを作る(10分後に発動する)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.after(10 * 60 * 1000) //10分後(ミリ秒で設定)
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
atメソッド
引数:dateはdateオブジェクトで指定
function createTrigger() {
// トリガーを作る(2020年10月11日に設定)
var date = new Date(2020, 10, 11); //dateオブジェクト生成
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.at(date) //2020年10月11日に設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
atDateメソッド
引数:year,month,dayは、数字で設定します。
function createTrigger() {
// トリガーを作る(2020年10月11日に設定)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.atDate(2020, 10, 11) //2020年10月11日に設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
atHourメソッド
引数:引数には0~23の数字で時間を設定します。
※everyDaysメソッドなど他のメソッドと組み合わせて使います。スクリプトエディターで設定する時の項目と同じ組み合わせが必要です。
function createTrigger() {
// トリガーを作る(3日置きの23時~24時に発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.atHour(23) //23時に設定
.everyDays(3) //3日置きに発動
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
everyDaysメソッド
引数:nは数字を設定、n日置きに発動します。
function createTrigger() {
// トリガーを作る(3日置きに発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.everyDays(3) //3日置きに設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
everyHoursメソッド
引数:nは数字を設定、n時間置きに発動します。
function createTrigger() {
// トリガーを作る(2時間置きに発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.everyHours(2) //2時間置きに設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
everyMinutesメソッド
引数:nは数字を設定、n分置きに発動します。
function createTrigger() {
// トリガーを作る(25分置きに発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.everyMinutes(25) //25分置きに設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
everyWeeksメソッド
引数:nは数字を設定、n週置きに発動します。
onWeekDayメソッドの指定も必要です。
function createTrigger() {
// トリガーを作る(3週置きに発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.everyWeeks(3) //3週置きに設定
.onWeekDay(ScriptApp.WeekDay.FRIDAY) //金曜日に設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
inTimezoneメソッド
引数:timezoneは文字列で指定
function createTrigger() {
// トリガーを作る(タイムゾーンも指定する)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.atDate(2020, 10, 11) //2020年10月11日に設定
.inTimezone("America/Los_Angeles") //タイムゾーン設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
nearMinuteメソッド
引数:minuteは0~59までの数字で設定
function createTrigger() {
// トリガーを作る(5日置きの5時30分くらいに発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.atHour(3)
.nearMinute(30)
.everyDays(5)
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
onMonthDayメソッド
引数:毎月dayの日に発動する
function createTrigger() {
// トリガーを作る(毎月5日に発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.onMonthDay(5) //毎月5日に設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
onWeekDayメソッド
引数:dayは次のように曜日を設定
- 月・・・ScriptApp.WeekDay.MONDAY
- 火・・・ScriptApp.WeekDay.TUESDAY
- 水・・・ScriptApp.WeekDay.WEDNESDAY
- 木・・・ScriptApp.WeekDay.THURSDAY
- 金・・・ScriptApp.WeekDay.FRIDAY
- 土・・・ScriptApp.WeekDay.SATURDAY
- 日・・・ScriptApp.WeekDay.SUNDAY
function createTrigger() {
// トリガーを作る(毎週金曜日に発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.onWeekDay(ScriptApp.WeekDay.FRIDAY) //毎週金曜日に設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
トリガーを削除する方法
スクリプトでトリガーを設定すると、どんどんどんどん溜まっていってしまう可能もあります。
必要無くなったトリガーはきちんと後始末出来るように、トリガーを削除する方法もきちんと確認しておきましょう!
GASのスクリプトでトリガーを設定するには、ScriptサービスのScriptAppクラスのgetProjectTriggersメソッドで削除したいトリガーを取得して、同じくScriptAppクラスのdeleteTriggerメソッドで削除します!
まずは、トリガーを取得する方法からです。
次のコードで予めトリガーが設定されているとします。
function createTrigger() {
// トリガーを作る(毎週金曜日に発動)
ScriptApp.newTrigger("TriggerFunction")
.timeBased()
.onWeekDay(ScriptApp.WeekDay.FRIDAY) //毎週金曜日に設定
.create();
}
function TriggerFunction(){
Logger.log("トリガー起動したよ")
}
- プロジェクトの全てのトリガーを取得する
- 消したいトリガーを取り出す
- トリガーを消す
の流れです。
プロジェクトの全てのトリガーを取得する
これで、プロジェクトに設定されている全てのトリガーが取得出来ます。
変数にぶち込んどきましょう。
function getTrigger() {
// 全てのトリガーを取得する
var triggers = ScriptApp.getProjectTriggers();
}
消したいトリガーを取り出す→3.トリガーを消す
見つけて消すところまで一気に行きます。
function getTrigger() {
// 全てのトリガーを取得する
var triggers = ScriptApp.getProjectTriggers();
// forでトリガーの起動スクリプトの名前を探す
for(var trigger of triggers){
if(trigger.getHandlerFunction() == "getTrigger"){
// 見つかったら消す
ScriptApp.deleteTrigger(trigger);
}
}
}
for文で、取得したトリガーを一つずつ確認します。TriggerクラスのgetHandlerFunctionメソッドを使うことで、そのTriggerに設定されている実行関数の名前を取得出来ますので、それを元に消したいトリガーを特定します。
特定出来たら、ScriptAppクラスのdeleteTriggerメソッドで削除します。
引数に、消したいトリガーオブジェクトを指定します。
まとめ
GASのコードでトリガーを設定する方法を紹介しました!
コメント