GAS関数で設定済トリガーを取得する方法!関数名や種別、登録数を確認(getProjectTriggers)
Google Apps Scriptはスクリプトで記述した関数をトリガー登録して、スケジュール実行やスプレッドシート起動・編集時に実行可能です。
GASで登録されたトリガーを取得して、トリガー登録数や関数名、トリガー種別を確認する方法を解説します。
GASはトリガー実行が便利
Google Apps Script(GAS)はサーバーレスなスクリプトサービスとして、トリガー実行が便利です。
トリガー実行を行うことで、用意したGASスクリプトを色々なタイミングで実行することができます。
例えばスプレッドシートに紐づくコンテナバインドスクリプトでは、スプレッドシートを開いた時や編集・変更時にスクリプトが実行可能です。
さらに、時間ベースのトリガー実行では、10分に1回や1時間に1回といった頻度や、毎日7~8時に実行などスケジュール登録できます。
このように用意したスクリプトをサーバレス環境で自動実行できるのがGASの強みです。
GASのトリガーはスクリプトでも操作可能
Google Apps Script(GAS)のトリガーは通常、GASのスクリプトエディタ上で設定します。
GASスクリプトエディタのメニューにある時計アイコン「トリガー」から設定ページに移動できます。
トリガー設定ページで、GASプロジェクトにある関数をトリガー登録可能です。
ただ、実はGASスクリプトからもトリガーの登録、参照、削除といった操作できるようになっています。
今回はGASトリガー情報を取得する方法を紹介します。
トリガー情報を取得するgetProjectTriggers関数
Google Apps Script(GAS)プロジェクトで設定したトリガー情報を取得するためには、getProjectTriggers関数(メソッド)を利用します。
ScriptApp.getProjectTriggers()
ScriptsAppクラスに用意されているメソッドを実行することで、Triggerオブジェクトの配列を取得できます。
このTriggerオブジェクトにトリガー登録の情報が格納されています。
個々のトリガー登録情報がTriggerオブジェクトの配列として参照できるようになっています。
トリガー登録した関数の設定数の取得方法
トリガー登録されたGoogle Apps Script(GAS)の関数の設定数を取得するためには、Triggerオブジェクトでlengthプロパティを使用します。
getProjectTriggersメソッドで取得したTriggerオブジェクトの配列の要素数をlengthプロパティで取得することで、トリガー登録数が確認可能です。
トリガー登録した関数名を確認するには
トリガー登録されたGoogle Apps Script(GAS)の関数の設定数を取得するためには、TriggerオブジェクトでgetHandlerFunction()メソッドを使用します。
Trigger.getHandlerFunction()
getHandlerFunction()メソッドはトリガー登録された関数名をString型の文字列として返してくれます。
function getTriggerFunctionName(){
//GASプロジェクトに設定したトリガーをすべて取得
const triggers = ScriptApp.getProjectTriggers();
//1つ目のトリガー登録された関数名を取得し、ログ出力
console.log(triggers[0].getHandlerFunction());
}
getHandlerFunction()の戻り値を確認することで、トリガー登録された関数名に応じた、条件分岐などの制御が可能です。
イベント種別やトリガーソースを確認するには
トリガー登録のイベント種別や、トリガーソースもgetProjectTriggersメソッドで取得したTriggerオブジェクトから確認できます。
トリガーのイベント種別はgetEventTypeメソッドで取得できます。
Trigger.getEventType().toString()
なお、実行時にはtoStringメソッドを使い、文字列に変換する必要があります。
イベント種別については、リファレンスページにあるように6つのタイプがあります。
- CLOCK
- ON_OPEN
- ON_EDIT
- ON_FORM_SUBMIT
- ON_CHANGE
- ON_EVENT_UPDATED
いずれもGASスクリプトエディタのGUIで設定可能なものです。
トリガーソースについてはgetTriggerSourceメソッドで確認できます。
Triggers.getTriggerSource().toString()
getEventType同様にgetTriggerSourceもtoStringメソッドで文字列に変換する必要があります。
トリガー発動させるイベントソースは、時間ベースのものに加え、各種Googleサービスを併せた5種類です。
- CLOCK
- SPREADSHEETS
- FORMS
- DOCUMENTS
- CALENDAR
イベント種別とソースの2つの情報から、「スプレッドシートを編集した時」や「Googleドキュメントを起動した時」などの条件が確認可能です。
時間ベースのトリガーを取得するGASサンプルコード
実際に、Google Apps Script(GAS)で時間ベースのトリガー登録した情報を取得するサンプルコードを実演してみます。
このようにtriggerTestという関数を時間ベースで実行するトリガーを用意した状態で、getProjectTriggersメソッドでトリガー情報を取得してみます。
function triggerTest() {
console.log('トリガーのテストです');
}
function outputTrigger(){
//GASプロジェクトに設定したトリガーをすべて取得
const triggers = ScriptApp.getProjectTriggers();
//トリガーの登録数をログ出力
console.log('トリガー数:' + triggers.length);
for(let i=0;i<triggers.length;i++){
//トリガー登録された関数名を取得し、ログ出力
console.log(triggers[i].getHandlerFunction());
//トリガーのイベントタイプを取得し、ログ出力
console.log(triggers[i].getEventType()['CLOCK']);
//トリガーのトリガーソースを取得し、ログ出力
console.log(triggers[i].getTriggerSource().toString());
}
}
ScriptApp.getProjectTriggers()の実行結果をtriggers定数に格納し、それからトリガー登録数やトリガー関数名、イベントタイプ、トリガーソースをログ出力しています。
実際にGASトリガー情報をログ出力するサンプルコードを実行すると、前述したトリガー登録した情報が取得できます。
今回は時間ベースのトリガーだったため、イベントタイプもトリガーソースもどちらもCLOCKが出力されています。
スプレッドシート起動トリガーを取得した場合
先程は時間ベースのトリガーでしたが、続いてスプレッドシートを起動した時のトリガーでも確認したいと思います。
上の画像のようにソースをスプレッドシート、イベントの種類を起動時にして設定しています。
こちらを設定すると、スプレッドシートを起動した際に、Google Apps Script(GAS)のトリガー設定した関数が実行されます。
※先程のtriggerTest関数のログ出力をBrowser.msgboxに変更しています。
よくスプレッドシートにカスタムメニューを設ける際に、起動時のトリガーが設定されます。
スプレッドシートのコンテナバインドスクリプトで先程のGASスクリプトを実行すると、同じようにトリガー情報が取得され、ログ出力されます。
時間ベースのトリガーの場合と、イベントタイプが「ON_OPEN」、イベントソースが「SPREADSHEETS(スプレッドシート)」に変化してきます。
このようにどのようなトリガーが登録されているか、ScriptApp.getProjectTriggers()メソッドで確認可能です。
時間ベースのトリガーの詳細設定は確認不可
ScriptApp.getProjectTriggers()でGoogle Apps Script(GAS)プロジェクトで設定したトリガー情報を確認できました。
しかし、時間ベースのトリガーの場合、トリガー登録した関数名と種別・ソースが「CLOCK(時間)」であるものは確認できるものの、どれぐらいの頻度かの設定情報は確認不可能です。
GASリファレンスも確認しましたが、Triggerオブジェクトから取得できるのは、イベント種別とトリガーソースまでで、詳細な時間まではわからないようになっています。
そのため、GASスクリプトからはトリガー登録した関数名は確認できるものの、時間ベースのトリガーの実行頻度は確認できません。
まとめ・終わりに
今回、Google Apps Script(GAS)のスクリプトエディタで登録したトリガー実行の情報を取得する方法を紹介しました。
GASのトリガー登録情報は、ScriptApp.getProjectTriggers()メソッドで確認可能です。
登録したGAS関数名やイベントタイプやトリガーソースが確認できるようになっています。
スプレッドシートやフォームをイベントソースにした場合はその内容に加え、起動時や編集時、フォーム送信時のタイプも確認できます。
ただ、最もよく使うトリガー実行である時間ベースのスケジュール登録の場合、「CLOCK」ということはわかりますが、実行間隔・頻度まで確認不可能です。
特定の関数名のトリガー実行が登録されているか、GASスクリプトで確認したい場合は、今回紹介した方法で確認してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません