【Heroku】Python × FlaskでLINE Botをホスティングする

2019年5月5日

この記事は以下の記事の続きです。今回はPythonで作成したプログラムをホスティングする方法について書いていきます。ホスティングの際は前回の記事で作成したコードをFlaskフレームワークを使用し、HTTPサーバ化します。

※LINEへのプッシュ通知機能のプログラムは以下の記事にて紹介しています。

【Python】PythonでLINEプッシュ通知を送る

ホスティング情報

フレームワーク:Flask 1.0.2

ホスティング:heroku

フレームワークとしてFlaskを採用

正直に言うとLINEへのプッシュ通知を行うだけにはフレームワークは必要ないです。ただし、私の場合はFlaskというフレームワークを使用し、HTTPサーバ化することにしました。フレームワークを使用する目的は今後の拡張性を考えてです。LINE Botプログラムに複数機能を追加した際のルーティングの容易性やDB接続を追加した際のをことを考えています。

とはいえ、そこまでBotに多機能性を求めないと思いますので、フルスタックフレームワークのDjangoではなく、Flaskを採用しました。

今回はルーティング機能を使います

今回はFlaskのルーティング機能のみを使用します。Flaskのルーティングはとてもシンプルで実行したいメソッドの上にアノテーションを付与するのみで大丈夫です。

from flask import Flask

@app.route("/line_notif", methods=["GET"])

前回の記事で記載したLINEへの通知メソッドにアノテーションを付与し、以下のようにします。

from flask import Flask
from linebot import LineBotApi
from linebot.models import TextSendMessage
from linebot.exceptions import LineBotApiError

LINE_ACCESS_TOKEN= "XXXXXXXXXXXXXXXXXXXX" # ラインアクセストークン
LINE_USER_ID= "YYYYYYYYYYYYYYYYYYYYYYYYY" # ライン

# ルーティング用に
@app.route("/line_notif", methods=["GET"])
def line_notif():
	line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)
 
	text_message ="テストメッセージです。"
	try:
		line_bot_api.multicast(
		[LINE_USER_ID], TextSendMessage(text=text_message)
	)
	except LineBotApiError as e:
		print(e)

これでHTTPのGETメソッドでLINE通知を送れるようになります。

Herokuでホスティングします

ホスティングサービスとしてはHerokuを使用します。Herokuを選んだ理由は以下の2点です。

  1. ホスティングが非常に簡単なため。
  2. ホスティングや定期実行の機能が無料で使用できるため。

以前PythonアプリケーションをHerokuにデプロイしたことがあるのですが、非常に簡単だったのが非常に良かったです。(その時はDjangoをフレームワークとして使用しました。)また、定期実行機能なども含めて無料で使用できるので、ちょっとしたアプリをホスティングするには最適だと言えます。

Herokuでのホスティングのための基本的な知識

Herokuへのデプロイ方法や必要なファイルは以下の記事にて紹介していますので、こちらの記事を参照してください。

※以下の記事で使用しているフレームワークはDjangoですが、Flaskでも大した違いはありません。

【Python】Python × Djangoのアプリをherokuにデプロイする

Herokuホスティングに必要なファイルを作成する

runtime.txt

python-3.7.0

Procfile

web: gunicorn app:app --log-file=-

requirements.txt

gunicorn==19.6.0
requests==2.21.0
flask==1.0.2
line-bot-sdk==1.8.0
今回のアプリでは上記があればよいと思います。

herokuへデプロイする

以前の記事でも紹介していますが、デプロイはherokuのレポジトリにプッシュするのみでOKです。

git push https://heroku:"APIキー"@git.heroku.com/"アプリ名".git master

以上で完了です。これで指定したURLへリクエストを送ると、自身のLINEアカウントに通知が送られてくるはずです。