シンプルなトリガー

トリガーを使用すると、ドキュメントを開くなどの特定のイベントが発生したときに、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 サービスは承認を必要とするため、シンプルなトリガーではメールを送信できませんが、匿名である Language サービスを使用してフレーズを翻訳することはできます。
  • バインドされているファイルは変更できますが、他のファイルにアクセスするには承認が必要なため、アクセスできません。
  • 複雑な一連のセキュリティ制限によっては、現在のユーザーの 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 フォームのオープン イベントは、ユーザーが回答するためにフォームを開いたときではなく、編集者がフォームを修正するために開いたときに発生します。