GASのトリガーとは
GAS で集計やメール送信のスクリプトを作っても、毎回 [実行] を押していては手間は半分しか減りません。トリガーを付けると、決めたきっかけで関数が自動で動くようになり、人が何もしなくても処理が回ります。
トリガーには、関数の名前を決まった形にするだけで動く「シンプルトリガー」と、画面やコードで設定する「インストール型トリガー」の 2 種類があります。
シンプルトリガー
- 関数名を
onOpenやonEditにするだけ - Gmail など許可が要る機能は使えない
- 30 秒までしか動けない
インストール型トリガー
- 画面かコードで設定する
- 時間主導型・フォーム送信時などが使える
- メール送信など許可が要る処理も動く
公式ガイドによると、シンプルトリガーは許可が必要なサービスを使えず、30 秒を超えて動けません。メールを送る・別のファイルを書き換えるといった処理には、インストール型トリガーを使います。
インストール型トリガーの種類
インストール型トリガーで使えるきっかけ
| 種類 | 動くとき | 使いどころの例 |
|---|---|---|
| 時間主導型 | 決めた時刻・間隔 (1 分ごとから月 1 回まで) | 毎朝の集計、毎週の報告メール |
| 起動時 | 編集できる人がファイルを開いたとき | メニューの追加、表示の初期化 |
| 編集時 | シートの値が変更されたとき | 更新日時の記録、通知 |
| 変更時 | シートの追加や列の削除など構造が変わったとき | 構造の変化の検知 |
| フォーム送信時 | フォームに回答が送られたとき | 自動返信、担当者への通知 |
| カレンダー | 予定が作成・変更・削除されたとき | 予定の一覧の更新 |
画面でトリガーを設定する手順
公式ガイドの手順です。毎朝 9 時台に dailyReport という関数を動かす例で説明します。
トリガーの画面を開く
Apps Script の画面の左側で [トリガー] (時計のアイコン) を押します。
トリガーを追加する
右下の [トリガーを追加] を押します。
関数ときっかけを選ぶ
実行する関数に
dailyReport、イベントのソースに「時間主導型」、タイプに「日付ベースのタイマー」、時刻に「午前 9 時〜10 時」を選びます。保存する
[保存] を押します。初めてのときは、スクリプトがアクセスする範囲の許可を求められるので、自分のアカウントで許可します。
コードでトリガーを作る・消す
トリガーはコードからも作れます。設定を作り直すたびに画面を操作しなくて済み、どんな設定にしたかがコードに残るので、引き継ぎにも向いています。
const HANDLER = "dailyReport";
function setupTrigger() {
ScriptApp.getProjectTriggers()
.filter((trigger) => trigger.getHandlerFunction() === HANDLER)
.forEach((trigger) => ScriptApp.deleteTrigger(trigger));
ScriptApp.newTrigger(HANDLER)
.timeBased()
.atHour(9)
.everyDays(1)
.inTimezone("Asia/Tokyo")
.create();
}
function dailyReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ログ");
sheet.appendRow([new Date(), "毎朝の処理が動きました"]);
}
setupTrigger を 1 回だけ手で実行すると、毎日 9 時台に dailyReport が動くトリガーができます。最初に同じ関数のトリガーを消してから作っているので、何度実行してもトリガーが重複しません。dailyReport の中身は、自分の処理に書き換えてください。
よく使う時間の指定
時間主導型トリガーの書き方
| やりたいこと | 書き方 |
|---|---|
| 15 分ごと | .timeBased().everyMinutes(15) |
| 6 時間ごと | .timeBased().everyHours(6) |
| 毎日 7 時台 | .timeBased().atHour(7).everyDays(1) |
| 毎週月曜 | .timeBased().onWeekDay(ScriptApp.WeekDay.MONDAY) |
| 毎月 15 日 | .timeBased().onMonthDay(15) |
| 決めた日時に 1 回 | .timeBased().at(new Date(2026, 11, 1, 9, 0)) |
公式リファレンスによると、everyMinutes に指定できるのは 1・5・10・15・30 のどれかです。nearMinute(45) を付けると、動く分を 45 分の前後 15 分の幅に寄せられます。
編集されたときに動かす (onEdit)
シートが編集されたときに処理をするだけなら、シンプルトリガーの onEdit が手軽です。スプレッドシートに紐づいたスクリプトに次の関数を書くだけで、トリガーの設定は要りません。
function onEdit(e) {
const range = e.range;
const sheet = range.getSheet();
if (sheet.getName() !== "案件" || range.getColumn() !== 3) return;
sheet.getRange(range.getRow(), 4).setValue(new Date());
}
この例では、「案件」シートの C 列 (状況) が書き換えられたら、同じ行の D 列に更新日時を入れます。e.range は編集されたセルの範囲です。
動かないとき・止まったときの確認点
トリガーで気にしたい上限
| 項目 | 個人のアカウント | Google Workspace |
|---|---|---|
| 1 つのスクリプトのトリガーの数 (1 人あたり) | 20 | 20 |
| トリガーの合計実行時間 (1 日) | 90 分 | 6 時間 |
| 1 回の実行時間 | 6 分 | 6 分 |
- 時刻がずれる: 公式ガイドによると、9 時の設定は 9 時から 10 時の間のどこかで動き、以後は毎日ほぼその時刻に動きます。ぴったりの時刻が必要な用途には向きません。
- 失敗したかを知りたい: トリガーの処理が失敗すると、作った人に「Summary of failures for Apps Script」という件名のメールが届きます。Apps Script の画面の左側の [実行数] で、失敗の内容を確かめられます。
- 人が変わったら動かない: インストール型トリガーは、作った人のアカウントで動きます。作った人が退職してアカウントが止まると動かなくなるため、業務では共用のアカウントで作っておきます。
- ほかの人のトリガーが見えない: 別のアカウントが作ったトリガーは自分の画面には出ませんが、動いてはいます。同じ処理が二重に動いていないか、作った人に確かめます。
公式の割り当ての一覧のとおり、個人のアカウントでは 1 日のトリガーの実行時間が合計 90 分までです。15 分ごとに数分かかる処理を回すと、すぐに上限に届くので、間隔は必要な分だけにします。
自分で作るのが難しいときは
トリガーを付ければ、毎朝の集計や通知を人の手から離せます。ただ、処理が増えると「どのトリガーが何を動かしているか誰もわからない」「作った人の異動で止まっていたのに気づかなかった」といったことが起きやすくなります。
止まったときに通知する仕組みや、複数の処理をまとめて管理する形まで含めて作り直したい場合は、シートナビの相談フォームからお気軽にご相談ください。
よくある質問
トリガーを止めたいときはどうすればよいですか?
Apps Script の画面の [トリガー] で、止めたいトリガーの右側のメニューから削除します。公式ガイドによると、onOpen などのシンプルトリガーはこの画面に出ないので、止めたいときは関数を消すか名前を変えます。
フォームに回答が来たらすぐにメールを送れますか?
できます。インストール型の「フォーム送信時」トリガーを付けると、回答が送られたときに関数が動きます。メールの送り方は GASでGmailを自動送信する方法 で説明しています。
1 分ごとに動かしても問題ありませんか?
everyMinutes(1) で設定はできますが、1 日のトリガーの合計実行時間の上限 (個人のアカウントで 90 分) に届きやすくなります。新しい行があるかを確かめるだけの処理でも、5 分や 15 分ごとで足りないかを先に考えてください。


