mutao.net

いわゆる雑記。

PythonでWebAPIを作成してHerokuにデプロイするまで

何やったの

タイトルの通りにPythonの勉強の一環としてFlaskFWを使ってWEBAPI(仮)を作りました。

Herokuにデプロイしてアプリケーションを実行するまで結構詰まったので備忘録的に書きます。

作ったもの

https://commic-lover.herokuapp.com/

楽天BooksAPIを単にwarpして自分が好きなタイトルの漫画だけをJSON形式で返してくれるというもの。

楽天BooksAPIのレスポンスが遅いのでHerokuのdynoが休眠状態にあるかどうかにかかわらず遅い。

本当はAPIの実行結果をDBに蓄積していくまでやりたかったけどとりあえず目的は果たせた。

というかエラーページすら作っていないし、今月分の新刊情報しか持ってこれていないので作り込みが必要。

FlaskでAPI作成

これはqiitaの記事にも散々あるし公式のdocを眺めていれば作れるので割愛。

https://www.flaskapi.org/

一つ気をつけたいのがHerokuでサブディレクトリをデプロイするときはめんどくさいので全部ルートディレクトリに作成した方が簡単。

サブディレクトリを作成したい人はこちらの stack overflowの記事を参照。

https://stackoverflow.com/questions/7539382/how-can-i-deploy-push-only-a-subdirectory-of-my-git-repo-to-heroku/10648623#10648623

私はHerokuCLIを使わずにGUI上で全て完結させたかったのでやらなかった。

Herokuにデプロイ

Procfile

Procfileをルートディレクトに作成する。

https://devcenter.heroku.com/articles/python-gunicorn

Pythonの場合はgunicornを使うことが多いというか他の選択肢がdocになかったので従った。

web: gunicorn app:app

中身は至ってシンプル。ここで --chdir オプションでサブディレクトリに移動できたりもするらしい(未検証)。

requirement.txt

次に requirements.txtの作成。

pip freeze > requirements.txt

venvとか使っていないとpipで入れたモジュールが全て出力されてしまってPython触り立ての時は混乱した。

デプロイ

今回はGUIからやる。お手軽デプロイで時間短縮。

f:id:mutaonet:20201123165744p:plain

右上「 New」ボタンから「Create app」を選択。

f:id:mutaonet:20201123165733p:plain

好きなアプリケーション名を入力。Herokuの場合URLになる部分。

f:id:mutaonet:20201123165716p:plain

GitHubにPush済みなので connect to GitHub を選択。

リポジトリ名で検索できるので対象のリポジトリを選択する。

f:id:mutaonet:20201123165707p:plain

あとはデプロイしたいブランチ等を選択。

Enable Automatic Deploys を ONにしておくとGitHubにpushされる度にビルドとデプロイをしてくれるのでONにすると便利。

あとは、Buildを待つだけでデプロイ完了です。

https://{アプリケーション名}.herokuapp.com/

https://commic-lover.herokuapp.com/