Python

herokuを使ってPythonのflaskで作ったアプリケーションをデプロイする方法と注意点!

heroku
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、PythonのWebフレームワークであるFlaskを使って作成したWebアプリケーションをインターネット上に公開するためにHerokuというサービスを使ってデプロイしていきます。Herokuを使えば簡単にWebアプリケーションを公開することが可能なんです。

こんにちは!

データサイエンティスト兼AIエンジニアのウマたん(@statistics1012)です!

ゴリゴリのWebエンジニアではない僕にとって、Webアプリケーションのデプロイは結構面倒!

ロボたん
ロボたん
せっかく作ったアプリケーションもインターネット上で誰でも参照できるようにしないと意味がないのに・・・
ウマたん
ウマたん
ローカル環境で開いてムフフ・・していてもただの自己満!

そんな悩みを解決してくれるのが簡易的にWebアプリケーションのデプロイをしてくれる「heroku」というサービス!!

この記事では、そんなherokuについて見ていきたいと思います!!

※当たり前ですがデプロイしたいWebアプリケーションはローカル環境で動作確認済みである必要があります

ローカル環境のアプリを外部公開する方法にngrokを使った方法があり、気になる方は以下の記事をチェックしてみて下さい。

ngrok
ngrokの使い方解説!Pythonで作ったアプリを外部公開してみよう!当サイト【スタビジ】の本記事では、ngrokの使い方を解説していきます!ngrokを使うとローカル環境で作成したWebアプリをグローバルに公開できる便利ツールです!ぜひ使い方をマスターしていきましょう!...

herokuとは

heroku

herokuとは、PaaS(Platform as a service)の一種であり、デプロイを簡易的に行えるサービスです。

SaaSは有名ですが、それ以外にもPaaSやIaaSなどがあるんですよー!

イメージ的にはSaaSが最も簡易的だけど自由度低くIaaSは最も自由度高いけど簡易的ではない。

PaaSはその間に位置するサービスとなります。

そこらへんについては以下の記事が詳しいので適宜参照してみてください!

herokuはGitを使って簡単にデプロイすることができ、サーバーの役割も置き場所(アドレス)もheroku側が用意してくれます!

数々のアドオン機能があり、幅広い範囲で使用することができます。

herokuは無料プランがなくなってしまいましたが、一番安い「Eco・Basicプラン」で月5$で利用できます。

とはいえ比較的簡単にデプロイすることが可能なので、ぜひ試してみてください!

herokuを使う下準備

PC

さて、簡易的にデプロイすることができるとは言ってもそれなりの手順を追わないといけません。

偉そうなこと言っておきながら結構苦戦しました・・・笑

Pythonのflaskで作った有意差算出アプリケーションをherokuでデプロイしたのでその手順を見ていきます。

有意差アプリケーションのコードは以下の記事に載せてますので見てみてください。

macとsurface
Flaskでできることを確認しながら簡単なWebアプリの実例を作ってみよう!当サイト【スタビジ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!...

コマンドプロンプトでの操作前に下準備が必要になります。

herokuアカウント作成

当たり前ですが、herokuのアカウント作成とインストールが必要になります。

herokuサイトに移動し、アカウントを作成してください

heroku

アカウントを作成し、ログインした後はherokuのソフトウェアをインストール!

いくつかのファイルを生成

herokuのインストールが完了したら今度は、herokuでデプロイする用のファイルを用意していきます。

作るファイルは以下の3点!

必要なファイル

・Procfile
・requirements.txt
・runtime.txt

それぞれについて見ていきましょう!

Procfile

Procfileではデプロイするアプリを指定します。

以下のような記載をして保存してください。

web: gunicorn <実行するファイル名>:app --log-file=-

※この時、拡張子はなしで保存しましょう!

requirements.txt

ここには使用するPythonライブラリのバージョンを記載していきます。

バージョンが合っていないと上手くデプロイできない可能性があるので気を付けましょう!

コマンドプロンプトから以下のコマンドを叩けば現在のライブラリバージョンがrequirements.txtとして出力されます。

pip freeze > requirements.txt

僕の場合は以下のようになりました。

Click==7.0
Flask==1.1.1
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
numpy==1.17.4
scipy==1.3.3
requests==2.22.0

これらのパッケージのバージョンを空白なしでrequirements.txtとして作成します。

runtime.txt

runtimeには現在のPythonのバージョンを記載します。

以下のコマンドで確認が可能です。

python -V

僕の場合は、

Python 3.7.3

でした。

python-3.7.3

とだけruntime.txtに記載しましょう

これらのファイルをデプロイするPythonファイルと並列ディレクトリに置きます。

これで下準備’が終了!

ウマたん
ウマたん
ここからが本番だ!

いざherokuでflaskアプリケーションをデプロイ!

さて下準備が終了したところでデプロイを行っていきましょう!

コマンドプロンプトからアプリケーションのディレクトリに移動

コマンドプロンプトからデプロイするアプリケーションが置いてあるディレクトリに移動します。

そこには該当アプリケーションファイルと先ほどの3点ファイル

・Procfile
・requirements.txt
・runtime.txt

が存在することを確認しておきましょう!

herokuにログイン

続いてherokuにログインします。

以下のコマンドを打ってください。

heroku login

Enterを押してください的なことを言われるのでEnterを押してしばらくするとherokuのブラウザが開きます。

heroku

ブラウザ上からログインしましょう!

herokuにアプリを作成

続いてheroku上にアプリを作成していきます。

以下のコマンドを入力しましょう!

heroku create <好きなアプリケーション名>

このアプリケーション名は実行するファイルと同一でなくても構いませんが、分かりやすい名前にしておきましょう!

ちなみに以下のコマンドを打ってあげると、heroku上に作成されたアプリケーションが表示されます。

heroku apps

heroku createしたアプリケーション名が実際に表示されるか確認してみましょう!

Gitコマンドでherokuにデプロイ!

さてここからはgitコマンドでデプロイを行っていきます!

まず初めに、以下のコマンドでgitを行いますよーと宣言してあげましょう。

git init

続いて、当該ディレクトリのファイルを全てgitしていきます。以下のコマンドを入力!!

git add .

これで当該ディレクトリ配下のファイルが全てaddされます。

もし特定ファイルだけaddしたい場合は特定ファイル名をaddの後につなげればOKです!

現在addコマンドによってファイルがインデックスされている状態です。

そのファイルを以下のコマンドでローカルレポジトリにaddします。

git commit -m "<バージョン名(firstとか)>"

これでローカルレポジトリにコミットされました。

ちなみに以下のコマンドでファイルの状況を確認できます。

git status

addだけされてcommitされていないファイルは赤字で、commitされたファイルは緑色で表示されます。

また、commitのログは以下のコマンドで確認できます。

git log

先ほどのバージョン名で出力されるので、管理しやすい名称にしておきましょう!

ここまで来たら後はherokuにデプロイするだけ!!

以下のコマンドを打ってあげましょう!

git push heroku master

しばらくすると、コマンドプロンプト上にURLが表示されるのでそれをブラウザ上で叩いてみてください。

ちゃんと表示されればデプロイ成功!!!

herokuドメインのサブドメインの形でURLが出力されており、このURLは誰でもどこでもアクセスできます。

これにて、ローカルでムフフしていたアプリケーションがインターネット上に公開されたことに!!

Gitは結構分かりにくい部分が多くハマりがちです!Gitについては以下の記事でまとめていますのであわせてチェックしてみてください。

Git 勉強
【入門】Gitの基本や勉強方法についてまとめておく!当サイト【スタビジ】の本記事では、Gitの基本と勉強方法についてまとめていきます!Gitはコードやドキュメントのバージョンを管理する上で非常に重要なツールです。Gitについて理解しておくことで開発効率が大きく変わるのでぜひおさえておきましょう!...

herokuのデプロイではまったところ

この手順で上手くいけばいいんですけど、上手くいかないこともあります。

実際にはまったところやはまりやすい部分についてまとめておきます!

3点ファイルの記述

デプロイに必要な3点ファイル

・Procfile
・requirements.txt
・runtime.txt

においてそれぞれムダな改行や空白があるとエラーを起こす可能性があります。

またrequirements.txt、runtime.txtに関してはバージョンの互換性を確かめましょう!

runtime.txtの記述のpythonをPythonにしてしまう

初歩的なミスなのですが、小文字のpythonで記述しましょう!

python-3.7.3

そうしないと、以下のようにエラーが発生します。

! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/***.git'

flaskアプリケーションのネーム

flaskのソース内のアプリケーションネームを以下のようにncで書いていたらデプロイできませんでした。

nc = Flask(__name__)

@nc.route("/")
def check():
    return render_template('sig.html')

これをappに修正したら上手くいきましたー!

app = Flask(__name__)

@app.route("/")
def check():
    return render_template('sig.html')

それでも上手くいかない時は、コマンドプロンプト上のエラー表記を確認してGoogleで検索して頑張って解決してみてください!

herokuでデプロイする方法 まとめ

herokuでflaskアプリケーションをデプロイする方法について見てきました!

herokuはエンジニアでなくても比較的簡単にデプロイすることのできるサービスとして有用です!

ぜひ試してみてください!

FlaskでWebアプリケーションを実装する方法はぜひ以下の記事を見てみてください!

macとsurface
Flaskでできることを確認しながら簡単なWebアプリの実例を作ってみよう!当サイト【スタビジ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!...

Webアプリケーション作成に必要なPythonやHTML・CSSの勉強に関しては以下の記事でまとめています!

Python独学勉強法
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...
html_css_study
【初心者向け勉強法】HTMLとCSSの学習ロードマップ こんにちは!スタビジ編集部です! 最近は個人でWebサイトを運営したり、Webページに力を入れている企業が多いです。 ...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら