Pythonのプログラムの定期実行が無料でできるHerokuのscheduler【10分で完了】

Python

Pythonのプログラムを定期実行したい時ってありますよね?

例えば、

  • 毎日特定のサイトをスクレイピングしたデータをGmailで送りたい
  • ツイッターのいいねを毎日定時に自動実行したい 

そんな時、Macならcron、Windowsだとタスクスケジューラーを使えば可能ですが、パソコンをずっと立ち上げておく必要があります。

または、VPSを月額で契約してそこで定期実行する方法がありますが、月々お金がかかります。

そこで、簡単なプログラムを定期実行したい時に便利なのがHerokuの無料枠でschedulerというアドオンを使う方法。

これを使えばパソコンを立ち上げておく必要もなく、無料で指定した時間にpythonのプログラムを定期実行できます。

今回の記事を読めば、設定時間約5から10分でPythonのプログラムを無料で自分の好きな時間に実行する方法を学べます。

Herokuのschedulerで定期実行の設定方法

それでは、Herokuのschedulerを設定する方法について解説していきます。

Herokuのアカウントをお持ちでない方は、あらかじめこちらからアカウントを作成しておきましょう。

gitとheroku CLIのインストール

MacでもWindowsでも、最初にすることはgitheroku CLIをパソコンにインストールすることです。(すでにインストールしてある方はこちらを飛ばして下さい。)

gitとherokuがインストールされているかどうかの確認はターミナルでそれぞれ下記のように入力してみて下さい。

$ git --version
$ heroku -v

もしインストールされている場合はそれぞれバージョンが表示されます。

gitのダウンロードはこちらから最新のバージョンがダウンロードできます。

次にHeroku CLIのインストールです。

Macの場合はターミナルで下記のコマンドを叩いてインストールするか、Heroku CLIのダウンロードのURLからheroku CLIをダウンロードしてインストールしておいて下さい。

$ brew tap heroku/brew && brew install heroku

Windowsの場合はheroku CLIのダウンロードのURLからダウンロードしてインストールします。

gitとHeroku CLIがインストールできたら、準備は完了です。

定期実行したいPythonのプログラムの準備

定期実行したいPythonのプログラムを用意します。

今回はメールを毎日定時に送信する下記のプログラムを使います。

# -*- coding: utf-8 -*-
import smtplib, ssl
from email.mime.text import MIMEText

data="メール定期送信テストの本文です。"

# アカウント情報の入力
gmail_account = "******@gmail.com"
gmail_password = "*********"

mail_to = "******@gmail.com"

# メールデータ(MIME)の作成
subject = "メール定期送信テスト"
body = data
msg = MIMEText(body, "html")
msg["Subject"] = subject
msg["To"] = mail_to
msg["From"] = gmail_account

# Gmailに接続、送信
server = smtplib.SMTP_SSL("smtp.gmail.com", 465,
    context=ssl.create_default_context())
server.login(gmail_account, gmail_password)
server.send_message(msg) # メールの送信
print("ok.")

ターミナルで作業するフォルダへ移動する

今回はデスクトップにgmailjidou(適当な名前)というフォルダを作ってそこにgmailauto.pyという定期実行したいプログラムを置いておきます。

まずはターミナルを立ち上げ、このgmailjidouのフォルダへ移動します。

$ cd /Users/自分のuser名/Desktop/gmailjidou

次に下記のコマンドでHerokuにログインします。

$ heroku login

すると、何かキーを押して下さいと表示されるので、とりあえず何かキーを入力します。

$ heroku: Press any key to open up the browser to login or q to exit: 

そうするとブラウザでHerokuのログイン画面が自動的に立ち上がるので、ユーザー名とパスワードでログインして下さい。

herokuログイン

ログインできたらまたターミナルに戻ります。

Herokuに新規にアプリを作る

次はHerokuに新規に定期実行用のアプリを作っていきます。

heroku create アプリ名

でアプリを作ることができます。

今回はアプリ名をgmautotestとします。

$ heroku create gmautotest

すると下記のように表示されてアプリが作成されます。

ここで、 https://gmautotest.herokuapp.com/ は今回作ったアプリのURLです。

https://git.heroku.com/gmautotest.git はリモートリポジトリのURLになるので、メモしておきましょう。

runtime.txtとrequirements.txtの作成

次にアプリに必要となる2つのファイルを作成していきます。

runtime.txt と requirements.txt の2つです。

runtime.txtはherokuでインストールするPythonのバージョンを書いておくファイルです。$ Python -VでPythonのバージョンを確認して、

python-3.7.6

という形でpythonのバージョンを記載して保存して下さい。(記載方法が違っていたらデプロイする際にエラーが出ます。

Herokuにデプロイする際にこのバージョンのPythonがインストールされることになります。

requirements.txtはローカルにインストールしてあるPythonのライブラリを書いておくファイルです。

$ pip freeze > requirements.txt

こちらのコマンドで作成可能です。こちらもHerokuにデプロイする時にこのリストに書いてあるライブラリがインストールされます。

herokuへアプリをデプロイ

次はgitを使ってherokuへアプリをデプロイしていきます。

下記のコマンドを順番に実行します。

$ git init
$ git remote add heroku https://git.heroku.com/gmautotest.git
$ git add . 
$ git commit -m "aap commit"
$ git push heroku master

ここで、git remote add heroku https://git.heroku.com/gmautotest.git

リモートに https://git.heroku.com/gmautotest.git  をherokuという名前で登録するという意味です。

これで、 git push する時にgit push リポジトリ名 master とせず、git push heroku masterするだけでよくなります。

無事にデプロイまで終わると下の画像のようになります。

デプロイ

もし、デプロイの際にエラーが出る場合はruntime.txtかrequirements.txtの記載に間違いがある場合が多いです。見直して見ましょう。

アプリにHeroku Schedulerの設定

次はHeroku Schedulerのアドオンをアプリに設定していきます。

Heroku Schedulerを使う場合は無料枠の範囲でもherokuにクレジットカードを事前に登録しておかなければいけません。(プランを変えない限り勝手に課金されることはありません。)

Herokuへクレジットカードの登録

クレジットカードは

HerokuのAccount settings→Billingタブ

Herokuへクレジットカードの登録

の部分で登録できます。

クレジットカードの登録が終わったら次はschedulerアドオンを追加していきます。

ターミナルで下記のコマンドを実行します。

$ heroku addons:add scheduler:standard

すると下記のような表示が出て、アドオンの追加ができます。

アドオンの追加

HerokuのSchedulerの詳細設定

次はHerokuのSchedulerの詳細設定を行っていきます。

下記のコマンドを実行して下さい。

$ heroku addons:open scheduler

するとブラウザが立ち上がり下のような画面が出るので

スケジューラー設定画面

Create jobをクリック

すると、自動実行したいプログラムと日時の設定の画面になります。

時刻の設定

注意点

時刻がUTCになっている点に注意しましょう。

日本時間=UTC+9時間なので、

設定する時間=実行したい時間-9

として時間を選んで下さい。

 

例えば、今回だと毎日13時に実行したいので、AM4時に設定します。

$の部分は指定時間に実行するコードを記入します。

今回だと

python gmailauto.py

になります。これでSave jobのボタンを押すと設定が完了です。

後は自動実行を待つだけになります。

毎日13:00になると

メールの受信

ちゃんとメールが届きました。ここまでで定期実行の設定は完了です。

コメント

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