Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定


時計

皆さんこんにちは、うえはら(@tifoso_str)です。

以前の記事にGoogleカレンダーから当日の予定を取得してチャットワークに送る方法があります。

毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
Google Apps Scriptを使ってチャットワークに色々と送ることができます。Googleカレンダーから当日の予定を取得してチャットワークに送る方法についてお伝えしたいと思います。

その日の予定が確認できて便利で、自分も利用していますが、利用しているうちに、人間欲が出てくるもので、もう少し時刻を調整したい場面が出てきます。

例えば、朝礼直前に注意事項などを送ってくれれば、伝達ミスを防げます。

というわけで、今回はGoogle Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定についてお伝えします。

作成したスクリプトsetTriggerを毎日呼び出す

Google Apps Scriptには、トリガーという機能があります。メニューの「編集」→「現在のプロジェクトのトリガー」で設定できます。

メニューからトリガー確認

ただ、毎日設定するトリガー機能の時間主導型の「日タイマー」では1時間の幅があります。時間を細かく設定する「特定の日時」では日付も設定する必要があり、毎日実行するように設定できません。

そこで、ScriptAppsサービスを使用して決まった時刻にトリガーを設定するsetTriggerというスクリプトを作成し、作成したsetTriggerスクリプトを「日タイマー」で毎日実行して、毎日決まった時刻にスクリプトを実行するトリガーを設定します。
トリガーの呼び出し

毎日、トリガーが作成されるので、トリガーを削除する必要がありますが、この解説は次回にしたいと思います。

決まった時刻にトリガーを設定するスクリプト

まず、指定の日時に実行するトリガーを作成するスクリプトです。

下記のスクリプトは実行した日の23:59に「myFunction」を実行するスクリプトです。

実行時間より前の時間を設定するとうまくいかないので、ご注意下さい。

このスクリプトを実行すると、下記のようにトリガーが作成されます。

23時59分の確認
「編集」→「現在のプロジェクトのトリガー」から確認してみてください。

トリガーを設置するスクリプト

実際にトリガーを作成している部分は5行目になります。

Google Apps Scriptでトリガーに関する処理をする場合は、Scriptサービスを使用しますので、それぞれのメソッドについて解説します。

実行するスクリプトの指定

実行するスクリプトを指定する為には、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()

これで、トリガーが起動したときに呼び出す関数と、トリガーを実行する条件が指定できました。

毎日指定の時刻をセットするスクリプト

特定の日時を設定するatメソッドのdateオブジェクトを2~4行で設定しています。

new Date()で実行時の日時を取得し、変数setTimeに代入します。

指定の時刻を設定したいので、.setHours()と.setMinutes()で、それぞれ指定の時間と分に変更します。

メニューから設定する場合は下記の部分になります。。

時刻設定

作成したスクリプトsetTriggerを毎日呼び出す

今回作成したsetTriggerスクリプトは実行した日の23:59に「myFunction」を実行するトリガーを作成します。

今回の目的は毎日決まった時間にトリガーを実行することなので、作成したsetTriggerを毎日実行するためのトリガーを別に設定します
setTriggerの呼び出し
スクリプトを作成してもいいですが、「編集」→「現在のプロジェクトのトリガー」から設定した方が簡単ですね。

まとめ

Google Apps Script で毎日決まった時間にスクリプトを実行するトリガー設定の中で、今回はトリガーの設定について解説しました。

  1. 指定の時間に実行するトリガー生成のsetTriggerスクリプトを作成。
  2. setTriggerスクリプトを毎日呼び出すトリガーを設定

というように2段階のトリガー設定が必要なのでややこしいかもしれませんが、一度作成すれば、次回からは毎日決まった時間に処理が実行されます

べんりですね!

毎日実行されるようにはなりましたが、トリガーは実行されてもそのまま残りますので、このままでは、処理が終わったトリガーが毎日増えていくことになります。

そこで、次回は処理の終わったトリガーを削除する方法についてお伝えしていきます。

次回も宜しくお願いします。

連載目次:GASのスクリプトからトリガーを操作する方法

GASのトリガーはメニューから設定する以外に、スクリプトからも設置や削除が行えます。本シリーズでは、ScriptAppsサービスを使ったトリガーの操作方法についてお伝えしていきます。
  1. Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定
  2. Google Apps Scriptで使用済みのトリガーを削除する方法
  3. Google Apps Scriptで営業日を判定してトリガーを作成する方法

The following two tabs change content below.
独学でプログラムを勉強しているノンプログラマーです。 名前から連想されるように沖縄在住ですが、うちなんちゅ~ではありません。 パソコンにできることはパソコンにさせよう!をモットーに日々の業務に取り組んでいます。

コメント