シンプルなトリガー

トリガーを使用すると、ドキュメントを開くなど、特定のイベントが発生したときに、Apps Script が関数を自動的に実行できます。シンプルなトリガーは、ユーザーが Google ドキュメント、スプレッドシート、スライド、フォームのファイルを開いたときに実行される関数 onOpen(e) など、Apps Script に組み込まれた予約済み関数のセットです。インストール可能なトリガーは、単純なトリガーよりも多くの機能を提供しますが、使用前に有効にする必要があります。どちらのタイプのトリガーでも、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) は自動的に実行されません。

triggers/triggers.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) 関数はセルの背景を赤に設定します。

triggers/triggers.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 フォームのオープン イベントは、ユーザーがフォームを開いて回答したときに発生するのではなく、編集者がフォームを開いて変更したときに発生します。