Python

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

heroku

こんにちは!

消費財メーカーでデジタルマーケター・データサイエンスティストをやっているウマたん(@statistics1012)です!

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

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

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

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

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

ウマたん
ウマたん
Pythonの勉強はこちらをチェック!
【入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく習得する勉強法についてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

herokuとは

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

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

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

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

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

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

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

基本無料で使用できますが、その場合30分アクセスがないとスリープモードになりアプリケーションアクセスに時間がかかってしまいます。

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

herokuを使う下準備

PC

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

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

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

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

macとsurface
PythonのFlaskで簡単なWebアプリケーションを作ってみよう!こんにちは!デジタルマーケターのウマたん(@statistics1012)です! Webブラウザで動くアプリケーションのことをWe...

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

herokuアカウント作成

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

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

heroku

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

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

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

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

必要なファイル

・Procfile
・requirements.txt
・runtime.txt

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

Procfile

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

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

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

requirements.txt

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

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

コマンドプロンプトから以下のコマンドを叩けば現在のライブラリバージョンが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

・runtime.txt

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

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

僕の場合は、

Python 3.7.3

でした。

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

これで下準備’が終了!

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

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

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

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

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

・Procfile
・requirements.txt
・runtime.txt

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

herokuにログイン

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

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

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

heroku

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

herokuにアプリを作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3点ファイルの記述

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

・Procfile
・requirements.txt
・runtime.txt

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

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

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

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

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

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

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

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

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

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

 

 

 

Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!