インストール可能なトリガー

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

シンプルなトリガーと同様に、インストール可能なトリガーを使用すると、ドキュメントを開くなどの特定のイベントが発生したときに、Apps Script で自動的に関数を実行できます。ただし、インストール可能なトリガーは、単純なトリガーよりも柔軟性が高く、認可を必要とするサービスを呼び出すことができます。また、時間駆動型(クロック)トリガーなど、いくつかの種類のイベントも提供しており、プログラムで制御できます。シンプルなトリガーとインストール可能なトリガーの両方で、Apps Script はトリガーされた関数に、イベントが発生したコンテキストに関する情報を含むイベント オブジェクトを渡します。

制限事項

インストール可能なトリガーは、単純なトリガーよりも柔軟性が高くなりますが、いくつかの制限があります。

  • 読み取り専用(表示またはコメント)モードでファイルを開いても、実行されることはありません。スタンドアロン スクリプトでトリガーを正しく実行するには、少なくともスクリプト ファイルの閲覧権限が必要です。
  • スクリプトの実行と API リクエストによってトリガーが実行されることはありません。たとえば、FormResponse.submit() を呼び出して新しいフォーム レスポンスを送信した場合、フォームの送信トリガーは実行されません。

  • インストール可能なトリガーは常に、それらを作成したユーザーのアカウントで実行されます。たとえば、インストール可能なオープン トリガーを作成すると、同僚がドキュメントを開いたときに実行されます(同僚が編集権限を持っている場合)。ただし、これはアカウントとして実行されます。つまり、ドキュメントを開いたときにメールを送信するトリガーを作成すると、そのドキュメントは常に自分のアカウントから送信されます(必ずしもドキュメントを開いたアカウントであるとは限りません)。ただし、アカウントごとにインストール可能なトリガーを作成すると、各アカウントから 1 通のメールが送信されます。

  • 1 つ目のアカウントでは引き続きこのトリガーを有効にできますが、特定のアカウントで 2 つ目のアカウントからインストールされたトリガーを確認することはできません。

  • インストール可能なトリガーには、Apps Script のトリガーの割り当て上限が適用されます。

時間に基づくトリガー

時間ドリブン トリガー(クロック トリガーとも呼ばれます)は、Unix の cron ジョブに似ています。時間ドリブン トリガーを使用すると、スクリプトを特定の時間または定期的な間隔で、1 分に 1 回、または月に 1 回実行できます。(アドオンは、時間ごとにトリガーされる最大で 1 時間に 1 回を使用できます)。この時間はわずかにランダム化されます。たとえば、午前 9 時の繰り返しトリガーを作成する場合、Apps Script は午前 9 時から午前 10 時の時間を選択し、そのタイミングが日ごとに一定になるようにします。これにより、トリガーが再び発動する 24 時間が経過します。

イベント ドリブン トリガー

インストール可能なイベント ドリブン トリガーは、onOpen() のような単純なトリガーと概念的によく似ていますが、追加のイベントに応答することがあり、動作が異なります。

たとえば、Google スプレッドシートのインストール可能なオープン トリガーは、単純な onOpen() トリガーと同様に、編集権限のあるユーザーがスプレッドシートを開くと常に有効になります。ただし、インストール可能なバージョンは、承認を必要とするサービスを呼び出すことができます。インストール可能なバージョンは、トリガーを作成したユーザーの承認で実行されます。編集権限のある別のユーザーがスプレッドシートを開いた場合でも同じです。

アプリ用のインストール可能なトリガーはいくつかあります。 Google Workspace

  • インストール権限のあるオープントリガーは、編集権限のあるスプレッドシート、ドキュメント、またはフォームをユーザーが開くと実行されます。
  • ユーザーがスプレッドシートの値を変更すると、インストール可能な編集トリガーが実行されます。
  • インストール可能な変更トリガーは、ユーザーが新しいシートを追加する、列を削除するなど、スプレッドシート自体の構造を変更したときに実行されます。
  • ユーザーがフォームに回答すると、インストール可能なフォーム送信トリガーが実行されます。フォーム送信トリガーには 2 つのバージョンがあります。1 つは Google フォーム自体用、もう 1 つはフォームがスプレッドシートに送信される場合はスプレッドシート用です。
  • インストール可能なカレンダーの予定トリガーは、ユーザーのカレンダーの予定が作成、編集、削除されたときに実行されます。

スタンドアロン スクリプトとバインド スクリプトでは、インストール可能なトリガーを使用できます。たとえば、スタンドアロン スクリプトは、TriggerBuilder.forSpreadsheet(key) を呼び出してスプレッドシートの ID を渡すことにより、任意の Google スプレッドシート ファイルに対してインストール可能なトリガーをプログラムで作成できます。

トリガーの手動管理

スクリプト エディタでインストール可能なトリガーを手動で作成するには、次の手順を行います。

  1. Apps Script プロジェクトを開きます。
  2. 左側のトリガー アイコン をクリックします。
  3. 右下の [トリガーを追加] をクリックします。
  4. 作成するトリガーのタイプを選択して構成します。
  5. [保存] をクリックします。

トリガーのプログラマティックな管理

スクリプト サービスを使用して、トリガーをプログラムで作成および削除することもできます。まず、TriggerBuilder を返す ScriptApp.newTrigger(functionName) を呼び出します。

次の例は、2 つの時間ドリブンのトリガーを作成する方法を示しています。1 つは 6 時間ごとに発生し、もう 1 つは毎週月曜日の午前 9 時に発動します(スクリプトが設定されているタイムゾーン)。

trigger/triggers.gs
/**
 * Creates two time-driven triggers.
 * @see https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers
 */
function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyHours(6)
      .create();
  // Trigger every Monday at 09:00.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(9)
      .create();
}

次の例は、スプレッドシートにインストール可能なオープン トリガーを作成する方法を示しています。シンプルな onOpen() トリガーとは異なり、インストール可能なトリガーのスクリプトをスプレッドシートにバインドする必要はありません。このトリガーをスタンドアロン スクリプトから作成するには、SpreadsheetApp.getActive()SpreadsheetApp.openById(id) の呼び出しに置き換えます。

trigger/triggers.gs
/**
 * Creates a trigger for when a spreadsheet opens.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function createSpreadsheetOpenTrigger() {
  const ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

既存のインストール可能なトリガーをプログラムで変更するには、トリガーを削除して新しいトリガーを作成する必要があります。トリガーの ID が以前に保存されている場合は、次の関数に引数として ID を渡すことで削除できます。

trigger/triggers.gs
/**
 * Deletes a trigger.
 * @param {string} triggerId The Trigger ID.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function deleteTrigger(triggerId) {
  // Loop over all triggers.
  const allTriggers = ScriptApp.getProjectTriggers();
  for (let index = 0; index < allTriggers.length; index++) {
    // If the current trigger is the correct one, delete it.
    if (allTriggers[index].getUniqueId() === triggerId) {
      ScriptApp.deleteTrigger(allTriggers[index]);
      break;
    }
  }
}

トリガーのエラー

インストール可能なトリガーが起動しても、関数が例外をスローするか、正常に実行できない場合、画面にエラー メッセージは表示されません。時間ベースのトリガーが実行されるか、別のユーザーがフォーム送信トリガーをアクティブにすると、ユーザーがコンピュータにアクセスできないようになります。

代わりに、Apps Script から次のようなメールが届きます。

From: apps-scripts-notifications@google.com
Subject: Summary of failures for Google Apps Script
Your script has recently failed to finish successfully.
A summary of the failure(s) is shown below.

このメールには、トリガーを無効化または再構成するためのリンクが記載されています。スクリプトが Google スプレッドシート、ドキュメント、フォームにバインドされている場合、メールにはそのファイルへのリンクも含まれます。これらのリンクを使用することで、トリガーを無効にするか、スクリプトを編集してバグを修正できます。

Google アカウントに関連付けられているすべてのトリガーを確認して、不要になったトリガーを無効にする手順は次のとおりです。

  1. script.google.com に移動します。
  2. 左側にある [トリガー] をクリックします。
  3. トリガーを削除するには、トリガーの右側にあるその他アイコン > [トリガーを削除] をクリックします。

アドオン内のインストール可能なトリガー

アドオンでインストール可能なトリガーを使用する方法については、アドオン トリガーをご覧ください。