シンプルなトリガー

トリガーを使用すると、ドキュメントを開くなどの特定のイベントが発生すると、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) は自動的に実行されません。

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 スプレッドシート、スライド、フォーム、ドキュメントではいずれもシンプルなオープン トリガーをサポートしていますが、インストール可能なオープン トリガーをサポートしているのはスプレッドシート、ドキュメント、フォームのみです。

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

function onOpen(e)

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

function onEdit(e)

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

function onSelectionChange(e)

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

function onInstall(e)

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

function doGet(e)

投稿
スタンドアロン

function doPost(e)

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