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

目次
ウマたん当サイト【スタビジ】の本記事では、PythonのWebフレームワークであるFlaskを使って作成したWebアプリケーションをインターネット上に公開するためにHerokuというサービスを使ってデプロイしていきます。Herokuを使えば簡単にWebアプリケーションを公開することが可能なんです。
こんにちは!
データサイエンティスト兼AIエンジニアのウマたん(@statistics1012)です!
ゴリゴリのWebエンジニアではない僕にとって、Webアプリケーションのデプロイは結構面倒!
ロボたんせっかく作ったアプリケーションもインターネット上で誰でも参照できるようにしないと意味がないのに・・・
ウマたんローカル環境で開いてムフフ・・していてもただの自己満!
そんな悩みを解決してくれるのが簡易的にWebアプリケーションのデプロイをしてくれる「Heroku」というサービス!!
この記事では、そんなHeroku(ヘロク)について見ていきたいと思います!!
※当たり前ですがデプロイしたいWebアプリケーションはローカル環境で動作確認済みである必要があります。
ローカル環境のアプリを外部公開する方法にngrokを使った方法があり、気になる方は以下の記事をチェックしてみて下さい。
ngrokの仕組みや使い方解説!Pythonで作ったアプリを外部公開してみよう!当サイト【スタビジ】の本記事では、ngrokの使い方を解説していきます!ngrokを使うとローカル環境で作成したWebアプリをグローバルに公開できる便利ツールです!ぜひ使い方をマスターしていきましょう!
Herokuとは

Herokuとは、PaaS(Platform as a service)の一種であり、デプロイを簡易的に行えるサービスです。
SaaSは有名ですが、それ以外にもPaaSやIaaSなどがあるんですよー!
イメージ的にはSaaSが最も簡易的だけど自由度低くIaaSは最も自由度高いけど簡易的ではない。
PaaSはその間に位置するサービスとなります。
そこらへんについては以下の記事が詳しいので適宜参照してみてください!
HerokuはGitを使って簡単にデプロイすることができ、サーバーの役割も置き場所(アドレス)もHeroku側が用意してくれます!
数々のアドオン機能があり、幅広い範囲で使用することができます。
Herokuは無料プランがなくなってしまいましたが、一番安い「Eco・Basicプラン」で月5$で利用できます。
とはいえ比較的簡単にデプロイすることが可能なので、ぜひ試してみてください!
Herokuを使う下準備

さて、簡易的にデプロイすることができるとは言ってもそれなりの手順を追わないといけません。
偉そうなこと言っておきながら結構苦戦しました・・・笑
Pythonのflaskで作った有意差算出アプリケーションをHerokuでデプロイしたのでその手順を見ていきます。
有意差アプリケーションのコードは以下の記事に載せてますので見てみてください。
Flaskでできることを確認しながら簡単なWebアプリを作ってみよう!当サイト【スタビジ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!
コマンドプロンプトでの操作前に下準備が必要になります。
Herokuアカウント作成
当たり前ですが、Herokuのアカウント作成とインストールが必要になります。
Herokuサイトに移動し、アカウントを作成してください

アカウントを作成し、ログインした後はHerokuのソフトウェアをインストール!
いくつかのファイルを生成
Herokuのインストールが完了したら今度は、Herokuでデプロイする用のファイルを用意していきます。
作るファイルは以下の3点!
それぞれについて見ていきましょう!
Procfile
Procfileではデプロイするアプリを指定します。
以下のような記載をして保存してください。
web: gunicorn <実行するファイル名>:app --log-file=-
※この時、拡張子はなしで保存しましょう!
requirements.txt
ここには使用するPythonライブラリのバージョンを記載していきます。
バージョンが合っていないと上手くデプロイできない可能性があるので気を付けましょう!
コマンドプロンプトから以下のコマンドを叩けば現在のライブラリバージョンがrequirements.txtとして出力されます。
pip freeze > requirements.txt
僕の場合は以下のようになりました。
これらのパッケージのバージョンを空白なしでrequirements.txtとして作成します。
runtime.txt
runtimeには現在のPythonのバージョンを記載します。
以下のコマンドで確認が可能です。
python -V
僕の場合は、
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 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について理解しておくことで開発効率が大きく変わるのでぜひおさえておきましょう!
Herokuのデプロイでつまずきやすいポイント

この手順で上手くいけばいいんですけど、上手くいかないこともあります。
実際にはまったところやはまりやすい部分についてまとめておきます!
3点ファイルの記述
デプロイに必要な3点ファイル
においてそれぞれムダな改行や空白があるとエラーを起こす可能性があります。
またrequirements.txt、runtime.txtに関してはバージョンの互換性を確かめましょう!
runtime.txtの記述のpythonをPythonにしてしまう
初歩的なミスなのですが、小文字のpythonで記述しましょう!
そうしないと、以下のようにエラーが発生します。
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アプリケーションを実装する方法はぜひ以下の記事を見てみてください!
Flaskでできることを確認しながら簡単なWebアプリを作ってみよう!当サイト【スタビジ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!
Webアプリケーション作成に必要なPythonやHTML・CSSの勉強に関しては以下の記事でまとめています!
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。
【初心者向け勉強方法】HTMLとCSSの学習ロードマップ当サイト【スタビジ】の本記事では、初学者に向けたHTMLとCSSの勉強法と勉強の際のポイントについてまとめています!Webサイトを作成に必要となる「HTML・CSS」を学習ロードマップに沿って勉強していきましょう!読んだ内容を、手を動かして身につける
データサイエンス・AIを、動画と課題で体系的に学べるオンラインスクール。
スタアカを見てみる




