GAS関数で設定済トリガーを取得する方法!関数名や種別、登録数を確認(getProjectTriggers)

Google Apps Scriptはスクリプトで記述した関数をトリガー登録して、スケジュール実行やスプレッドシート起動・編集時に実行可能です。

GASで登録されたトリガーを取得して、トリガー登録数や関数名、トリガー種別を確認する方法を解説します。

GASはトリガー実行が便利

Google Apps Script(GAS)はサーバーレスなスクリプトサービスとして、トリガー実行が便利です。

トリガー実行を行うことで、用意したGASスクリプトを色々なタイミングで実行することができます。

例えばスプレッドシートに紐づくコンテナバインドスクリプトでは、スプレッドシートを開いた時や編集・変更時にスクリプトが実行可能です。

Google Apps Scriptのトリガー追加すると、設定したスケジュールでスクリプトが自動実行

さらに、時間ベースのトリガー実行では、10分に1回や1時間に1回といった頻度や、毎日7~8時に実行などスケジュール登録できます。

このように用意したスクリプトをサーバレス環境で自動実行できるのがGASの強みです。

GASのトリガーはスクリプトでも操作可能

Google Apps Script(GAS)のトリガーは通常、GASのスクリプトエディタ上で設定します。

GASスクリプトエディタのメニューにある時計アイコン「トリガー」から設定ページに移動できます。

Google Apps Scriptのスクリプトエディタの左メニューにあるトリガーを選択

トリガー設定ページで、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つのタイプがあります。

Google Apps Script(GAS)のScriptApp.getProjectTrigger()メソッドでトリガーを取得後、getEventType()で取得できるトリガーのイベント種別一覧
  1. CLOCK
  2. ON_OPEN
  3. ON_EDIT
  4. ON_FORM_SUBMIT
  5. ON_CHANGE
  6. ON_EVENT_UPDATED

いずれもGASスクリプトエディタのGUIで設定可能なものです。

トリガーソースについてはgetTriggerSourceメソッドで確認できます。

Triggers.getTriggerSource().toString()

getEventType同様にgetTriggerSourceもtoStringメソッドで文字列に変換する必要があります。

トリガー発動させるイベントソースは、時間ベースのものに加え、各種Googleサービスを併せた5種類です。

Google Apps Script(GAS)のScriptApp.getProjectTrigger()メソッドでトリガーを取得後、getTriggerSource()で取得できるトリガーソース一覧のリファレンス
  1. CLOCK
  2. SPREADSHEETS
  3. FORMS
  4. DOCUMENTS
  5. CALENDAR

イベント種別とソースの2つの情報から、「スプレッドシートを編集した時」や「Googleドキュメントを起動した時」などの条件が確認可能です。

時間ベースのトリガーを取得するGASサンプルコード

実際に、Google Apps Script(GAS)で時間ベースのトリガー登録した情報を取得するサンプルコードを実演してみます。

Google Apps Script(GAS)で時間ベースのトリガー実行した設定画面

このようにtriggerTestという関数を時間ベースで実行するトリガーを用意した状態で、getProjectTriggersメソッドでトリガー情報を取得してみます。

Google Apps Script(GAS)でScriptApp.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トリガー情報をログ出力するサンプルコードを実行すると、前述したトリガー登録した情報が取得できます。

Google Apps Script(GAS)でScriptApp.getProjectTriggers()メソッドで全トリガーを取得し、トリガー情報をログ出力するサンプルコードを実行し、設定されたトリガーの関数や種別、イベントソースの情報を出力

今回は時間ベースのトリガーだったため、イベントタイプもトリガーソースもどちらもCLOCKが出力されています。

スプレッドシート起動トリガーを取得した場合

先程は時間ベースのトリガーでしたが、続いてスプレッドシートを起動した時のトリガーでも確認したいと思います。

スプレッドシートを起動した時にコンテナバインドスクリプトのGoogle Apps Scriptの関数を実行するトリガー設定

上の画像のようにソースをスプレッドシート、イベントの種類を起動時にして設定しています。

こちらを設定すると、スプレッドシートを起動した際に、Google Apps Script(GAS)のトリガー設定した関数が実行されます。

スプレッドシートを起動した時にコンテナバインドスクリプトのGoogle Apps Scriptの関数を実行するトリガー設定すると、スプレッドシートを開いた際にGAS関数が実行

※先程のtriggerTest関数のログ出力をBrowser.msgboxに変更しています。

よくスプレッドシートにカスタムメニューを設ける際に、起動時のトリガーが設定されます。

スプレッドシートのコンテナバインドスクリプトで先程のGASスクリプトを実行すると、同じようにトリガー情報が取得され、ログ出力されます。

スプレッドシートの起動時にトリガー実行する設定をGoogle Apps Script(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スクリプトで確認したい場合は、今回紹介した方法で確認してみてください。