5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GAS】トリガーをまとめてみた

Last updated at Posted at 2024-10-11

GASを使用した際にトリガーを使う機会があったので調べてみました。

トリガーの設定方法

トリガーには手動で設定する方法と、トリガーが自動で設定される関数名を用いる方法の2つのパターンがあります。

その1.トリガーを手動で設定する

  1. AppsScriptの左側にあるメニューからトリガーを選択

image.png
2. 右下にあるトリガーを追加ボタンをクリック

image.png
3. 実行したい関数とイベントの種類を選択し、保存する

image.png

onInstall・doGet・doPostは手動でのトリガー設定はできません。

その2.トリガー付き関数名で設定する

関数名を以下のようにすることで、自動でトリガーを設定することができます。

イベント 関数名
起動時 onOpen
編集時 onEdit
インストール時 onInstall
GETリクエスト送信時 doGet
POSTリクエスト送信時 doPost

フォーム送信時は関数名でのトリガー設定はできません。

トリガーの概要と使用例

使用頻度の高そうなトリガーについて使用例とともに説明していきます。

起動時

スプレッドシートが開かれたときに実行するトリガーです。

以下のように設定してください。

  • 手動で設定する場合:イベントの種類で起動時を選択
  • 関数名で設定する場合:関数名をonOpenに設定

使用例

  • スプレッドシートが開かれたときにUIを追加
main.gs
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('メニュー名').addItem('メニューアイテム', '設定したい関数').addToUi();
}

image.png

こちらの例では、スプレッドシートが開かれたときにUIを表示するようトリガーを設定しておくことで、カスタムメニューを追加しています。

編集時

スプレッドシートのセルの値が変更されたときに実行するトリガーです。

以下のように設定してください。

  • 手動で設定する場合:イベントの種類で編集時を選択
  • 関数名で設定する場合:関数名をonEditに設定

編集時と変更時の違い
手動でトリガーを設定する際に、変更時という項目があります。
編集時ではセルの値を変更したときのみトリガーが発動します。
対して、変更時ではセルの値の変更に加えて、行や列の追加/削除・書式の変更などでもトリガーが発動します。

使用例

  • 特定のセルに記入があった場合に、他のセルに自動的に値を挿入
main.gs
function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;

  if (range.getColumn() === 2 && range.getRow() > 1) { 
    var currentDate = new Date();
    var formattedDate = Utilities.formatDate(currentDate, Session.getScriptTimeZone(), 'yyyy/MM/dd');

    sheet.getRange(range.getRow(), 1).setValue(formattedDate);
  }
}

image.png

こちらの例では、B列に作業内容が記入されたとき、A列に記入した日付が挿入されます。

フォーム送信時

フォームが送信されたときに実行するトリガーです。

以下のように設定してください。

  • イベントの種類でフォーム送信時を選択

使用例

  • フォーム入力者にメールを送信する

GoogleFormを作成し、スプレッドシートで表示より表示されたスプレッドシートからGASエディタを開き、関数を記入してください。
image.png

main.gs
function onFormSubmit(e) {
  var email = e.values[1]; //[0]にはデフォルトでタイムスタンプが記入される

  var subject = "フォームの送信について";
  var message = "ご回答いただきありがとうございました。ご返答をしばらくお待ちください。";
  
  MailApp.sendEmail(email, subject, message);
}

こちらの例ではフォームを送信すると、記入したメールアドレスにメールが送信されます。

image.png

インストール時

アドオンが初めてインストールされたときに実行するトリガーです。
(つまり、初回実行時に1回だけ実行されます。)

以下のように設定してください。

  • 関数名をonInstallに設定

使用例

  • あらかじめ何かを記入したいとき
main.gs
function onInstall(e) {
  createTable();
}

function createTable() {
  var properties = PropertiesService.getScriptProperties();
  var tableCreated = properties.getProperty('tableCreated');

  if (!tableCreated) {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    
    sheet.appendRow(['hello']);
    
    properties.setProperty('tableCreated', 'false');
  }
}

image.png

こちらの例ではスクリプトをはじめて実行したときにhelloと挿入するようになっています。

GETリクエスト送信時

GETリクエストを送信することでスクリプトを実行するトリガーです。

以下のように設定してください。

  • 関数名をdoGetに設定

使用例

  • スプレッドシートの内容をHTML形式で公開
    (こちらのサイトを参考にしています。)
main.gs
function doGet() {
  let sheet = SpreadsheetApp.getActive().getActiveSheet();
  let values = sheet.getDataRange().getValues();
  let template = HtmlService.createTemplateFromFile("htmlFileName");
    template.links = values;
  return template.evaluate();
}

なお、HTMLファイルはファイル横のプラスマークからHTMLを選択することで作成できます。

image.png

WebアプリケーションとしてデプロイしたURLにGETリクエストを送ると、doGetが実行され、スプレッドシートの内容をHTML形式で公開します。

POSTリクエスト送信時

POSTリクエストを送信することでスクリプトを実行するトリガーです。

以下のように設定してください。

  • 関数名をdoPostに設定

doPost使用例

  • HTML上のフォームの回答結果をスプレッドシートで記録
choice.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
 </head>
 <h1>好きなアイスは?</h1>
    <form>
      <label>
        <input class="accented" type="radio" name="choice" value="イチゴ" checked> イチゴ
      </label>
      <label>
        <input class="accented" type="radio" name="choice" value="バニラ"> バニラ
      </label>
      <label>
        <input class="accented" type="radio" name="choice" value="チョコ"> チョコ
      </label>
    </form>
    <button class="btn" type="button" onclick="submitVote()">送信</button>

    <script>
    function submitVote() {
        const choice = document.querySelector('input[name="choice"]:checked');
        
        google.script.run.withSuccessHandler(function(result) {
          alert("投票ありがとう");
        }).doPost(choice.value);
      }
    </script>
  </body>
</html>
main.gs
function doPost(choice){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('answer');
  sheet.appendRow([new Date(),choice]);
}

image.png
こちらの例では、フォームが送信し、POSTリクエストが送信されるとスクリプトが起動し、スプレッドシートに回答が反映されます。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?