はじめに
今回はPythonを使ってLINEのチャットボットを作ってみました。
WEBアプリのフレームワークとしてFlaskを使用しました。
Djangoってのが有名らしいのですが、簡単なものはFlaskのがいいらしいので、これを使ってみました。
けっこうハマって少しくじけかけたので、備忘録に残します。
環境準備
$ pip install flask
$ pip install line-bot-sdk
※FlaskとLINE BOT SDKをインストールする
LINEアプリの作成
LINE Developersにてチャネルを作成する
https://developers.line.biz/ja/
Messaging APIチャネルを作成する
※こちらは割愛します
LINEのWebhookの設定
Webhook送信を「利用する」に変更する
Webhook URLに以下を入れる
https://{アプリ名}.herokuapp.com/callback
※まだコードをデプロイしてないので接続確認で失敗するけど、問題ない
自動応答メッセージを「利用しない」に変更する
Messaging APIでのアプリ実装
サンプルコードのDL
$ git clone https://github.com/line/line-bot-sdk-python
必要なファイルを準備
app.py
サンプルコードから
「line-bot-sdk-python -> sample -> flask-echo -> app_with_handler.py」
をコピーしてきて、名前を変更する
requirements.txt
$ pip freeze > requirements.txt
使用するライブラリを記載する
runtime.txt
python-3.7.1
※使用しているpythonと同じバージョンで良い
※バージョンの確認方法は $ python -V
Procfile
web: python app.py
プログラムと実行方法を記載する
app.pyを一部書き換える
・・・ 省略 ・・・
if __name__ == "__main__":
arg_parser = ArgumentParser(
usage='Usage: python ' + __file__ + ' [--port <port>] [--help]'
)
arg_parser.add_argument('-p', '--port', default=8000, help='port')
arg_parser.add_argument('-d', '--debug', default=False, help='debug')
options = arg_parser.parse_args()
app.run(debug=options.debug, port=options.port)
↓
・・・ 省略 ・・・
if __name__ == "__main__":
port = int(os.getenv("PORT", 8000))
app.run(host="0.0.0.0", port=port)
herokuの設定
herokuのCLIをインストール
$ brew tap heroku/brew && brew install heroku
※herokuコマンドが使えるようになる
プロジェクトを作成
$ heroku create アプリ名
プロジェクトの利用開始
$ heroku addons:create fixie:tricycle --app アプリ名
各種トークンをHerokuの環境変数に登録
$ heroku config:set LINE_CHANNEL_SECRET="Channel Secretの欄の文字列" --app アプリ名
$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app アプリ名
環境変数の設定確認
$ heroku config
「LINE_CHANNEL_SECRET」と「LINE_CHANNEL_ACCESS_TOKEN」が正しく設定されていればOK
実装したコードのデプロイ
$ git init
$ git remote add heroku https://git.heroku.com/アプリ名.git
$ git add -A
$ git commit -m "first commit"
$ git push heroku master
所感
herokuの利用に際して、--app アプリ名がなかったことで少しハマりました。
エラー見ると、書いてるのでちゃんと読みましょうねって話ですね笑
あと、LINE側のWebhookの接続の確認でエラーになるんですけど、なんか動くっていうちょっと怪しげな状況です。
herokuのログは以下のコマンドで確認できます。
$ heroku logs --tail --app アプリ名
しかし、herokuクソ便利ですね。
さくらのレンタルサーバーで最初頑張ろうとしてたんですけど、SSLの設定は必要だし、pyenvを入れるのにちょっとコツが必要だったり、色々めんどくさかったです。
なので、モック作るぐらいのノリだったら断然herokuですね。
これからもっと積極的に使っていこうと思いました。