[GAS] インストーラブルトリガーの設定方法など（１）～トリガーの追加から保存、編集、削除の基本プロセス

# はじめに
本稿は当方クライアント様への説明用に、内部文書として限定公開していたものを一般公開用に再編集したものとなります。[^1]

[^1]: Magicodeから記事移動後、若干の文言修正をしています。

## トリガー設定における共通事項
誰がＧＡＳを実行したか、に関わらず、**トリガーを設定したユーザー**が、トリガーより実行された**ＧＡＳの実行ユーザー**として扱われます。

そのため、原則として当該プロジェクトの管理者（もしくは管理用のアカウント）にてトリガー設定をして頂く前提となります。

なお、エラーに関しましては、原則としてエラー通知で確認するか、スクリプトエディタ画面の実行数メニューから確認する必要があります。また、エラー通知は管理者（トリガー設定者）へメールにて通知されますので、通知頻度は適宜設定していただくことになります。

# 基本プロセス
## １．スクリプトエディタを開く
### 上部メニューに「拡張機能」があるアプリ
現状、スプレッドシート、ドキュメント、スクリプトファイルが該当します。
上部メニュー「拡張機能」からApps Scriptを選択します。

![スクリプトエディタを開く](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/c9bafb23-94d0-4b63-c9f6-327fed7f07f6.png "1-1:スクリプトエディタを開く 上部メニューに「拡張機能」があるアプリ")

### 上部メニューに「拡張機能」がないアプリ
現状、スライドが該当しますが、いずれＵＩが統一される可能性があります。
メニューの「ツール」からスクリプトエディタを選択します。

![スクリプトエディタを開く](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/3c934aa1-7980-70c4-fb54-1c9213c085eb.png "1-2:スクリプトエディタを開く 上部メニューに「拡張機能」がないアプリ")

※画面は以前のスプレッドシートのメニュー表示

### フォーム
フォーム編集画面より、アカウントアイコンの左側、「…」（三点リーダー）を縦にしたメニューアイコンをクリックし、スクリプトエディタを開きます。

![フォームからスクリプトエディタを開く](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/dc92669f-c09f-1e95-7233-b6640d3fd9ca.png "1-3:スクリプトエディタを開く フォーム")

## ２．トリガー設定メニューを開く
エディタ画面の左側にあるアイコンのうち、目覚まし時計のようなアイコンがトリガー設定用のメニューとなります。
選択し、クリックします。

![トリガー設定メニューを開く](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/6d63b492-576e-12b7-2252-7fcea01dfc45.png "2-1:トリガー設定メニューを開く")

## ３．トリガーを追加する
以下、トリガー設定画面になります。他に何もトリガーが設定されていなければ、以下のような状態となります。

画面の右下にある「＋ トリガーを追加」ボタンをクリックし、新規にトリガーを追加します。

![トリガーを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/8df9f69a-497c-cfce-0cac-2232523ef582.png "3-1:トリガーを追加する 初期状態のトリガー設定画面")

## ４．トリガーの設定
トリガー設定画面からボタンクリックで以下のようなモーダルウィンドウが表示されます。画像はスプレッドシートのものとなりますが、①と④はすべてのトリガー設定に共通しています。**②イベントのソースを選択**は設定するアプリによって選択できる内容が異なり、その選択内容によって、③の項目名及び内容が変わり、さらに小項目が追加されることもあります。

![トリガーの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/9b1a4cb8-2005-4fdf-a053-bcc3c5b6e8e6.png "4-1:トリガーの設定 詳細設定画面")

### 共通の設定内容
- **①実行する関数**：実行させたい関数を選択してください。
- **④エラー通知設定**：好みや状況によって適宜選択してください。

### **イベントのソース**別の設定内容
まず、**イベント**とは、スクリプトを実行させるための契機、タイミング、処理内容等を指すものとイメージしていただければ結構です。具体的にはスプレッドシートで特定のセルが編集された時、毎日１時間毎に実行する等です。

**イベントのソース**は現在以下の４種類があり、それぞれに設定できるイベントの種類、内容があります。なお、**時間主導型**に関しましては、項目数が多く、説明も長くなりますので、別の機会にて解説させていただきます。

1. スプレッドシートから
2. カレンダーから
3. フォームから
4. 時間主導型

#### 1. イベントのソースを選択「スプレッドシートから」
スプレッドシートのみに適用されます。

![イベントのソースを選択「スプレッドシートから」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/78e8c4a0-d217-c086-b9ca-3b2bd0a3fc52.png "4-1-1:イベントのソースを選択「スプレッドシートから」")

**イベントの種類**
- 起動時（Open）：当該スプレッドシートを開いた時に実行させたい場合に選択します。
- 編集時（Edit）：当該スプレッドシートの**セルやセル範囲単位の編集確定時**に実行させたい場合に選択します。
- 変更時（Change）：当該スプレッドシートの行や列の削除など、**シート単位の編集確定時**に実行させたい場合に選択します。シンプルトリガーの`onSelectionChange`とは別物です。
- フォーム送信時（Form submit）：当該スプレッドシートに紐付けられているフォームデータが送信された時に実行させたい場合に選択します。

#### 2. イベントのソースを選択「カレンダーから」
スプレッドシート、ドキュメント、フォーム、スライド、スタンドアロン型のものに適用可能です。

![イベントのソースを選択「カレンダーから」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/5f47fd60-b3fb-8ca5-2238-6026d074bc0d.png "4-2-1:イベントのソースを選択「カレンダーから」")

**カレンダーの詳細を入力**
- カレンダー更新済み：当該アプリに紐付けられたカレンダーが更新された時に実行させたい場合に選択します。

現状は上記の１項目のみですが、小項目として、カレンダーオーナーのメールアドレスもしくはカレンダーIDを入力するフィールドが追加されます。

特定のカレンダーが更新した時に実行する場合は、対象となる**カレンダーID**を指定します。

::: note
ここで**カレンダーオーナーのメールアドレス**を指定した場合、オーナーのすべてのカレンダーが対象となり、情報が更新された時に実行します。
:::

念のため、拙記事ですが、以下を参考にして、GAS実行環境のタイムゾーンを確認し、実行環境に合わせておきましょう。

https://qiita.com/STSHISHO/items/2985c7b92c80b28f1018

#### 3. イベントのソースを選択「フォームから」
フォームのみに適用されます。

![イベントのソースを選択「フォームから」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/5f31bc9c-70de-77c3-ece6-001917ff9834.png "4-3-1:イベントのソースを選択「フォームから」")

**イベントの種類**
- 起動時（Open）：当該フォームの**編集画面を開いた時**に実行させたい場合に選択します。フォームページ画面を開いた時ではないため注意が必要です。
- フォーム送信時（Form submit）：当該フォームが送信された時に実行させたい場合に選択します。

なお、フォーム編集画面で設定をすれば、送信前の簡単な入力チェックはされますが、その後のエラーについてはダイアログ表示などはされません。仕様上、連携先のアプリ（概ねスプレッドシートとなりますが）でも表示されません。

## 5. トリガーの保存
各トリガーの詳細設定ダイアログ右下にある**保存**ボタンクリックで、設定したトリガーが保存されます。正常に保存されると、トリガー設定画面のリストに追加されているのが確認できます。

![トリガーの保存](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/a8be3000-b2c2-3083-9dd5-476efa00d725.png "5-1:設定完了後のトリガー設定画面")

## 6. トリガーの設定変更（編集）と削除
### 設定変更
トリガー設定者のみが実行可能です。トリガー設定画面から、設定済みトリガーのリスト上をマウスホバーした際に現れる、右側のペンアイコンをクリックで設定時と同様のモーダルウィンドウが表示されますので、適宜変更して保存します。

![トリガーの設定変更（編集）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/50511df8-f2d7-4098-436d-84f094f16bf4.png "6-1:トリガーの設定変更（編集）")

### 削除
トリガー設定者のみが実行可能です。設定変更時と同様に、リスト上をマウスホバーした際に現れる右側の「…」アイコンをクリックするとメニューが表示されます。**トリガーを削除**を選択するとトリガーが削除されます。

![トリガーの削除](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/60413292-b09a-d118-dc9b-0ec19e515350.png "6-2:トリガーの削除")

# [参考・引用]
- [Simple Triggers  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/guides/triggers)
- [Installable Triggers  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/guides/triggers/installable)
- [[GAS] 簡単になったGAS実行環境のタイムゾーン設定](https://qiita.com/STSHISHO/items/2985c7b92c80b28f1018)