ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

GAS - トリガーについて

初めに

 GASを使う目的の一つとして、自動化があります。本記事では、GASの自動実行に欠かせないトリガーについて、まとめます。

トリガーとは

 トリガーとは、GASを自動実行するための機能です。条件を設定し、その条件を満たすときにGASが自動実行するように設定できます。

トリガーの設定方法について

 トリガーは設定方法が2つあります。

  • 画面上から設定
  • GASを用いて設定

画面上から設定

トリガー設定画面の開き方

 GASを開くと、左側に時計のアイコンがあります。その部分をクリックすると、トリガーの編集画面が表示されます。

 「トリガーを追加」ボタンをクリックすると次のような画面が現れます。

 この画面でトリガーの設定をします。

実行する関数を選択

 GASのコード内には、複数の関数を定義できます。そのため、どの関数を実行するのか選択します。

実行するデプロイを選択

 実行するプログラムの版を設定します。デフォルトでは、Head となっており、この場合、最新のもので実行されます。

イベントのソースを選択

 関数を実行するイベントを選択することができます。そのGASが紐づいているファイルの種類によって設定できる条件が異なります。

イベント 関数 利用可能なサービス
オープン function onOpen(e) スプレッドシート, スライド, フォーム,ドキュメント
編集 function onEdit(e) スプレッドシート
選択の変更 function onSelectionChange(e) スプレッドシート
インストール function onInstall(e) スプレッドシート, スライド, フォーム, ドキュメント
変更 スプレッドシート
フォームの送信 スプレッドシート, フォーム
時間ドリブン(時計) スプレッドシート, スライド,フォーム, ドキュメント, スタンドアロン
Get function doGet(e) スタンドアロン
投稿 function doPost(e) スタンドアロン

developers.google.com

時間主導型で作成

 試しに、時間主導型で作成してみます。

 「イベントのソースを選択」より下の部分は選択したソースによって変化します。時間主導型の場合、「時間ベースのトリガーのタイプを選択」で時間の単位を選択しできます。

 保存をすると、設定完了です。

実行状況の確認

 トリガーの画面にいくと、設定中のトリガーが表示されます。

 三点ボタンをクリックし、実行数をクリックするとこれまでの実行結果を確認することが可能です。


GASを用いて設定

 GASを用いて、トリガーを設定することもできます。

function setMinuteTrigger() {
  // 既存のトリガーをすべて削除
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  // 新しいトリガーを作成して1分ごとに myFunction を実行する
  ScriptApp.newTrigger('myFunction')
    .timeBased()
    .everyMinutes(1)
    .create();
}

function myFunction() {
  Logger.log("関数を実行");
  // ここに実行したいコードを追加
}

 setMinuteTrigger() 関数を選択し、実行するとトリガー設定画面にトリガーが追加されたことが確認できます。

トリガーの設定に使う関数

 トリガーの設定には、上の例でわかる通り、ScriptApp クラスのトリガーに関わる関数と TriggerBuilder クラスにある関数を使用します。

(ScriptApp クラスの関数)

関数 用途 説明
ScriptApp.getProjectTriggers() トリガーの取得 プロジェクト内のすべてのトリガーを取得するためのメソッド。現在のプロジェクトに設定されているすべてのトリガーを返します。
ScriptApp.getUserTriggers(document) トリガーの取得 特定のドキュメント(スプレッドシート、ドキュメント、フォームなど)に関連付けられているトリガーを取得するためのメソッド。指定したドキュメントに設定されているトリガーを返します。
ScriptApp.newTrigger(functionName) 新しいトリガーの作成 新しいトリガーを作成するためのメソッド。特定の関数を実行するトリガーを設定する際に使用されます。
ScriptApp.deleteTrigger(trigger) トリガーの削除 指定したトリガーを削除するためのメソッド

developers.google.com

 具体的なイベントのソースの指定は、newTrigger 内で TriggerBuilder クラスの関数を用いて行っています。

 // 新しいトリガーを作成して1分ごとに myFunction を実行する
  ScriptApp.newTrigger('myFunction')
    .timeBased()  //イベントのソースの指定
    .everyMinutes(1)
    .create();  //作成
}

 この例では、1分ごとに実行するように設定しているため、timeBased() 関数を用いています。ファイルを開いたとき(onOpen)や変更したとき(onEdit)などもここで設定ができます。

 ドキュメントを見ると、どのパターンでも対応できるように説明がされています。詳細はこちらをご覧ください。
developers.google.com