【Python】無料でプログラムを定期的に実行する方法(Heroku)【20分でできる!】

プログラミング

おはようございます、こんにちは、こんばんは。

ひよこです(@hiyoko_lets_go)。

突然ですが、自分の生活を豊かにしようと色々なプログラムを書いているとプログラムの実行さえ自動化したくなってきますよね。

今回は、Pythonプログラムを定期的に実行する方法をご紹介します。※Pythonを例にご紹介しますがPython以外もいけます

 

こんな方におすすめ!
・自作のプログラムを定期的に実行したい(定期的にメールを送りたい、定期的に情報を取得したいなど)
ひよこ
ひよこ

私は株式の情報を取得し通知する機能を実装し、今回ご紹介する方法で定期的に実行しています。

結論:Herokuなら無料で実現できる

Herokuというクラウドサービスを利用し、プログラムの定期実行を行います。

HerokuはSalesforce社の製品の一つで、課金制度もありますが無料枠の範囲内でおおよそのプログラムの定期実行を実現できます(無料枠は1000時間/月)。

Herokuを利用するまでの流れは以下の通りです。

◆Herokuを利用するまで
・Herokuとgitのインストール

・Herokuのアカウント作成
・実行したいプログラム準備
・Heroku上で新規アプリ作成
・Herokuへアプリデプロイ
・スケジューラ設定

Herokuとは

Herokuとは、Pythonなどのプログラミング言語で記述されたアプリケーションを実行するための環境です。

通常アプリケーションの公開には多くの作業が必要です。データベースの設計やサーバ環境の構築などなど。。。

ひよこ
ひよこ

それらをすべて担い、アプリケーションの実行をサポートしてくれるサービスですね。

\Herokuの解説はこちら/

今回はHerokuの定期的にプログラムを実行してくれる機能を利用して、Pythonプログラムの定期実行を実現したいと思います。

Herokuの利用方法

ここから、Herokuの利用方法をスクリーンショットを用いながら説明していきます。※Windowsをベースに行います

インストール

まずは、githeroku CLIをインストールしましょう。

ひよこ
ひよこ

インストールされていることが確認できれば飛ばしてOK!

git

こちらからgitの最新バージョンをインストールしましょう。

コマンドプロンプトにて以下のコマンドを実行することでインストールできているか確認することができます。

$ git --version

heroku CLI

こちらからheroku CLIをインストールしましょう。

git同様に、コマンドプロンプトにて以下のコマンドを実行することでインストールできているか確認することができます。

$ heroku -v

Herokuアカウント作成

次にこちらからHerokuのアカウントを作成します。「無料で新規登録」からアカウントを作成しましょう。※日本語版、英語版などで表記が異なる場合があります。

Herokuアカウント作成(必要情報入力画面)

入力情報
・氏名(苗字、名前)
・メールアドレス
・会社名
・役職
・国
・主な開発言語

必要情報を入力すると入力したアドレスにHerokuからメールが送られてきます。メール内に記載されているURLリンクを踏むと、パスワード設定画面に遷移します。

Herokuアカウント作成(パスワード設定画面)

パスワード条件
・8文字以上
・アルファベット、数字、記号が含まれている

パスワード設定を終えログインボタンを押すと、以下の画面に遷移します。

Herokuアカウント作成(ログイン完了画面)

これでアカウント作成は完了です。

プログラム準備

Herokuのアカウントが準備できたところで、続いてはHerokuで実行するプログラムを用意していきます。

今回は、「足し算の結果を定期的にLINEに通知するプログラム」を実装したいと思います。

ひよこ
ひよこ

ものすごく意味不明ですが、お付き合いくださいm(_ _)m

サンプルコードは以下の通りです。ファイル名は問いませんが、ここでは「add.py」として保存しました。Pythonプログラムの実行結果をLINEに通知する具体的な方法はこちら

import requests

#LINEに通知する関数
def line_notify(message):
 line_notify_token = 'ここにトークンをペーストしてください'
 line_notify_api = 'https://notify-api.line.me/api/notify'
 payload = {'message': message}
 headers = {'Authorization': 'Bearer ' + line_notify_token}
 requests.post(line_notify_api, data=payload, headers=headers)

#実行したい処理
def hoge(a, b):
 return a + b

if __name__ == '__main__':
 try:
  ans = hoge(1, 1)
 except Exception as e:
  line_notify(e)
 else:
  text = "\nプログラムの実行を完了しました\n"
  text += "実行結果:"+str(ans)
  line_notify(text)

新規アプリ作成

次項でご説明しますが、Herokuでアプリケーションを実行するためには、準備したファイルをHerokuへ渡す必要があります。

その前段階として、Herokuへ渡すファイルの準備、そして渡すための準備を整えていきます。

具体的な流れとしては、以下の通りです。

Herokuへのデプロイ方法
1. ローカルPCにフォルダ作成
2. 作成したプログラムたちをフォルダに格納
3. Heroku上で新規アプリを作成
4. プログラムをHerokuへデプロイ

ローカルPCにフォルダ作成

適当なフォルダ(notify_line)を作成し、先ほど用意したadd.pyを格納しておきます。

notify_line
L add.py

作成したプログラムたちをフォルダに格納

既にadd.pyを格納していますが、これ以外にあと2つ「runtime.txt」と「requirements.txt」を用意する必要があります。

  • runtime.txt:Pythonのバージョンを記載するファイル
  • requirements.txt:必要なライブラリを記載するファイル

 

Pythonのバージョンはコマンドプロンプトから以下のコマンドを実行することで確認可能です。

$ Python -V

runtime.txtには、以下のような形式で記載しておきましょう。

python-3.7.6

 

プログラムを実行するのに必要なライブラリもコマンドプロンプトから簡単に確認することができます。

$ pip freeze> requirements.txt

これでrequirements.txtが生成されます。

ひよこ
ひよこ

たくさんのライブラリをインストールしている環境の場合、余計なライブラリまで含まれてしまいます。ファイルの中身を確認して不要なライブラリは削除しておきましょう。

 

これで必要なファイルはすべて準備できましたので、notify_lineフォルダに格納しましょう。

notify_line
L add.py
L runtime.txt
L requirements.txt

Heroku上で新規アプリを作成

次はHeroku上に新規アプリを作成しましょう(ファイルのデプロイ先になります)。

まずは、先ほど作成したnotify_lineフォルダへ移動します。「~」部分はあなたの環境に合わせて記載してください。

$ cd ~/notify_line

そして以下のコマンドを実行し、Herokuへログインします。

$ heroku login

以下の画面から、ユーザ名やパスワードを入力するよう求められます。

ログインできたら、コマンドプロンプトから新規アプリを作成していきます。「アプリ名」の部分はあなたのアプリ内容に沿った内容を記載しましょう。

ひよこ
ひよこ

アプリ名が既に使用されている場合にはエラーが出るので再度アプリ名を変更してトライしましょう!

$ heroku create アプリ名

  • https://アプリ名.herokuapp.com/ :作成したアプリのURL
  • https://git.heroku.com/アプリ名.git :リモートリポジトリのURL

    これで準備はすべて完了です。

    アプリデプロイ

    それではここから準備した各ファイルをHerokuへデプロイしていきます。

    gitを用いながら、以下のコマンドを1つずつ実行していきましょう。

    $ git init
    $ git remote add heroku https://git.heroku.com/アプリ名.git
    $ git add .
    $ git commit -m "app first commit"
    $ git push heroku master
    ひよこ
    ひよこ

    gitの使い方はグーグル先生にお任せしますが、addしてcommitしてpushするというのが基本の流れになります。

    最終的に以下のような結果が返って来ればOKです(... done.)。

     

    エラーが出る場合、主に以下のケースが考えられます。

    • Pythonのバージョンが古く、Herokuが対応していない(執筆時点で、Herokuは3.6.15以上に対応しています。正確な情報は公式HPをご覧ください)
    • ライブラリの中にpipでインストールできないライブラリが含まれている(不要なライブラリはrequirements.txtから削除するようにしましょう)

    スケジューラ設定

    アプリのデプロイまで完了したら、いよいよ定期実行のためにスケジューラを設定していきます。

    クレジットカード情報の登録

    まずはクレジットカード情報を入力する必要があります。

    ひよこ
    ひよこ

    なぜ??という感じですが、クレジットカード情報を入力しておかないと実行できないようになっています。
    ただ、設定を変更しない限り課金されることはないです。

    Herokuの無料枠
    無料枠を超えるとアプリは停止し利用不可となります。
    したがって、自動的に課金されるわけではありませんまた、無料枠の80%と100%の利用を超えるとメールにより通知が来るようになっています。

    クレジットカード情報はこちらから登録することができます。

    Herokuクレジットカード情報登録画面

    スケジューラ設定

    いよいよスケジューラ設定です。コマンドプロンプトから以下のコマンドを実行します。

    $ heroku addons:add scheduler:standard

    以下の結果が返って来ればOKです。クレジットカード情報が登録されていない場合ここでエラーが出ます。

    次に以下のコマンドを実行し詳細設定を行います。

    $ heroku addons:open scheduler

    Herokuのブラウザが立ち上がり、スケジュールと実行コマンドの設定画面へ遷移します。

    スケジュール
    ・頻度(1日ごとなど)
    ・時間(米国時間のため、日本時間-9h)
    実行コマンド
    ・コマンドプロンプト上で実行する場合と同じコマンドを記載(今回は、add.pyを実行する想定)
    ひよこ
    ひよこ

    これでスケジューラの設定も完了!あとは指定した時間に足し算の結果がLINEに通知されればOK!(笑)

    まとめ

    今回は、Pythonプログラムを定期的に実行する方法をご紹介しました。

    Pythonに限らない汎用的な方法としてHerokuを用いて、プログラムの定期実行を実現しました。

    Herokuは応用性の高いサービスで個人利用としても多くの利用方法が考えられます。APIを利用してリアルタイムに情報を取得・分析し、メールやLINEで最新の結果を通知するなど、Pythonによる自動化の恩恵を感じていただけるのではないでしょうか。

    わたしは個人投資家としての側面もあり、株式情報を分析して定期的に情報を通知してくれる機能は非常に便利だと思っています(またブログにします)。

     

    本ブログでは、株式やプログラミングに関する記事を投稿しています。

    プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。

    独学で挫折してしまう方は、プログラミングスクールという方法がおすすめです。

    私の一押しは『TechAcademy』です。

    質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。

    無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。

    スキルアップを目指したい方におすすめのオンライン学習サービス

    Profile
    この記事を書いた人

    現役データサイエンティスト
    【投資×プログラミング】に関するブログを運営しています。

    ■発信内容
    ・・・プログラミング(Python)、銘柄分析、株価予測など
    ■投資対象
    ・・・インデックス投資、米国ETF、米国個別株

    普段は1万人規模の大企業で世にコンテンツを生み出してます。

    ひよこをフォローする
    プログラミング開発
    ひよこをフォローする
    副業プログラミング応援団

    コメント

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