LoginSignup
3
1

More than 3 years have passed since last update.

GASを使ってHerokuにデプロイしたアプリケーションを定期的に実行する

Last updated at Posted at 2021-01-04

本稿では、GAS(Google Apps Script)を使ってHerokuにデプロイしたアプリケーションを定期的に実行するスクリプトを作成した際の備忘録的な内容となっています。
あくまでGASの内容なので、Herokuアプリケーションの作成・デプロイといった内容には触れません。

※Herokuアプリケーションの作成・デプロイ方法については過去記事がありますので、ご参考までに。。。
Flask+gunicornを使って作成したTwitter連携アプリをHerokuにデプロイした話

前提条件

  • 定期的に実行したいHerokuアプリケーションがデプロイ済みであること
  • Googleアカウントを作成済みであること

GASプロジェクトの作成

GASプロジェクトを作成します。

  1. Google アプリからドライブを選択する。

  2. 新規をクリックし、コンテキストメニューをその他Google Apps Scriptの順に選択する。
    drive_select.jpg

  3. 画像のように無題のプロジェクトが作成され、スクリプトエディタが起動する。
    script_editor.jpg

  4. 保存をクリックするとプロジェクト名の設定ダイアログが表示されるので、プロジェクト名をtest_scriptに設定しOKをクリックする。
    edit_project_name.jpg

GASスクリプトの作成

GASスクリプトを作成します。

  1. スクリプトエディタに以下のコードを記述する。
    コード.gs
    function setTrigger() {
      var setTime = new Date();
      setTime.setHours(setTime.getHours() + 1);
      setTime.setMinutes(00);
      setTime.setSeconds(00);
      ScriptApp.newTrigger('sendMessage').timeBased().at(setTime).create();
    }
    
    function delTrigger() {
      const triggers = ScriptApp.getProjectTriggers();
      for(const trigger of triggers) {
        if(trigger.getHandlerFunction() == 'sendMessage') {
          ScriptApp.deleteTrigger(trigger);
        }
      }
    }
    
    function sendMessage() {
      delTrigger();
      setTrigger();
      var options = {
        muteHttpExceptions:true
      };
      var url = 'https://AppName.herokuapp.com/';
      var data = UrlFetchApp.fetch(url, options).getContentText();
    }
    

    sendMessage()のURL文字列に含まれているAppNameはご自身のHerokuアプリケーションのアプリ名に置き換えてください。

  2. 保存をクリックしてスクリプトを保存する。

GASスクリプトの実行

作成したスクリプトを実行します。

  1. 関数を選択コンボボックスからSendMessageを選択し、実行をクリックする。

実行結果の確認

スクリプトの実行結果を確認します。

  1. 現在のプロジェクトのトリガーをクリックする。

  2. 遷移先のページにトリガーが追加されていればOK。
    trigger.jpg

解説

  • sendMessage()
    このスクリプトのメイン関数です。以下の3つの機能を実行します。
    • delTrigger()で実行済みのトリガーをすべて削除します。
    • setTrigger()で次回実行時のトリガーを作成します。
    • 指定したURLへwebhookを飛ばします。
  • setTrigger()
    sendMessage()実行時に呼び出され、変数setTimeで設定した時間にトリガーを作成します。
    Date型のsetXxxs()関数によって年月日時分秒を設定可能です。
    サンプルコードでは、現在時刻+1時0分0秒にトリガーが設定されるようになっています。
    トリガーは定期的に作成されるため、上記を言い換えると毎時0分にトリガーが設定されます。
  • delTrigger()
    sendMessage()実行時に呼び出され、このスクリプトによって作成されたトリガーをすべて削除します。
    本関数実行後に新しいトリガーが作成されるため、トリガー一覧には常に実行予定のトリガーしか存在しません。

参考

3
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
3
1