せっかく書いたスクリプトを1時間ごと、毎日、週1回、月1回など決まった時間に自動で実行しておいてほしい場合には、トリガーを設定する必要があります。今回、「日タイマー」で毎日決まった時刻にスクリプトを実行させてみましょう。
トリガーを作ろう
Google Apps Scriptには、トリガーという機能があります。トリガーとは、「引き金」の意味で、何かきっかけになる出来事が起こったら自動的に特定の処理を起動する仕組みのことを意味します。
左側のメニューから「目覚まし時計」のマークにマウスを合わせるとトリガーが出現するので、選択してください。
トリガーを追加
画面下部の「トリガーを追加」を押します。

トリガーの内容を設定する
トリガーを追加を押すと、次のモーダルが表示されます。

- 実行する関数:自身で作成した関数名が表示されます(事前に作成しておく必要あり)
- 実行するデプロイを選択:HEADのままでOKです。HEADとは、今現在のスクリプトコードを実行する選択支です。
- イベントのソースを選択:「時間手動型」を選択します。
- 時間ベースのトリガータイプ:今回は毎日なので「日付ベースのタイマー」を選択します。
- 時間:実行したい任意の時間を設定し、保存してください。
トリガー設定完了
トリガーが追加されると、次のように一覧に表示されます。これで、ファイルを閉じて待つだけです。

GASのスクリプトでトリガーを設定する
スクリプトコードでトリガーまで設定する方法もあります。例えば、下記のsetTriggerスクリプトは毎日23:59になると「AFCReport」という名前の関数を実行するスクリプトです。
function setTrigger(){
// 今日の日付を取得
const next = new Date();
// 翌日に変換
next.setDate(next.getDate() + 1);
// 23時59分00秒に時刻を設定
next.setHours(23);
next.setMinutes(59);
next.setSeconds(0);
// AFCReportという関数を9時に実行するトリガーを作成
ScriptApp.newTrigger('AFCReport').timeBased().at(next).create();
}
このsetTriggerスクリプトを実行すると、下記のようと同様のトリガーが設定されるわけですが、
「毎日」ではなく「特定の日時」になってしまっているのがお判りでしょうか?これを毎日実行させるには、実行処理の最後に「自分自身を呼び出す時間指定トリガーをセット」のがポイントです。
function AFCReport(){
省略
setTrigger();
}
1度でもsetTrigger()を実行すれば、setTrigger実行 → 翌日にAFCReportが実行 → setTrigger実行→ 翌々日にAFCReportが実行と1日おきに無限プールを繰り返していきます。
実行するスクリプトの指定
実行するスクリプトを指定する為には、ScriptAppクラスのnewTriggerメソッドを使用します。
ScriptApp.newTrigger('実行する関数名')
メニューから設定する場合は下記の部分になります。

なお、newTriggerメソッドの戻り値はTriggerBuilderオブジェクトとなります。
トリガーのイベントを指定
トリガーのイベントを指定するには、TriggerBuilderクラスのメソッドを使用します。
TriggerBuilderオブジェクト.timeBased()
今回は「時間主導型」のイベントを設定するのでtimeBasedメソッドを使用します。メニューから設定する場合は下記の部分になります。

TriggerBuilderクラスにはこの他に、forSpreadsheetメソッドやforDocumentメソッドがあり、GoogleスプレッドシートやGoogleドキュメントを起点にすることもできます。なお、timeBasedメソッドの戻り値はClockTriggerBuilderクラスとなります。
イベントの時間を設定
イベントの時間を設定するにはClockTriggerBuilderクラスのメソッドを使用します。
ClockTriggerBuilderオブジェクト.at(指定日時)
今回は「特定の日時」を設定するので、atメソッドを使用します。メニューから設定する場合は下記の部分になります。

ClockTriggerBuilderクラスにも様々なメソッドがあり、色々な条件で時間を設定できます。一定時間後の時刻を設定する場合はafterメソッドを使用します。単位はミリ秒となっているので、10分後を指定する場合はafter(10×60×1000)となります。
トリガーの生成
最後にトリガーの生成にはcreateメソッドを使用します。
ClockTriggerBuilderオブジェクト.create()
使い終わったトリガーは削除する
トリガーは無限にセットすることができます。プログラムで作成するとどんどん増えてしまいます。
追加と同様に、トリガーの削除もプログラムから可能です。
ScriptApp.deleteTrigger(”削除したいトリガー名");
削除したいトリガーの名前を引数として渡すことで、削除してくれます。全部、まとめて削除したいときは次のようになります。
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
ScriptApp.getProjectTriggers()
で全てのトリガーを変数に代入して、for文で1つずつ削除するという流れです。
なお、for文の基本は下記の通りです。
for ( 初期値; 条件式; 増減値 ) {
// 繰り返す処理を書く
}
GASの制限に注意
Google Apps Scriptには制限は、「実行時間制限」「実行回数制限」「トリガー数の制限」の制限があります。
実行時間の制限
1回の実行で6分までとなっています。スクリプトが途中で止まってしまう場合は、まずこの制限を疑いましょう。
無料アカウント | G Suite | Early Access | |
---|---|---|---|
スクリプト実行時間 | 6分/実行 | 6分/実行 | 30分/実行 |
カスタム関数実行処理 | 30秒/実行 | 30秒/実行 | 30秒/実行 |
実行回数の制限
機能ごとに、1日および同時実行数に制限が設けられています。
無料アカウント | G Suite | Early Access | |
---|---|---|---|
カレンダーイベント作成数 | 5,000/日 | 10,000/日 | Flexible |
コンタクト作成数 | 1,000/日 | 2,000/日 | Flexible |
ドキュメント作成数 | 250/日 | 1,500/日 | Flexible |
メール受信者数 | 100/日 | 1,500/日 | 1,500/日 |
メールの読み書き(送信除く) | 20,000/日 | 50,000/日 | Flexible |
グループの取得 | 2,000/日 | 10,000/日 | Flexible |
JDBC 接続 | 10,000/日 | 50,000/日 | Flexible |
JDBC 接続の失敗 | 100/日 | 500/日 | 500/日 |
プレゼンテーションの作成数 | 250/日 | 1,500/日 | Flexible |
プロパティの読み書き | 50,000/日 | 500,000/日 | Flexible |
スプレッドシートの作成数 | 250/日 | 3,200/日 | Flexible |
トリガーによる総実行数 | 90分/日 | 6時間/日 | 6時間/日 |
URL Fetch コール数 | 20,000/日 | 100,000/日 | Flexible |
同時実行数 | 30 | 30 | 60 |
トリガー数の制限
1スクリプトにつき1ユーザーが20トリガーまでという制限が設けられています。
無料アカウント | G Suite | Early Access | |
---|---|---|---|
トリガー | 20/ユーザー/スクリプト | 20/ユーザー/スクリプト | 20/ユーザー/スクリプト |