シンプルなトリガー

トリガーを使用すると、ドキュメントを開くなどの特定のイベントが発生すると、Apps Script が自動的に関数を実行できます。シンプル トリガーは、Apps Script に組み込まれている予約済みの関数のセットです。たとえば、ユーザーが Google ドキュメント、スプレッドシート、スライド、フォームのファイルを開くと、関数 onOpen(e) が実行されます。インストール可能なトリガーは、単純なトリガーよりも多くの機能を提供しますが、使用前に有効にする必要があります。どちらのタイプのトリガーでも、Apps Script は、トリガーされた関数に、イベントが発生したコンテキストに関する情報が含まれるイベント オブジェクトを渡します。

スタートガイド

単純なトリガーを使用するには、予約済みの関数名のいずれかを使用する関数を作成するだけです。

  • onOpen(e) は、ユーザーが編集権限のあるスプレッドシート、ドキュメント、プレゼンテーション、フォームを開いたときに実行されます。
  • onInstall(e) は、ユーザーが Google ドキュメント、スプレッドシート、スライド、フォーム内からエディタ アドオンをインストールすると実行されます。
  • onEdit(e) は、ユーザーがスプレッドシートの値を変更したときに実行されます。
  • onSelectionChange(e) は、ユーザーがスプレッドシート内の選択内容を変更したときに実行されます。
  • doGet(e) は、ユーザーがウェブアプリにアクセスしたとき、またはプログラムがウェブアプリに HTTP GET リクエストを送信したときに実行されます。
  • doPost(e) は、プログラムがウェブアプリに HTTP POST リクエストを送信したときに実行されます。

上記の関数名の e パラメータは、関数に渡されるイベント オブジェクトです。このオブジェクトには、トリガーがトリガーされたコンテキストに関する情報が含まれますが、使用は任意です。

制限事項

単純なトリガーは、ユーザーに承認を求めずに自動的に起動するため、いくつかの制限があります。

  • スクリプトは、Google スプレッドシート、スライド、ドキュメント、フォームのいずれかのファイルにバインドされているか、これらのアプリケーションのいずれかを拡張するアドオンである必要があります。
  • ファイルが読み取り専用(表示またはコメント)モードで開かれた場合、実行されません。
  • スクリプトの実行や API リクエストによってトリガーが実行されることはありません。たとえば、セルを編集するために Range.setValue() を呼び出しても、スプレッドシートの onEdit トリガーは実行されません。
  • 認証を必要とするサービスにはアクセスできません。たとえば、Gmail サービスでは認証が必要になるため、単純なトリガーではメールを送信できませんが、単純なトリガーでは匿名の言語サービスを使用してフレーズを翻訳できます。
  • バインドされているファイルは変更できますが、他のファイルにはアクセスできません。他のファイルにアクセスするには認可が必要になります。
  • 複雑なセキュリティ制限に応じて、現在のユーザーの ID を特定できる場合とできない場合があります。
  • 30 秒を超えて実行することはできません。
  • 特定の状況では、エディタ アドオンは、onOpen(e)onEdit(e) のシンプルなトリガーを認可なしモードで実行します。この場合、追加の複雑さが発生します。詳しくは、アドオンの承認ライフサイクルに関するガイドをご覧ください。
  • シンプル トリガーには、Apps Script トリガーの割り当て上限が適用されます。

これらの制限は doGet(e) または doPost(e) には適用されません。

onOpen(e)

onOpen(e) トリガーは、ユーザーが編集権限を持つスプレッドシート、ドキュメント、プレゼンテーション、フォームを開いたときに自動的に実行されます。(トリガーは、フォームに回答するときには実行されず、フォームを開いて編集するときにのみ実行されます)。onOpen(e) は、Google スプレッドシート、スライド、ドキュメント、フォームにカスタムのメニュー項目を追加する場合によく使用されます。

triggers/triggers.gs
/**
 * The event handler triggered when opening the spreadsheet.
 * @param {Event} e The onOpen event.
 * @see https://developers.google.com/apps-script/guides/triggers#onopene
 */
function onOpen(e) {
  // Add a custom menu to the spreadsheet.
  SpreadsheetApp.getUi() // Or DocumentApp, SlidesApp, or FormApp.
      .createMenu('Custom Menu')
      .addItem('First item', 'menuItem1')
      .addToUi();
}

onInstall(e)

onInstall(e) トリガーは、ユーザーが Google ドキュメント、スプレッドシート、スライド、フォーム内からエディタ アドオンをインストールすると自動的に実行されます。ユーザーが Google Workspace Marketplace ウェブサイトからアドオンをインストールしても、トリガーは実行されません。onInstall(e) の機能には制限があります。詳しくは、認可をご覧ください。onInstall(e) の最も一般的な用途は、onOpen(e) を呼び出してカスタム メニューを追加することです。アドオンがインストールされている場合、ファイルはすでに開かれているため、ファイルを再度開かない限り、onOpen(e) は自動的に実行されません。

trigger/trigger.gs
/**
 * The event handler triggered when installing the add-on.
 * @param {Event} e The onInstall event.
 * @see https://developers.google.com/apps-script/guides/triggers#oninstalle
 */
function onInstall(e) {
  onOpen(e);
}

onEdit(e)

onEdit(e) トリガーは、ユーザーがスプレッドシート内の任意のセルの値を変更すると自動的に実行されます。ほとんどの onEdit(e) トリガーは、イベント オブジェクトの情報を使用して適切に応答します。たとえば、次の onEdit(e) 関数は、前回編集時を記録するセルにコメントを設定します。

triggers/triggers.gs
/**
 * The event handler triggered when editing the spreadsheet.
 * @param {Event} e The onEdit event.
 * @see https://developers.google.com/apps-script/guides/triggers#onedite
 */
function onEdit(e) {
  // Set a comment on the edited cell to indicate when it was changed.
  const range = e.range;
  range.setNote('Last modified: ' + new Date());
}

onSelectionChange(e)

onSelectionChange(e) トリガーは、ユーザーがスプレッドシート内の選択内容を変更すると自動的に実行されます。このトリガーを有効にするには、トリガーの追加後、およびスプレッドシートを開くたびにスプレッドシートを更新する必要があります。

選択が短時間に複数のセル間を移動すると、レイテンシを減らすために一部の選択変更イベントがスキップされることがあります。たとえば、2 秒以内に複数の選択変更が行われた場合、最初の選択変更と最後の選択変更のみが onSelectionChange(e) トリガーを有効にします。

次の例では、空のセルが選択されている場合、onSelectionChange(e) 関数はセルの背景を赤に設定します。

trigger/trigger.gs
/**
 * The event handler triggered when the selection changes in the spreadsheet.
 * @param {Event} e The onSelectionChange event.
 * @see https://developers.google.com/apps-script/guides/triggers#onselectionchangee
 */
function onSelectionChange(e) {
  // Set background to red if a single empty cell is selected.
  const range = e.range;
  if (range.getNumRows() === 1 &&
    range.getNumColumns() === 1 &&
    range.getCell(1, 1).getValue() === '') {
    range.setBackground('red');
  }
}

doGet(e)doPost(e)

doGet(e) トリガーは、ユーザーがウェブアプリにアクセスしたとき、またはプログラムがウェブアプリに HTTP GET リクエストを送信したときに自動的に実行されます。doPost(e) は、プログラムがウェブアプリに HTTP POST リクエストを送信したときに実行されます。これらのトリガーについては、ウェブアプリHTML サービスコンテンツ サービスのガイドで詳しく説明しています。doGet(e)doPost(e) には上記の制限は適用されません。

使用可能なトリガーの種類

シンプルなトリガーの制限によりニーズを満たせない場合は、代わりにインストール可能なトリガーを使用できます。次の表は、各イベントタイプで使用できるトリガーの種類をまとめたものです。たとえば、Google スプレッドシート、スライド、フォーム、ドキュメントはすべて、シンプルなオープン トリガーをサポートしていますが、インストール可能なオープン トリガーをサポートしているのはスプレッドシート、ドキュメント、フォームのみです。

イベント シンプルなトリガー インストール可能なトリガー
開く
スプレッドシート
スライド
フォーム*
ドキュメント

function onOpen(e)

スプレッドシート
フォーム*
ドキュメント
編集
スプレッドシート

function onEdit(e)

スプレッドシート
選択内容の変更
スプレッドシート

function onSelectionChange(e)

インストール
スプレッドシート
スライド
フォーム
ドキュメント

function onInstall(e)

変更
スプレッドシート
フォームの送信
スプレッドシート
フォーム
時間主導型(時計)
スプレッドシート
スライド
フォーム
ドキュメント
スタンドアロン
Get
スタンドアロン

function doGet(e)

投稿
スタンドアロン

function doPost(e)

* Google フォームのオープン イベントは、ユーザーがフォームを開いて回答したときに発生するのではなく、編集者がフォームを開いて変更したときに発生します。