エンジニアリングTweetどうもこたにんです。使ってトリガーをカスタマイズしてみた!ちょっくら作りたいものがありましてですね。Gmailで受信するメールのうち、特定のメールを受信した時にスクリプトを実行させたい。前回は、GAS側からGmailの受信トレイを検索して特定のメールを拾う、というのをやりました。今回は続き、そのスクリプトを1分間隔で実行するためにトリガーを設定してみます。トリガーをカスタマイズする!8:00-10:00まで1分間隔で動くトリガーの完成イメージ起動時刻指定でトリガーを作成する1分間隔のトリガーを作成するメイン処理を書くカスタムトリガー完成!考察:カスタムトリガーの応用GAS標準のトリガーは起動時刻を固定できないGAS標準のトリガーに「時間主導型」というトリガーがあります。時間主導型は、以下6種類。ベース1ヶ月1回、特定の日付の中で実行する毎月固定日付(1日/2日/3日...)これらを、画面上で簡単に設定することができます。今回やりたいこと、1分間隔のトリガーも、簡単に設定できます。できた!ただしこれでは、1日1440分、1440回叩かれることになります。コンソール上で設定できるトリガーは、ちょっとかゆいのです。スケジューリング、ができないのです。日付ベースで設定しても、1時間のうち何分に実行されるのかがわからないのです。使い慣れている勢としては、かゆくてしかたがないのです。今回はスクリプト側から、任意の時間帯で発動できるようにします。具体的に文字にすると、こういう動きを実現してみます。「8:00-10:00まで1分間隔で動くトリガー」1440回ではなく、たった120回だけ動くようにしたいです。画面上で設定するトリガーでは実現できないので、GAS内に用意されているクラスに頼ることにしましょう。トリガーをカスタマイズする!通常の時間主導型トリガーは、起動したり停止したりすることができません。「起動・停止を行うスクリプトを実行する」という方式を取ります。このクラスを利用することで、画面上で設定するトリガーと同じことをスクリプトで実現できます。ここからは「8:00-10:00まで1分間隔で動くトリガー」を実際に作っていきましょう。8:00-10:00まで1分間隔で動くトリガーの完成イメージ今回実現するカスタムトリガーを図示します。箇条書きで流れを説明します。百聞は一見にしかず、スクリプトを見ていきましょう。起動時刻指定でトリガーを作成するまずは、8時起動・10時起動の2つのトリガーを作るmain関数を作ります。引数にトリガー名を渡すと、その名前でトリガーを作成してくれます。メソッドをつなぎます。クラスでチェーンできます。メソッドで起動時刻を指定してやりましょう。このmain関数は1日1回起動するため、前日に登録していたトリガーを削除する処理も組み込んでおきましょう。deleteTrigger()メソッドをさくっと自作しておきました。1分間隔のトリガーを作成する1分間隔でメイン処理を動かすトリガーを作るminuteTrigger関数を作ります。ScriptApp.newTrigger('mailTrigger').timeBased().everyMinutes(1).create();}作り方は先ほどとほとんど同じです。メソッドで1分を指定します。ここで注意なのが、関数名を先に登録したトリガー名と合わせておくこと。関数名とトリガー名が紐付くので。メイン処理を書く残すはメイン処理です、さくっと書きましょう。});}これは前回記事で作成済みなので、説明も省略。カスタムトリガー完成!これで完成です!作った関数を実行させてトリガーを画面で確認するとちゃんとできていることがわかります。あとは、メイン関数を1日ごとのトリガーとして登録しておけば、動くぞ。今回はやりたいことが細かったので少し複雑なカスタムトリガーになりました。作り方によっては、もっとライトなものも作れます。毎日9:00に実行する火曜と金曜の23:30に実行する12:00-13:00/18:00-19:00実行する無理のない頻度でスクレイピングしたり、スプレッドシート反映したり。やりたいことに合わせて好きなようにカスタマイズできそうです。