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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?