Flaskのローカル開発環境を構築してみた
こんにちは。プロダクトグループの坂井です。
Pythonのフレームワークの一つであるFlaskを使う機会がありましたので、まずはローカル開発環境をDockerで構築してみました。
作業環境
- macOS Mojave 10.14.6
- Docker 19.03.1
- Docker Compose 1.24.1
Dockerのインストールについては割愛します。
構築するローカル開発環境
- Python 3.7.4
- Flask 1.1.1
さっそく構築
Pythonの公式イメージがDocker Hubにありますので、公式イメージを利用してコンテナを作成します。
FROM python:3.7.4 ARG project_directory WORKDIR $project_directory RUN pip install flask
6行目で最新バージョン1のFlaskをインストールしています。
version: "3.7" services: web_flask: build: context: . args: project_directory: "/projects/" ports: - "5000:5000" volumes: - "./sample_project:/projects" environment: TZ: "Asia/Tokyo" FLASK_ENV: "development" command: "flask run --host 0.0.0.0 --port 5000"
環境変数にFLASK_ENV: "development"
を指定すると、コード変更時のリロードやデバッグ情報が見れるので、開発時は指定しておくことをお勧めします。
続いて実際に動かすコードを作成します。今回は 公式ページ に記載されているコードを実行してみます。
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
これまで準備したファイルを配置します。
[実行ディレクトリ] ├── Dockerfile ├── docker-compose.yml └── sample_project └── app.py
準備ができたら起動します。
docker-compose up -d
動作確認のため、リクエストを投げてみます。ブラウザでhttp://localhost:5000
にアクセスしても確認できます。
curl http://localhost:5000 Hello, World!
機能を追加してみる
作成した環境でそのまま実装を進めることができます。app.py
ファイルを変更し保存します。
from flask import Flask, request app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' @app.route('/sample', methods=['POST']) def sample_post(): return "param1:{}".format(request.form['param1'])
ハイライト部分を追加、変更しました。新たにPOST /sample
を追加しました。
処置としては受け取ったパラメータ(param1
)をただ返すだけです。
追加したコードを実行してみます。
curl http://localhost:5000/sample -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param1=hogehoge" param1:hogehoge
コンテナとファイルが同期されており、Flaskがコードの変更を検知してリロードしているため、コードを編集して保存するだけで変更が反映されています。便利ですね。
参考
- 執筆時点(2019/08/14)の最新バージョン ↩