Google Apps Script (GAS) の ScriptApp.newTrigger()
メソッドは、Google Apps Script でトリガーを設定するために使用される関数です。トリガーは、指定された条件やアクションが発生した時に特定のスクリプト関数を自動的に実行するものです。ScriptApp.newTrigger()
メソッドは、時間ベースのトリガー、Googleフォームの送信時トリガー、スプレッドシートのイベントトリガーなど、さまざまなタイプのトリガーを作成することができます。
newTrigger()の基本的な使用方法
例えば、毎朝6時にmyFunctionという名前の関数が実行されるように設定したい場合、以下のようにコードを書くことができます。
function createTimeDrivenTriggers() {
// 毎日AM 6時に実行されるトリガーを作成
ScriptApp.newTrigger('myFunction')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
トリガーのタイプ
上記の例以外でも、さまざまな条件をトリガーに設定することができます。f
- 時間ベースのトリガー:
.timeBased()
メソッドを使用して設定。定期的にまたは特定の日時に関数を実行するために使用。 - イベントベースのトリガー: 特定のGoogleサービス(例: スプレッドシート、ドキュメント、フォーム)のイベントに基づいて関数を実行。例えば、
.forSpreadsheet(spreadsheet)
メソッドを使用してスプレッドシート関連のトリガーを設定できます。 - カスタムイベントトリガー: Googleカレンダーイベントの変更やGmailの新規メール受信など、Google Apps Scriptがサポートするその他のGoogleサービスに基づいたトリガー。
以下は、主なトリガーの種類とその概要です。
時間ベースのトリガー
- 時間主導型(時間ベースの)トリガー: 一定の時間間隔(分、時間、日または週)ごとや、特定の日時にスクリプトを実行するために設定されます。
イベントベースのトリガー
スプレッドシートトリガー
- onEdit: スプレッドシートのセルが編集されたときに実行されます。
- onChange: スプレッドシートに変更が加えられたとき(例: 行の追加や削除、シートの名前変更など)に実行されます。
- onOpen: スプレッドシートが開かれたときに実行されます。
- onFormSubmit: スプレッドシートに紐づいたフォームが送信されたときに実行されます。
例えば、スプレッドシートに変更が加えられた時に、「muFunction関数」が動作するようにする場合は、次のように記述します。
function createOnChangeTrigger() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //シートを取得
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(ss)
.onChange()
.create();
}
.forSpreadsheet(ss)
メソッドは、このトリガーがどのスプレッドシートに対して作用するかを指定します。ここでは、変数ss
に格納された現在アクティブなスプレッドシートが対象です。.onChange()
メソッドは、トリガーのタイプを「変更時」に設定します。つまり、スプレッドシートに何らかの変更が加えられたとき(例: セルの編集、行や列の追加・削除など)に、指定した関数を実行するようにします。.create()
メソッドで、これらの設定に基づいてトリガーを実際に作成します。
ドキュメントトリガー:
- onOpen: ドキュメントが開かれたときに実行されます。
- onEdit: ドキュメントが編集された時に実行されます。
例えば、ドキュメントが開かれた時にmyFunction()が動作するスクリプトは次のように書きます。
function createOnOpenTrigger() {
var doc = DocumentApp.getActiveDocument(); // ドキュメントを取得
ScriptApp.newTrigger('myFunction')
.forDocument(doc)
.onOpen()
.create();
}
フォームトリガー:
- onFormSubmit: フォームが送信されたときに実行されます。
例えば、フォームが送信された時にmyFunction()が動作するスクリプトは次のように書きます。
function createOnFormSubmitTrigger() {
var form = FormApp.getActiveForm(); // フォームを取得
ScriptApp.newTrigger('myFunction')
.forForm(form)
.onFormSubmit()
.create();
}
カレンダートリガー:
- カレンダーイベントの作成、更新、削除などのカレンダーイベントに基づいて実行されます。(GASでは直接的なカレンダートリガーを設定する機能は提供されていませんが、カレンダーAPIを利用してイベントの変更を検知し、それに基づいてスクリプトを実行することは可能です。)