【GAS】トリガーの種類と使い方
Google Apps Script(GAS)では、特定のタイミングでスクリプトを実行できるトリガー機能が用意されています。本記事ではGASトリガーの種類と使い方について詳しく解説します。
GASのトリガーとは
GASのトリガーとは、特定条件(きっかけ)でGASスクリプトを実行させる仕組みのことでです。「スプレッドシートの更新」や「フォームの送信」など、スクリプト実行のきっかけとなるイベントをあらかじめ指定しておくことで、処理を自動化・効率化することができます。
トリガーの種類
Simple triggersとInstallable triggers
GASのトリガーには大きく分けて、Simple triggers(シンプルトリガー)とInstallable triggers(インストーラブルトリガー)が存在します。
「Simple triggers」はGASのスクリプト上でトリガーを設定する方法で、「Installable triggers」はスクリプトエディターで設定する方法です。
- Simple triggers:スクリプト上で設定するトリガー
- Installable triggers:スクリプトエディターで設定するトリガー
多くの場合、Installable triggersのほうが簡単で使い勝手が良いですが、Simple triggersはスクリプト上で設定できることで入力された値や条件によってトリガーを変更するなど、柔軟なトリガー設定が可能です。ぜひこの機会に両方覚えていってください。
各トリガーで扱える形式(イベント別)
それぞれの設定方法において、GASスクリプトが紐づくファイルタイプによってどのイベントで扱えるかが異なります。
トリガーの設定方法
トリガーで実行するスクリプトを用意しておきます。今回は『シートA列の会社名に「株式会社」という文字列が含まれていればB列に「株式会社」を「(株)」に変換した会社名を挿入する』というスクリプトを用意しました。実行時間を挿入できるように、C列にタイムスタンプ列を用意してあります。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var range = sheet.getRange(1,1,lastRow, lastColumn);
var values = range.getValues()
for(i=1;i<values.length;i++){
var set_str = values[i][0].replace("株式会社","(株)");
var time = new Date();
time = Utilities.formatDate(time, 'Asia/Tokyo', 'yyyy/MM/dd (E) HH:mm');
Logger.log(set_str);
sheet.getRange(i+1,2).setValue(set_str);
sheet.getRange(i+1,3).setValue(time);
}
}
このスクリプトを実行すると、下記のように2~3行目のみ表記が(株)に変換されてB列に挿入され、処理時間がC列に記載されます。
それでは様々なやり方でトリガーをセットしてみましょう。
Simple triggers
アプリの起動、編集等をトリガーとしてスクリプト実行する設定します(編集・インストールはスプレッドシートのみ)。
まずはTriggerBuilderクラスを返り値として持つ、ScriptAppクラスのnewTriggerメソッドを用いて、トリガーで実行したい関数を指定します。
ScriptApp.newTrigger(実行したい関数名)
各ファイルタイプごとにトリガーを設定できますが、スプレッドシートの動作に基づいてトリガーを設定する場合は、TriggerBuilderクラスのforSpreadsheetメソッドを使います。(DocumentsやFormには同じように別のメソッドがあります。)下記の引数には、SpreadsheetオブジェクトかSpreadsheetIDを指定し、返り値はSpreadsheetTriggerBuilderオブジェクトとなります。
TriggerBuilderクラス.forSpreadsheet(スプレッドシートID)
ここからトリガーを設定していきます。
Open (起動)でトリガー設定
onOpen().create()
ファイル起動時にトリガーを実行します。
function TestTritter(){
let id = '[対象スプレッドシートのID]';
ScriptApp.newTrigger(myFunction).forSpreadsheet(id).onOpen().create();
}
Edit (編集)でトリガー設定
onEdit().create()
function TestTritter(){
let id = '[対象スプレッドシートのID]';
ScriptApp.newTrigger(myFunction).forSpreadsheet(id).onEdit().create();
}
Installable triggers
続いてInstallable triggersの設定方法を見ていきます。
エディタのスクリプトファイル横にあるタブのうち、時計マークがトリガー設定です。
「トリガーを追加」をクリックして「実行する関数」と「イベントのソース」を設定します。イベントのソースには下記から選択できます。
- 時間主導型:特定の時間単位(日時、週次、月次など)で実行
- スプレッドシートから:スプレッドシート・ドキュメント・フォーム等の起動や編集、送信時に実行
- カレンダーから:カレンダー更新時に実行
時間主導型のトリガー設定
例として時間主導型でGASを実行するトリガーを作成します。
処理対象の関数「myFunction」を選択し、「時間主導型」「特定の日時」を選択して実行したい時間をセットします。下記の設定では、【2022年2月13日17時】に【myFunction】という関数が実行されることになります。
しっかり設定した時間に処理が実行されていました。
上記は特定タイミング一回のトリガーでしたが、例えばトリガーのタイプで「日付ベースのタイマー」「午後9時~10時」などと設定すれば、1日に1回特定の時間帯に実行することを設定もできます。やりたいことに合わせて、ぜひいろいろ試してみてください。
トリガーの制限
GASのトリガー設定は無制限に行えるわけではなく、いくつか制約があります。
設定したトリガーの実行時間(90分/1日)
フリーアカウントだと、トリガーで実行した処理時間は最大で1日(24時間)で90分となっています。
1スクリプトに設定するトリガー数(20)
1スクリプト内で1ユーザーが設定できるトリガー回数の上限が20回となります。
実はGASにはこの他にも留意しなければならない制限が数多く存在します。下記の記事で詳しく解説しているので興味ある方はぜひ合わせてご覧ください。
まとめ
本記事ではGASトリガーの種類と使い方についてご紹介しました。これらを応用することで、フォーム送信時に自動的に集計する、特定のアドレスからのメールを受信したときのみ通知する、といった処理も可能になります。
ぜひ活用してみてください!