【無料】HerokuのclockでPythonのプログラムを定期実行する手順

 

★悩み★
・HerokuでPythonのプログラムを定期実行(10分間隔で実行など)できる?
・無料(クレジットカード登録不要)でPythonプログラムを定期実行したい。
・HerokuのclockでPythonのプログラムを定期実行する手順を知りたい。


こういった「悩み」に答えます。

 

★本記事の内容★
① HerokuのclockでPythonのプログラムを定期実行するための準備を解説
② HerokuのclockでPythonのプログラムを定期実行する手順を解説



これからご紹介する「【無料】HerokuのclockでPythonのプログラムを定期実行する手順」を実践したことで、筆者は15分以内で「HerokuでPythonのプログラムを10分間隔で定期実行」できました。

記事の前半では「HerokuのclockでPythonのプログラムを定期実行するための準備」を解説します。記事の後半では「HerokuのclockでPythonのプログラムを定期実行する手順」を紹介します。

この記事を読み終えることで、「Herokuを用いてPythonのプログラムを無料(クレジットカードをWebサイトに登録不要)で定期実行できる」状態になります。
 

★Herokuのclockとは★
Herokuは、機能の1つとして「Custom Clock Processes(clockは略称)」を提供しています。本機能を利用すること、Heroku上で定期的にある処理(Pythonで作った処理など)を実行できます。また、本機能は無料で利用できる機能です。(クレジットカードの登録など不要)
Herokuの特徴(メリットとデメリット)やユースケースを知りたい方には、以下の記事がオススメです。
>> 【要点】Herokuとはを解消!初心者向けに特徴から使い方まで解説


 

HerokuのclockでPythonのプログラムを定期実行するための準備


「HerokuのclockでPythonのプログラムを定期実行するための準備」に関してご紹介します。

★HerokuのclockでPythonのプログラムを定期実行するための準備★
手順1:Herokuのアカウントを新規作成
手順2:HerokuのCLI(herokuコマンド)をインストール
手順3:HerokuのCLI経由でHerokuにログイン



上記手順を実施することで、「HerokuのCustom Clock ProcessesでPythonのプログラムを定期実行するための準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年12月7日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)




以降で、上記「HerokuのclockでPythonのプログラムを定期実行するための準備」の各手順に関してご説明します。
 

手順1:Herokuのアカウントを新規作成

「手順1:Herokuのアカウントを新規作成」に関して解説します。
 

HerokuのCustom Clock Processesを使いプログラムを定期実行するためには、Herokuのアカウントが必要です。



Herokuのアカウントを新規作成する手順に関しては、以下の記事をごらんください。
 

 

既にHerokuのアカウントを持っている場合、本手順を省略してください。



以上で、「手順1:Herokuのアカウントを新規作成」は完了です。
 

手順2:HerokuのCLI(herokuコマンド)をインストール

「手順2:HerokuのCLI(herokuコマンド)をインストール」に関して解説します。
 

HerokuのCustom Clock Processesを使いプログラムを定期実行するために、HerokuのCLI(herokuコマンド)をインストールしましょう。



HerokuのCLI(herokuコマンド)をインストールする手順に関しては、以下の記事をごらんください。
 

 

既にHerokuのCLI(herokuコマンド)をインストールしている場合、本手順を省略してください。



以上で、「手順2:HerokuのCLI(herokuコマンド)をインストール」は完了です。
 

手順3:HerokuのCLI経由でHerokuにログイン

「手順3:HerokuのCLI経由でHerokuにログイン」に関して解説します。
 

HerokuのCustom Clock Processesを使うには、HerokuのCLI経由でHerokuにログインしておく必要があります。



HerokuのCLI(herokuコマンド)経由でHerokuにログインする手順に関しては、以下の記事をごらんください。
 

 

既にHerokuのCLI(herokuコマンド)経由でHerokuにログインしている場合、本手順を省略してください。



以上で、「手順3:HerokuのCLI経由でHerokuにログイン」は完了です。
 

上記の流れで、HerokuのCustom Clock ProcessesでPythonのプログラムを定期実行するための準備ができました。


 

HerokuのclockでPythonのプログラムを定期実行する手順


「HerokuのclockでPythonのプログラムを定期実行する手順」に関してご紹介します。

★HerokuのclockでPythonのプログラムを定期実行する流れ★
手順1:HerokuにデプロイしたいPythonアプリを作成
手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール
手順3:定期実行したいPythonのプログラムを作成
手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)
手順5:HerokuのCustom Clock Processesを起動(有効化)
手順6:起動したHerokuのCustom Clock Processesの動作確認



上記手順を実施することで、「HerokuのCustom Clock ProcessesでPythonのプログラムを定期実行」ができます。
  

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年12月7日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)



以降で、上記「HerokuのclockでPythonのプログラムを定期実行する流れ」の各手順に関してご説明します。
 

手順1:HerokuにデプロイしたいPythonアプリを作成

「手順1:HerokuにデプロイしたいPythonアプリを作成」に関して解説します。
 

HerokuのCustom Clock Processesを使うために、HerokuにデプロイできるPythonアプリを作成しましょう。



Herokuにデプロイできる「Pythonアプリ」の作成手順に関しては、以下の記事をごらんください。
 


上記記事で作成したPythonアプリを想定として、以降の手順を解説します。


以上で、「手順1:HerokuにデプロイしたいPythonアプリを作成」は完了です。
 

手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール

「手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール」に関して解説します。
 

HerokuのCustom Clock Processesを使うために、手順1で作成したPythonアプリで「APScheduler」ライブラリを利用できる状態にしましょう。



手順1で作成したPythonアプリで「APScheduler」ライブラリを利用できる状態にするために、「requirements.txt」に「apscheduler」を追記してください。

# cd <FastAPIアプリケーションのディレクトリ>
# ls -1
Procfile          # Heroku上でFastAPIアプリを起動するためのコマンドを記載
main.py           # FastAPIアプリのプログラム
requirements.txt  # FastAPIアプリで利用するPythonのライブラリを記載
runtime.txt       # 利用するPythonのバージョンを記載
# cat Procfile 
web:  uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000}
# cat runtime.txt 
python-3.8.5
# 
# cat requirements.txt 
fastapi
uvicorn
apscheduler  ★この行を追加★
requests     ★定期実行したいPythonプログラムで使うため追加★



以上で、「手順2:定期実行するためのAPScheduler(Pythonライブラリ)をインストール」は完了です。
 

手順3:定期実行したいPythonのプログラムを作成

「手順3:定期実行したいPythonのプログラムを作成」に関して解説します。
 

HerokuのCustom Clock Processesを使って、定期実行したいPythonのプログラムを作成しましょう。



「Heroku上に配備したPythonアプリに定期的にアクセスする」Pythonプログラムを作成します。プログラムは以下となります。プログラム中の「適宜変更」と書いてある部分は、自分用に書き換えてください。

## 利用するライブラリをインポート
from apscheduler.schedulers.blocking import BlockingScheduler
import requests

## 定期実行したい処理
def job_0():
  ## Heroku上にデプロイしたPythonアプリのURL
  url = "URL"# 適宜変更

  ## Heroku上にデプロイしたPythonアプリにアクセス
  response = requests.get(url)
  print("curl for wake on を投げました。status code:" + str(response.status_code))

## APSchedulerの変数を作成
scheduler = BlockingScheduler()

## APSchedulerに定期実行したい処理を登録
scheduler.add_job(job_0, 'cron', minute=10)

## APSchedulerを開始
scheduler.start()



上記プログラムを「clock.py」として、以下の場所に保存してください。

# cd <FastAPIアプリケーションのディレクトリ>
# ls -1
Procfile          # Heroku上でFastAPIアプリを起動するためのコマンドを記載
main.py           # FastAPIアプリのプログラム
requirements.txt  # FastAPIアプリで利用するPythonのライブラリを記載
runtime.txt       # 利用するPythonのバージョンを記載
clock.py          # HerokuのCustom Clock Processesで実行するPythonプログラム



ちなみに、APSchedulerの詳しい使い方を知りたい方は、以下の記事をごらんください。
 



以上で、「手順3:定期実行したいPythonのプログラムを作成」は完了です。
 

手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)

「手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)」に関して解説します。
 

「HerokuのCustom Clock Processesを使用する」設定にした後に、Herokuにデプロイしましょう。



HerokuのCustom Clock Processesするために、「Procfile」に「clock」を追記してください。

# cat Procfile 
web:  uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000}
clock: python clock.py ★この行を追加★



ファイル編集後、作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)しましょう。Herokuにデプロイする手順に関しては、以下の記事をごらんください。
 



以上で、「手順4:作成したPythonのアプリとプログラムをHerokuにデプロイ(配備)」は完了です。
 

手順5:HerokuのCustom Clock Processesを起動(有効化)

「手順5:HerokuのCustom Clock Processesを起動(有効化)」に関して解説します。
 

Herokuにデプロイしただけでは、「Custom Clock Processes」は起動されません。



HerokuのCustom Clock Processesを起動(有効化)するために、以下のコマンドを順に実行して下さい。

# cd <FastAPIアプリケーションのディレクトリ>
# ↓↓ Heroku上で稼働しているプロスセスを確認 ↓↓ 
# heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000} (1)
web.1: up 2021/11/30 14:40:57 +0900 (~ 6m ago)

# ↓↓ Heroku上でCustom Clock Processesを起動 ↓↓ 
# heroku ps:scale clock=1
Scaling dynos... done, now running clock at 1:Free
# heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
Free Dyno Hours | Heroku Dev Center
Every personal Heroku account is allocated a pool of hours which you can use with Free dynos. This article describes the behavior of apps using Free dynos.
=== clock (Free): python clock.py (1) clock.1: starting 2021/11/30 14:49:02 +0900 (~ 2s ago) === web (Free): uvicorn main:app --reload --host=0.0.0.0 --port=${PORT:-5000} (1) web.1: up 2021/11/30 14:40:57 +0900 (~ 8m ago)



コマンド実行後、「clock (Free): python clock.py」が表示された場合、「HerokuのCustom Clock Processesを起動(有効化)できた」と判断できます。
 

★heroku ps:scaleコマンドのリファレンス★
heroku ps:scale <対象機能>=<起動数>
処理内容:Herokuの機能を指定した数だけ起動
参照:heroku ps:scaleコマンドのリファレンス(公式サイト)



以上で、「手順5:HerokuのCustom Clock Processesを起動(有効化)」は完了です。
 

手順6:起動したHerokuのCustom Clock Processesの動作確認

「手順6:起動したHerokuのCustom Clock Processesの動作確認」に関して解説します。
 

HerokuのCustom Clock Processes機能により、定期的にPythonプログラムが実行されているかを確認しましょう。



HerokuのCustom Clock Processes機能により、定期的にPythonプログラムが実行されているかを確認するために、以下のコマンドを実行してください。

# cd <FastAPIアプリケーションのディレクトリ>
# heroku logs --tail
2021-12-07T03:20:00.037022+00:00 app[clock.1]: curl for wake on を投げました。status code:200
2021-12-07T03:19:59.922146+00:00 app[web.1]: INFO:     18.234.51.126:0 - "GET / HTTP/1.1" 200 OK



コマンド実行後、「curl for wake on を投げました。」が出力された場合、「HerokuのCustom Clock Processesを用いて定期的にPythonプログラムを実行できた」と判断できます。
 

以上で、「手順6:起動したHerokuのCustom Clock Processesの動作確認」は完了です。
 

上記の流れで、HerokuのCustom Clock Processesを用いて、定期的にPythonのプログラムを実行できました。



ちなみに、「Herokuを用いたWebアプリケーション作成手順」を体系的に学びたい方には、以下がおすすめです。無料体験もあるので、検討する価値ありです。

TechAcademy「Webアプリケーションコース」(無料体験あり)


 

【まとめ】HerokuのclockでPythonのプログラムを定期実行する手順【無料】


いかがでしたでしょうか?「Pythonの処理を定期実行するためのAPSchedulerライブラリの紹介」、「HerokuのCustom Clock Processesで定期的にPythonプログラムを実行するまでの流れ」を解説し、以下の悩みを解決しました。
 

★悩み★
・HerokuでPythonのプログラムを定期実行(10分間隔で実行など)できる?
・無料(クレジットカード登録不要)でPythonプログラムを定期実行したい。
・HerokuのclockでPythonのプログラムを定期実行する手順を知りたい。



「PythonのAPSchedulerライブラリ」と「HerokuのCustom Clock Processes機能」を使うだけで、Heroku上でPythonのプログラムを定期実行できます。「無料でかつクレジットカードもWeb上に登録したくない」と考えているあなたに本記事はおすすめですので、本記事を参考に「HerokuでPythonのプログラムを定期実行」を実践してください。

コメント