Heroku + FlaskでHello Worldする

Heroku + FlaskでWebアプリケーションを公開する

Flaskで作ったアプリケーションをHeroku上で公開するまでの手順を勉強がてらメモしておきます。うまく公開できずに悩んでましたが、Herokuの公式チュートリアルに従って進めたらすんなりとできました。うろ覚えのところもあるので、間違えてたらごめんなさい。

Getting Started with Python on Heroku | Heroku Dev Center

Herokuのアカウント作成

始めに、Herokuのアカウント作成とHeroku Toolbeltのインストールを行います。特に難しいことはありません。Heroku Toolbeltとは、Herokuのクライアントです。インストールするとHerokuコマンドが使えるようになります。

https://dashboard.heroku.com/

Heroku Toolbelt

Virtualenv を使った仮想環境の構築

Virtualenvを使って仮想環境を構築します。以下、仮想環境内で作業します。Virtualenvを使った仮想環境の構築については、以下の記事をごらんください。

PythonのマイクロWAF「Flask」をMacにインストールする | Androidアプリ開発@つくばの日記

Heroku + FlaskでHello World

Heroku + FlaskでHello Worldするアプリケーションを作っていきます。

FlaskとGunicornのインストール

WebアプリケーションフレームワークとしてFlask、HTTPサーバとしてGunicornをインストールします。

Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP Server for UNIX.
(拙訳:Gunicorn(Green Unicorn)はUNIX環境で動作するPythonのWSGI HTTPサーバです)
出典:Gunicorn – Python WSGI HTTP Server for UNIX

WSGIとはなんぞ、と調べると、なるほど「WebサーバとWebアプリケーションのインターフェース定義」とのことです。

Web Server Gateway Interface (WSGI; ウィズギー) は、プログラミング言語Pythonにおいて、WebサーバとWebアプリケーション(もしくはWebアプリケーションフレームワーク)を接続するための、標準化されたインタフェース定義である。
出典:Web Server Gateway Interface – Wikipedia

FlaskとGunicornをまとめてインストールしておきます。

pip install Flask gunicorn

上手くインストールできたら、こんな感じで結果が表示されます。

Successfully installed Flask-0.10.1 Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.10.4 gunicorn-19.3.0 itsdangerous-0.24

これで必要なものをまとめてインストールできました。

FlaskでHello Worldするコード

ディレクトリを作成して移動します。

mkdir helloflask
cd helloflask/

Hello Worldを表示するコードを書きます。以下のコードを”hello.py”として保存。

import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!'

“from flask import Flask”でFlaskをインポートしています。

“app = Flask(__name__)”でFlaskクラスのオブジェクトを作成。”@app.route(‘/’)”でルート(”/”)にアクセスした時の挙動を定義します。この場合は、”hello()”関数を呼び出して「Hello World!」と返しています。

Procfileの作成

次にProcfileというファイルを作成します。Procfileとは、「dynosを起動するために必要なコマンドを宣言するもの」とのことです。

Use a Procfile, a text file in the root directory of your application, to explicitly declare what command should be executed to start a web dyno. In this case, you need to execute Gunicorn with a few arguments.
(拙訳:アプリケーションのルートディレクトリに、テキスト形式でProcfileを作成します。これは、web dynosを起動するために実行されるべきコマンドを簡潔に宣言するものです。今回は、Gunicornをいくつかの引数とともに起動する必要があります)
出典:Getting Started with Python on Heroku | Heroku Dev Center

ターミナルに以下のように打ち込んで、Procfileに”web: gunicorn hello:app –log-file=-“と記述します。

echo web: gunicorn hello:app --log-file=- > Procfile

foremanの起動

foremanを起動します。Procfileを読み込んでプロセスを管理してくれます。foremanは、Heroku Toolbeltのインストールの際、自動でインストールされているはずです。

foreman start

requirements.txtの作成

ルートディレクトリに”requirements.txt”を書き出します。アプリケーションに必要なPythonモジュールを宣言するファイルです。”pip freeze”という便利なコマンドを使います。

pip freeze > requirements.txt

Gitへのコミット

Gitにコミットしていきます。

git init
git add .
git commit -m "init"

Herokuにデプロイ

Herokuに作成したアプリケーションをデプロイしていきます。まずはHerokuの認証。

heloku login

メールアドレスとパスワードを聞かれるので、入力します。”Authentication successful.”と出てくれば認証成功です。

Herokuにリポジトリを作成。”heroku create”すると適当な名前でリポジトリが作成されます。”heroku create hoge”とすることで、既に同じ名前のリポジトリが存在しなければ、任意の名前でリポジトリを作成することができます。リポジトリを作成したら、pushします。

heroku create
git push heroku master

pushに成功したら、ブラウザからアプリケーションを開きます。

heroku open

ブラウザに「Hello World!」と表示されました。これでHeroku + FlaskでHello World完了です。

シェアしてもらえるとうれしいです。゚(´っωc`)゚。