HerokuでFlaskアプリを公開するまでの手順

Python

こんにちは!ウメハラ(plumfield56)です。

この記事ではHerokuにFlaskアプリをアップロードする手順を紹介します。
基本的にはすべてVSCodeで操作していきます。

動作環境

  • Windows10
  • Python3.8
  • Heloku, Gitのアカウント作成済み
  • Git Bash, Heroku CLIインストール済み
  • VSCodeでPython、Bashの実行環境

Pythonファイルの用意

HelokuにアップデートさせたいPythonファイル、app.pyが入った状態から始めたいと思います。

flask_app
  └ app.py

app.pyには下記のコードを入れておきます。
「Hello World!」と表示させるだけのコードです。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=False)

下記画像の状態になります。

ローカルで動くかの確認

今入力したコードがローカルで動くか確認していきます。
「Ctrl + Chift + P」でコマンドパレットを開いて「Python Create Terminal」を選択してターミナルを表示させます。
「terminal」と打つと候補がでてきると思います。

ターミナルが閉じてしまった場合は「Ctrl + @」のショートカットキーで再度表示させることが可能です。
「cd 絶対パス」で今回良いした「flask_app」フォルダに移動します。
flaskを入れていない方は下記コマンドでflaskを入れてください。

pip install flask

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

flask run

ターミナルの最後にURLが表示されるので「Ctrl + クリック」で開きます。

ブラウザ上でHello World!と表示されたらOKです。
ターミナルで「Ctrl + C」 で停止してください。

仮想環境構築

今回はpipenvで仮想環境を構築していきたいと思います。
まずはpipenvを使えるように下記を実行します。

pip install pipenv

その後下記コマンドで環境構築を行います。

pipenv shell

フォルダに新しく「Pipfile」というファイルができます。
この中で環境の管理がされていきます。
※このファイルはHerokuへアップロードしないので注意ください。

現状のフォルダ構成は下記になりました。

flask_app
  ├ app.py
  └ Pipfile New

インタープリターの変更

今作成した仮想環境下で実行するためにインタープリターの変更を行います。

インタープリターは直訳だと通訳者という意味があり、プログラミング言語を機械語に変換してくれるソフトウェアのことです。
PythonやJavaScriptなどはインタプリタの名前のことです。
では実際に変更していきしょう。

「Ctrl + Shift + P」でコマンドパレットを開き、「Python: Select Interpreter」を選択します。

フォルダ名が出てくるので今回用意したフォルダを選択後、同じく括弧内にフォルダ名が表示されているインタープリターを選択してください。

左下に今使用しているインタープリター名が表示されていますが、ここが「フォルダ名: pipenv」となっていればOKです。

仮想環境下でFlask実行環境を整える

最終的なフォルダ構成は下記になりますので、まずはrequirements.txtを用意していきます。

flask_app
  ├ app.py
  ├ Pipfile
  ├ requirements.txt ※Herokuからの呼び出しに必要
  └ Picfile ※Herokuからの呼び出しに必要

requirements.txtはWebアプリを動かすのに必要なライブラリ一覧が表記されたテキストファイルです。
まずはライブラリをインストールしていきます。
今回必要なのはflaskとgunicornのみなので書きコマンドでインストールします。

pip install flask
pip install gunicorn

実行完了したら、次のコマンドで今入っているライブラリ一覧を確認してください。

pip freeze

下記のようにgunicornも含まれていればOKです。

ここで表示された内容でテキストを作ってくれる便利なコマンドがありますので、下記でテキストファイルを作成します。

pip freeze > requirements.txt

作成されたrequirements.txtを開くとライブラリ一覧が表示されるので確認してみてください。

Procfileの用意

最後にHerokuを動かすのに必要なProcfileファイルを作成します。
VSCodeの統合ターミナルがBashににあっていれば下記コマンドでファイル作成します。

touch Procfile

エラーになっていまった方は統合ターミナルを変更するか普通にファイルを作成しても問題ないです。
作成したらProcfileファイルを開いて下記を入力します。

web: gunicorn app:app

gunicornの後のappはPythonファイル名なので、
app.pyではなくてhello.pyというファイルにしている方はこうなります。

web: gunicorn hello:app

これで必要なファイルはそろって下記のフォルダ構成になりました。

flask_app
  ├ app.py
  ├ Pipfile
  ├ requirements.txt ※Herokuからの呼び出しに必要
  └ Picfile ※Herokuからの呼び出しに必要

git, Herokuの設定

まずはgitファイルを作成します。
下記コマンドを実行すると隠しファイルの.gitが作成されます。
(すでに存在する場合は初期化されます)

git init

続いてHerokuの操作です。
まずは下記コマンドでHerokuにログインします。

heroku login

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

と表示されるのでq以外のなんかを押してください。
すると自動的にブラウザが立ち上がるのでログインを進めます。

無事ログインができたらブラウザは消して大丈夫です。
ターミナルを確認すると進んでいて、ログインしたアドレスが表示されています。

アプリの作成/紐づけ

新規作成の場合は下記コマンドを実行してください。

heroku create

既存アプリを使う場合はこちらのコマンドでリモートレポジトリの設定をHerokuアプリにしてください。

heroku git:remote -a APP_NAME

アプリ一覧は下記コマンドで表示可能です。

heroku list

or

heroku apps

下記コマンドを実行してリモートレポジトリに何が設定されているかを確認します、

git remote -v

これでherokuのgitが出てくることが重要です。

ここまで確認できたら、これまで用意していきたファイルをアップロードしていきます。
ここで注意点ですが、下記こコマンドは使用しないでください。

git add .

なぜかというと今回のアプリ実行の中でPipfileは不要だからです。
Pipfileまであげてしまうと動かなくなりますので注意ください。

下記3つのコマンドを実行してHerokuにデータをアップロードさせます。
※commit時のコメントはなんでも良いです。

git add app.py requirements.txt Procfile

git commit -m ‘first commit’

git push heroku master

Herokuへのデータアップロードが終わりましたら下記コマンドでアプリを開いてください。

heroku open

無事表示されていたらHerokuへのアップロードは完了です。

コメント

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