GASを定時実行する方法

こんにちは。EXCY テックブログの萱場です。

本日は、グーグルアップスクリプト (以下GAS) の定時実行方法を解説したいと思います。

エディターからの設定

まず、GASの定期実行はGASのスクリプトエディタを開いて、左側メニューのトリガーを選択し、左下のトリガー作成を選択します。

次に以下の設定メニューが出てくるので、設定していきますが、細かい所は割愛します。

【イベントのソースを選択】という項目から、【時間主導型】を選びます。

*【スプレッドシートから】は、スプレッドシートを立ち上げたタイミングや変更を加えたタイミングなどを選べます。

*【カレンダーから】は、カレンダーIDに入力したGoogleアカウント所有の特定のカレンダーと連携させることで、新しく予定を作成したタイミングで、プログラムを実行できるようなトリガーです。

毎日特定の時間帯に実行したい場合は、日付べースのタイマーを選択します。

一時間単位で時間帯を設定できるので、ここで時間帯を設定します。

最後に保存を押して完了です。

定期実行のトリガーの設定が保存されると、以下の様にトリガー一覧に追加されます。

以上で、トリガーの設定はできます。

しかし、お気づきかもしれませんが、Mac OSや LinuxでいうCronのような、毎日分単位で、実行時間を設定することはできません。

この時刻に実行したいという場合には、この設定だとあまり役に立たない感じがしますよね。

そんな場合は、以下のような合わせ技を使うことで解決することができます。

  1. (イ)という関数のトリガーを作る関数(ロ)を作成する
  2. (ロ)に対して日付ベースのトリガー設定を行う。

プログラムによる定時実行

まず、時間主導型のトリガーを作成する関数を作成します。

コードは以下です。


//日付ベースのトリガー作成
function setTrigger(functionName, date) {
  ScriptApp.newTrigger(functionName).
    timeBased().
    at(date).
    create();
}

ScriptAppオブジェクトのnewTriggerメソットを使用します。

関数名<functionName>と実行したい日時<date>を引数としてとり、newTriggerメソッドに渡せるようにします。

timeBased( )…時間主導型のトリガーの設定

at( )…引数の日時をトリガーの実行時間に設定

create( )…トリガーの作成実行

上記のメソッドをつなげて書いています。

続いて、上記で作った関数を使用し、任意の関数を実行する関数を作成します。



function setMyFunctionTrigger() {
  const functionName = 'myFunction';
  const date = new Date();
  const time = '12:00';
  date.setHours(...time.split(':'));
  setTrigger(functionName, date);
}

functionNameには、定時実行したい関数名を入力します。

new Date()で新しいDateオブジェクトを作成します。(プログラム実行時の日時で生成されます)

コードを変更しやすいように時刻は変数に入れて、その時刻を、setHoursメソッドと特定の文字列で分割してくれるStringオブジェクトのsplitメソッドを使って、作成したDateオブジェクトの時間を設定します。

全体的なコードサンプル

//定時実行したい関数(イ)
function myFunction() {
  console.log("Hello")
}

//定時実行する関数のトリガーを作成する関数(ロ)
function setMyFunctionTrigger() {
  const functionName = 'myFunction';
  const date = new Date();
  const time = '19:00';
  date.setHours(...time.split(':'));
  setTrigger(functionName, date);
}

//(ロ)のもととなる関数
function setTrigger(functionName, date) {
  ScriptApp.newTrigger(functionName).
    timeBased().
    at(date).
    create();
}

(ロ)の関数を実行してみたいと思います。

そうすると、新しくトリガーが生成されました。

確認すると、特定の日時のトリガータイプでその日の指定した時間がセットされているのがわかります。

(ロ)が問題なく動く事がわかったので、この(ロ)を以下の様に設定すれば、

  1. 毎日4-5時の間に関数(ロ)が実行される
  2. (ロ)の実行により関数(イ)が毎日19:00に実行される

という定期実行が可能になります。

まとめ

いかがだったでしょうか。

GASは、無料で使用でき、グーグルの様々なアプリケーションと連携できるので非常に便利ですが、色々と制約もあります。

しかし、工夫次第でその制約もクリアできたりするので、ぜひ試してみて下さい。

株式会社デザインXでは、アパレル業界のお客様に向けて、ECサイトや業務基幹システム(ERP)の開発・導入支援を行っております。ご興味をお持ちの方は、是非下記リンクよりお気軽にお問い合わせください。

また、株式会社デザインXでは、ソフトウェアエンジニア・社内SEなど、共に働く仲間を募集しています。テクノロジーでアパレル業界のBtoBビジネスを変えたいという熱意をお持ちの方、お待ちしております。ご興味のある方は、以下のリンクからお問い合わせください!


投稿日

カテゴリー:

投稿者:

タグ: