こんにちは!
データサイエンティスト兼AIエンジニアのウマたん(@statistics1012)です!
ゴリゴリのWebエンジニアではない僕にとって、Webアプリケーションのデプロイは結構面倒!
そんな悩みを解決してくれるのが簡易的にWebアプリケーションのデプロイをしてくれる「heroku」というサービス!!
この記事では、そんなherokuについて見ていきたいと思います!!
※当たり前ですがデプロイしたいWebアプリケーションはローカル環境で動作確認済みである必要があります
ローカル環境のアプリを外部公開する方法にngrokを使った方法があり、気になる方は以下の記事をチェックしてみて下さい。
目次
herokuとは
herokuとは、PaaS(Platform as a service)の一種であり、デプロイを簡易的に行えるサービスです。
SaaSは有名ですが、それ以外にもPaaSやIaaSなどがあるんですよー!
イメージ的にはSaaSが最も簡易的だけど自由度低くIaaSは最も自由度高いけど簡易的ではない。
PaaSはその間に位置するサービスとなります。
そこらへんについては以下の記事が詳しいので適宜参照してみてください!
herokuはGitを使って簡単にデプロイすることができ、サーバーの役割も置き場所(アドレス)もheroku側が用意してくれます!
数々のアドオン機能があり、幅広い範囲で使用することができます。
herokuは無料プランがなくなってしまいましたが、一番安い「Eco・Basicプラン」で月5$で利用できます。
とはいえ比較的簡単にデプロイすることが可能なので、ぜひ試してみてください!
herokuを使う下準備
さて、簡易的にデプロイすることができるとは言ってもそれなりの手順を追わないといけません。
偉そうなこと言っておきながら結構苦戦しました・・・笑
Pythonのflaskで作った有意差算出アプリケーションを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 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については以下の記事でまとめていますのであわせてチェックしてみてください。
herokuのデプロイではまったところ
この手順で上手くいけばいいんですけど、上手くいかないこともあります。
実際にはまったところやはまりやすい部分についてまとめておきます!
3点ファイルの記述
デプロイに必要な3点ファイル
・Procfile
・requirements.txt
・runtime.txt
においてそれぞれムダな改行や空白があるとエラーを起こす可能性があります。
またrequirements.txt、runtime.txtに関してはバージョンの互換性を確かめましょう!
runtime.txtの記述のpythonをPythonにしてしまう
初歩的なミスなのですが、小文字のpythonで記述しましょう!
python-3.7.3
そうしないと、以下のようにエラーが発生します。
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アプリケーションを実装する方法はぜひ以下の記事を見てみてください!
Webアプリケーション作成に必要なPythonやHTML・CSSの勉強に関しては以下の記事でまとめています!