Google Apps Script(GAS)には、「トリガー」という機能があります。トリガー機能では、以下のようなことを実現できます。
- 毎週日曜日に一週間の収支レポートをLINEに通知する
- 不燃ごみの日の前日に、「明日は不燃ごみの日だよ!」とお知らせする
- 毎朝、ChatGPTがチョイスしたITニュースをSlackに自動投稿する
このように、定期的に繰り返し実行する処理がある場合は、トリガー機能を使うと便利です。本記事では、GASのトリガー機能の使い方と、動かない場合の対処法を詳しく解説します。
GASのトリガーとは
GASのトリガーとは、指定した条件で実行することができる機能です。GASで作成したスクリプトは、通常はエディタにある「実行」ボタンを押さないと処理が実行されませんが、トリガーを設定しておくことで、わざわざ手作業でスクリプトを実行しなくても自動で定期実行が可能となります。
月初・月末の勤怠表の計算処理実行や、一定間隔で自動メール送信など、ビジネスシーンにおいてもとても有用な機能となっています。
GASのトリガーは大きく分けて2種類ある
GASのトリガーは、大きく分けて2種類存在します。
シンプルトリガー
シンプルトリガー(Simple triggers)は、GoogleシートやGoogleスプレッドシートに紐づいたトリガーです。
GASで「セルの値が変更されたら、再計算処理を実行する」という処理を書いておけば、スプレッドシートのセルが編集されたらスクリプトが実行されます。名前のとおり、とても単純で手軽なトリガーです。ただし、いくつか制約がありますので使う際には注意が必要です。
インストーラブルトリガー
インストーラブルトリガー(Installable Triggers)は、自分でトリガー設定を行うトリガーのことです。
先ほど紹介したシンプルトリガーは、トリガー設定不要で手軽ではありましたが、必ずGoogleドキュメントやスプレッドシートなどと連携している必要がありました。
いっぽう、インストーラブルトリガーは、必ずしもドキュメントと連携している必要はありません。
トリガーの設定方法
トリガーの設定方法を、それぞれ説明します。
シンプルトリガー
シンプルトリガーは、以下の手順で作成します。
- Googleドキュメントやスプレッドシートを作成する。
- 作成した上記ドキュメントから、GASを作成する。
- GASのエディタで、シンプルトリガー用の関数を作成する。
スクリプトの内容には以下を記載し、保存します。
function onEdit() {
Browser.msgBox('セルの値が変更されました');
}
再度スプレッドシートを開き、適当なセルを編集します。
すると、GASで設定した関数が実行されました。シンプルトリガーは、トリガーを設定する必要なく、スクリプトに紐づいたドキュメントに対して操作されたタイミングで実行されます。シンプルトリガーを利用するには、以下のいずれかの関数を利用します。
関数名 | 説明 |
---|---|
onOpen(e) | 編集権限のあるスプレッドシート、ドキュメント、フォームなどを ユーザーが開いたタイミングで実行される。(読み取り専用では実行されない) |
onInstall(e) | ユーザーがGoogleドキュメント、スプレッドシート等から アドオンをインストールしたときに実行される。 |
onEdit(e) | ユーザーがスプレッドシートの値を変更したときに実行される。 |
onSelectionChange(e) | ユーザーがスプレッドシートで選択内容を変更すると実行される。 |
doGet(e) | ユーザーがウェブアプリにアクセスしたり、プログラムが HTTP GET リクエストを ウェブアプリに送信したときに実行される。 |
doPost(e) | プログラムがHTTP POSTリクエストをウェブアプリに送信すると実行される。 |
インストーラブルトリガー
シンプルトリガーは、以下の手順で作成します。
- GASで新規のプロジェクトを作成するか、既存のプロジェクトを開く。
- トリガー設定から、関数を実行する条件を設定する。
トリガーを設定するには、GASで実行させる関数をあらかじめ作成しておく必要があります。
スクリプトを作成したら保存をし、「デバッグ」横のプルダウンに作成した関数が入っていればOKです。次に、スクリプトエディタ左側のメニューにある、時計マークのアイコンを押します。
右下の「トリガーを追加」を押します。
トリガーの設定ダイアログが表示されます。ここで、どのような条件で関数を実行させるかを設定します。
項目についての詳しい説明は以下になります。
項目 | 説明 |
---|---|
実行する関数を選択 | あらかじめ作成した関数名が表示されます。(複数ある場合は複数表示される) |
実行するデプロイを選択 | 実行対象となるバージョンを選択できます。 「Head」が最新のデプロイで、バージョンXXは過去のデプロイです。 基本は「Head」に設定しておけばOKです。 |
イベントのソースを選択 | 時間主導型:毎週〇曜日、毎月〇日など、時間で指定する場合はこちら カレンダーから:Googleカレンダー更新時に関数が実行されます。 ※スプレッドシートと連携している場合、「スプレッドシート」も選択可能 |
時間ベースのトリガーのタイプを選択 | いずれかから選択します。 ・特定の日時(例:2023/03/29 10:00) ・分ベースのタイマー(1分おき/5分おき/10分おき/15分おき/30分おき) ・時間ベースのタイマー(1時間おき/2時間おき/4時間おき/6時間おき/8時間おき/12時間おき) ・日付ベースのタイマー(午前0-1時など、1時間の幅で設定) ・週ベースのタイマー(毎週月~日曜日) ・月ベースのタイマー(毎月〇日) |
エラー通知設定 | エラーが発生したときにどの間隔で通知を受け取るかを設定します。 |
トリガーをスプレッドシートにすることも可能
注釈にもある通り、スプレッドシートと連携している場合はイベントのソースを「スプレッドシート」にすることも可能です。
スプレッドシートを選択したときのイベントの種類は、以下のようになっています。
注意:シンプルトリガーには制約がある
シンプルトリガーは手軽に実行できるぶん、いくつか制約があります。(シンプルなトリガー>制限事項 参照)
- 読み取り専用モードで開かれたファイルでは実行されない。
- GASからスクリプトを実行した場合は実行されない。(例えば、Range.SetValue()でセルに値をセットしてもonEditトリガーは実行されない)
- 30秒以上の実行はできない。
- 1日に実行できる回数に制限がある。(Google サービスの割り当て 参照)
- スクリプトは、Googleドキュメントやスプレッドシートにバインドされている必要がある
最後に出てきた「バインドされている」状態というのは、スプレッドシートなどからスクリプトが作成されているものを指します。詳しくは、以下記事をご参照ください。
トリガーの無効化・削除
GASのトリガーは無効化できない
GASのトリガーには、一時停止の機能がありません。しかし、再度一から設定するのは面倒なので一時的に停止したいという場合もあるかと思います。そのような場合には、以下のように対応します。
プロジェクトにスクリプトを新規追加し、以下のコードを記載します。
function myFunction() {
console.log('dummy');
}
トリガー設定で、作成した関数を指定します。
これで、疑似的にではありますが、関数の実行がされなくなります。
トリガーの削除
トリガー設定画面を開き、対象のトリガーにカーソルを当てます。「トリガーの削除」を押します。
確認のダイアログが出ますので、「完全に削除」を押します。
これで削除完了です。
トリガーが動かない場合の対処法
「トリガーが動かない」「あるときから突然トリガーが動かなくなった」という場合の対処法を以下に記載します。
設定した時刻通りに動かない
対策:タイムゾーンが日本になっていることを確認する
GASのスクリプトエディタにはタイムゾーン設定があり、稀にタイムゾーンが日本になっていない場合があります。スクリプトエディタの左側メニューにある設定から、タイムゾーンがGMT+09:00になっていることを確認してください。
トリガー実行でエラーが発生している
対策:GASのスクリプトを一度実行し、権限の承認をする
GASからスプレッドシートやGoogle Driveを実行するには、初回実行時には承認が必要となります。一度も実行していない状態でトリガーが実行されると、権限の承認部分で止まってしまいます。
シンプルトリガーが動かない
対策:インストーラブルトリガーに変更する
シンプルトリガーでうまく動かない場合には、先ほど紹介した制約のうちのいずれかに引っかかっている可能性があります。同様の処理をインストーラブルトリガーで作成して、再度試してみてください。
いきなりトリガーが動かなくなった
対策:ない(GAS側の不具合の可能性)
GASの内部的なエラーやバグの可能性があります。過去には、ランタイムのバージョンアップ後にエラーで動かなくなるという事態がありました。
もし、何も変更していないのにいきなり動かなくなったという場合には、公式の最新情報を確認してみてください。
まとめ
今回は、Google Apps Script(GAS)のトリガーについて解説しました。大きく分けて2種類のトリガーがあり、シンプルトリガーは手軽だけど制約が多く、インストーラブルトリガーは設定の必要があるけど制約が少ないことが分かりました。
GASのトリガーを使うと、定期実行を簡単に実現できます。繰り返しの作業を自動化・効率化したいとお考えの方は是非活用してみてください。
コメント