【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けGoogle Apps Scriptのシリーズとして、名言Botの作成の仕方をお伝えしています。

前回の記事はコチラ。

【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
Google Apps ScriptでBotを作りながらその基本を学ぶシリーズです。今回は、関数から別の関数を呼び出す方法です。functionの書き方、引数、仮引数、戻り値などについても解説します。

別のfunctionの呼び出しについてお伝えしましたね。

これで、スプレッドシートの名言をChatworkに送ることができるようになっているのですが、ほら、毎回手動で実行してたじゃないですか。

GASの大きな特徴の一つとして、トリガーがありますよ。

ということで、Google Apps Scriptで時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法です。

では、行ってみましょう!

前回のおさらい

まず、スプレッドシートは以下のように名言がリストされています。

スプレッドシートの名言リスト

そして、この名言を一つずつChatworkに送信するスクリプトを前回までで作成していまして、コチラであります。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet(); 
  const lastRow = sheet.getLastRow();
  
  for(let i = 2; i <= lastRow; i++) {
    if(!sheet.getRange(i, 4).getValue()){ 
      const body = sheet.getRange(i, 1).getValue();
      sendMessage(body);
      sheet.getRange(i, 4).setValue(true);
      
      if(i >= lastRow) {
        sheet.getRange(2, 4, lastRow - 1).clearContent();
      }
      break;
    }
  }
}

function sendMessage(body){
  const cw = ChatWorkClient.factory({token: 'ここにAPIトークンを入力してください'});
  cw.sendMessageToMyChat(body);
}

このmyFunctionを定期的に決まった時刻に実行していきたいわけですね。

トリガーとは

GASでは指定した日時、スプレッドシートの編集、フォームの送信といった出来事(イベントといいます)に合わせて、スクリプトを実行することができる、トリガーという機能があります。

これはまさにGoogleのサーバーで実行されるGASならではの機能でして、つまり皆さんのPCを閉じていたって、皆さんがスヤスヤ眠っていたって、決まった時間や動作に応じてスクリプトを実行できるわけです。

GASのトリガーには、あらかじめ決められた関数名でスクリプトを書くだけで実行されるシンプルトリガーと、Apps Scriptダッシュボードから設定をするインストーラブルトリガーと、2種類があります。

今回は、決められた時刻に実行する時限式のトリガーを設置したいのですが、時限式のトリガーはインストーラブルトリガーでのみ設置できますので、そちらを解説しますね。

インストーラブルトリガーの設置方法

GASで時限式のインストーラブルトリガーを設置する方法を解説していきます。

まず、スクリプトエディタで時計っぽいマークの「現在のプロジェクトのトリガー」をクリックします。

「現在のプロジェクトのトリガー」アイコン

別タブとして、「Apps Scriptダッシュボード」のトリガーの画面が開きます。

Apps ScriptダッシュボードはGASのプロジェクトの管理やその実行状況、トリガーの設置などを行えるステキ画面です。

スクリプトエディタからもたくさん導線がありますが、以下URLでいつでもアクセスできますので、ブックマークしときましょう。

Apps Script – Google Apps Script

さて、続いて「トリガーを追加」のボタンをクリックです。

Apps Scriptダッシュボードのトリガー画面

すると以下のように「GAS Botsのトリガーを追加」というダイアログが表示されます。

「トリガーを追加」ダイアログ

この画面を使ってトリガーの設定&追加をしていきます。

実行する関数とイベントのソースを選択

「実行する関数を選択」は、トリガーで発動させたい関数名を指定します。今回は「myFunction」ですね。

「実行するデプロイを選択」はひとまずそのまま「Head」でOK(おそらく変更できませんし)。

「イベントのソースを選択」は以下の3種類から選べます。

  • 時間主導型
  • スプレッドシートから
  • カレンダーから

今回は「時間主導型」ですね。

ちなみに、「スプレッドシートから」を選ぶと、次の選択肢で

  • 起動時
  • 編集時
  • 値の変更時
  • フォームの送信時

を選べます。

「カレンダーから」を選ぶと「予定を更新しました」の一択です。

時間ベースのトリガー

時間主導型を選択すると、次のプルダウンが「時間ベースのタイマー」になります。

  • 特定の日時
  • 分タイマー
  • 時タイマー
  • 日タイマー
  • 週タイマー
  • 月タイマー

これらの中から、どの単位でトリガーを実行するかを選ぶことができます。

今回はすぐに実行確認したいので「分タイマー」にしておきましょう。

すると、その次のプルダウン「時間の間隔を選択」

  • 1分ごと
  • 5分ごと
  • 10分ごと
  • 15分ごと
  • 30分ごと

と選ぶことができます。今回は「1分ごと」にしてみますよ。

設定が完了した状態がこちら。

GASで時間ベースのトリガーを設置する

これで「保存」をすると、トリガー設置完了です。

Apps Scriptダッシュボードで以下のように新たなトリガーが追加していることが確認できます。

トリガーが追加された

なお、トリガーはスクリプトからもコントロールすることができますので、ご興味ある方は以下記事もご覧ください。

Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定
Google Apps Scriptのトリガー設定は毎日実行する場合は、午前8時~9時のように1時間の幅があります。また、時間を細かく指定するには、2018年2月16日08:30のように日にちも設定する必要があります。 この二つを使用して、毎日指定した時間にスクリプトを実行させるトリガーを設定します。

トリガーの実行確認

では、実行の確認をしてみましょう。

しばらく放置した末に、Chatworkのマイチャットを確認すると…

以下のように、名言が何回か送信されていますね。

GASでChatworkに時限式で名言を送信する

なお、トリガーを止めたい場合は、Apps Scriptダッシューボードで、該当のトリガーの三点リーダーアイコンから削除することができます。

GASで設置したトリガーの削除

このままだと1分ごとに送信されまくりますからね。

まとめ

Google Apps Scriptのトリガーとは何か、また時限式のトリガーの設置方法についてお伝えしました。

繰り返しになりますが、トリガーは完全クラウド環境のGASならではの素敵機能です。

PC閉じていても実行してくれるようになります。つまり、完全自動になります。

ぜひ活用くださいね!

次回は、プロパティサービスについてお伝えします。

【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
初心者向けGoogle Apps Script入門として名言Botの作り方をお伝えしています。今回は、コードに直書きしたくないデータを格納する機能プロパティストアについて、またスクリプトプロパティの入力の方法です。

どうぞお楽しみに!

連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ

Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。
  1. 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
  2. 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
  3. 【初心者向けGAS】プログラミングに必須の変数&定数の使い方とデータ型について
  4. 【初心者向けGAS】ログを表示するconsole.logの使い方とテンプレート文字列
  5. 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
  6. 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
  7. 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
  8. 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
  9. 【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本
  10. 【初心者向けGAS】条件分岐をするif文の使い方の超基本
  11. 【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
  12. 【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
  13. 【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する
  14. 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
  15. 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識
  16. 【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法
  17. 【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例
  18. 【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
  19. 【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
  20. 【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
  21. 【初心者向けGAS】スクリプトプロパティを操作してそのデータを取り出す方法
  22. 【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
  23. 【初心者向けGAS】Chatworkのメッセージ記法でBot送信するメッセージを装飾する方法
  24. 【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント

  1. 石田 より:

    こんにちは。

    こちらのサイトで GAS の勉強をさせてもらっています。

    スクリプトの7行目は下記のようにする方が良いのではと思います。
    現:Logger.log(sheet.getRange(i, 1).getValue());
    正: sendMessage(sheet.getRange(i,1).getValue());

    よろしくご検討ください。

    石田

    • 石田さま

      コメントありがとうございます!
      おっしゃる通りですね…失礼しました。

      修正をさせていただきました。
      今後とも、当ブログをよろしくお願いいたします。

タイトルとURLをコピーしました