[GAS] インストーラブルトリガーの設定方法など（２）～ 時間主導型トリガー

# はじめに
以下の拙記事の続きとなります。トリガーの設定から保存に至るまでのプロセス及び編集、削除の方法について触れていますので、参照ください。

https://qiita.com/STSHISHO/items/73606c402af0a770684d

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

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

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

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

なお、エラー通知は管理者（トリガー設定者）へメールにて通知されますので、通知頻度は適宜設定していただくことになります。

# 時間主導型トリガーの設定プロセス
## 時間主導型トリガーについて
タイムドリブンやタイムトリガーと呼ぶ場合もあります。スプレッドシート、ドキュメント、フォーム、スライド、スタンドアロン型のものに適用可能です。

主に特定の日時に実行したい場合や毎日定時に実行するなど、定期的に自動実行させるために設定します。

特に**特定の日時**を設定する場合、こちらも拙記事ではございますが、念のため以下を参考に実行環境のタイムゾーン設定を確認、修正しておきましょう。

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

### 時間主導型トリガーの詳細設定画面

以下は時間主導型トリガー共通の詳細設定画面です。

![時間主導型トリガー共通の詳細設定画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/5a554163-fcf1-6cb5-407e-71f481b039f5.png "時間主導型トリガー共通の詳細設定画面")

**イベントのソースを選択**にて**時間主導型**を選択すると、新たに**時間ベースのトリガーのタイプを選択**項目が追加され、さらに選択したトリガーのタイプによって細かな設定が可能となります。現状、以下の６種類があります。

1. 特定の日時
2. 分ベースのタイマー
3. 時間ベースのタイマー
4. 日付ベースのタイマー
5. 週ベースのタイマー
6. 月ベースのタイマー

### 1. 特定の日時
指定した任意の日時に実行します。

![時間主導型トリガー 特定の日時](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/347bae5c-f7e6-140c-c5a0-4626c4617ba8.png "1-1:時間主導型トリガー設定 特定の日時設定画面")

①での日付の指定方法は`YYYY-MM-DD HH:MM`形式となります。時間、分単位で細かく指定可能です。体感ですが、およそ１～２分の間で遅延することが多いです。

### 2. 分ベースのタイマー
○分ごとに実行したい、といった場合に設定します。

![時間主導型トリガー 分ベースのタイマー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/a7a82380-e06f-b8e3-e4c2-b78ddcc7709d.png "2-1:時間主導型トリガー 分ベースのタイマー設定画面")

①の **時間の間隔を選択（分）** にて分単位の間隔を指定します。1分おき、5分おき、10分おき、15分おき、30分おきに実行するよう設定可能です。トリガーが追加された時点からの起算となります。

なお、設定画面にて指定できる間隔は固定長となりますので、それ以外の間隔で実行したいといった場合は、GASからトリガーを生成し、追加する必要があります。

::: note warn
無料のアカウントではトリガーの**総**実行時間制限が９０分／日であるため、理論上、１分おきでは平均して3.75秒で完結する必要があります。遅延発生も考慮すると、複数のトリガーを走らせている場合などは非現実的な設定となります。

なお、制限に引っかかりそうな場合は、実行時間帯を設定する、複数アカウントで別々にトリガーを設定する、有料アカウントにて運用する、といった選択肢を検討したほうが良いでしょう。
:::

### 3. 時間ベースのタイマー
○時間ごとに実行したい、といった場合に設定します。

![時間主導型トリガー 時間ベースのタイマー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/714d2a88-752e-02e5-19d0-208fb4f567ae.png "3-1:時間主導型トリガー 時間ベースのタイマー設定画面")

①の **時間の間隔を選択（時間）** にて時間単位の間隔を指定します。1時間おき、2時間おき、4時間おき、6時間おき、8時間おき、12時間おきに実行するよう設定可能です。こちらもトリガーが追加された時点からの起算となります。体感ですが、およそ１～２分の間で遅延することが多いです。

分タイマー同様、設定画面にて指定できる間隔は固定長となりますので、それ以外の間隔で実行したいといった場合は、GASからトリガーを生成し、追加する必要があります。

### 4. 日付ベースのタイマー
毎日○時に実行したい、といった場合に設定します。

![時間主導型トリガー 日付ベースのタイマー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/b813eaaf-4cec-c8b0-24aa-ccafccee6538.png "4-1:時間主導型トリガー 日付ベースのタイマー設定画面")

①の **時刻を選択**にて実行したい時間帯（１時間単位）を指定します。指定した１時間の時間帯のなかで、かなりアバウトなタイミングで実行します。体感ですが、およそ１５～３０分の間で実行されることが多いです。

::: note warn
日付ベースのタイマー設定画面経由では、毎正時や○時半に実行させる、といったことはできません。この場合、GASからトリガーを生成し、追加する等の対応が必要となります。
:::

### 5. 週ベースのタイマー
毎週１度だけ、特定の曜日の指定時間帯に実行したい場合に設定します。

![時間主導型トリガー 週ベースのタイマー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/b05cc9aa-bd7e-96d6-3605-8ef5ab95cf20.png "5-1:時間主導型トリガー 週ベースのタイマー設定画面")

①の **曜日を選択**にて曜日を指定し、②の **時刻を選択**にて指定した時間帯に実行します。日付ベース同様、かなりアバウトなタイミングで実行します。

### 6. 月ベースのタイマー
毎月決まった日にちの指定した時間帯で実行したい場合に設定します。

![時間主導型トリガー 月ベースのタイマー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/ae1261e2-efda-c8df-1953-96eb2eb39d1b.png "6-1:時間主導型トリガー 月ベースのタイマー設定画面")

①の **日を選択**にて日付を指定し、②の **時刻を選択**にて指定した時間帯に実行します。日付ベース同様、かなりアバウトなタイミングで実行されます。

::: note warn
指定した日付がその月に存在しない場合は実行されません。具体的には３１日を指定した場合、小の月には実行されません。この場合、GASにて次月の月末を算出した上でトリガーを追加するなどの対応が必要となります。
:::

# 最後に
トリガーによる自動実行は便利ではありますが、エラー捕捉がし辛いこと、実行時の遅延など、デメリットもあります。私見ではありますが、即時性や精緻さ、厳密な時間管理を求めるならそもそもGASは不向きかと思います。[^2]

[^2]: [公式](https://developers.google.com/apps-script/reference/script/clock-trigger-builder)にて一部メソッドにおいては±15分と明記されています。

これらを許容できる状況でしたら、積極的に活用し、定型業務を自動化するほうが遥かにメリットが大きいでしょう。

# [参考・引用]
- [Quotas for Google Services  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/guides/services/quotas#current_quotas)
- [Class ClockTriggerBuilder  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/script/clock-trigger-builder)
- [[GAS] インストーラブルトリガーの設定方法など（１）～トリガーの追加から保存、編集、削除の基本プロセス](https://qiita.com/STSHISHO/items/73606c402af0a770684d)
- [[GAS] 簡単になったGAS実行環境のタイムゾーン設定](https://qiita.com/STSHISHO/items/2985c7b92c80b28f1018)