概要
pythonでのWebアプリ開発の経験がなかったため、勉強としてFlaskフレームワークを使用していろいろ作成を行ってみました。
この記事では、Hello Worldレベルの最低限の実装となっています。
Flaskとは
Flask Documentation
Flask 日本語Documentation
Flaskは、Python製のマイクロWebフレームワークです。
マイクロ=コアとなる機能を保ちつつ拡張性を持っている という解釈です。
拡張機能を多く持ち、必要に応じて追加することで自由度が高いです。
また、最低限の機能を使うための学習コストが低く、誰にでもすぐに利用することができます。
開発に必要な多くの機能が実装されているという点では、Djangoの方がフルスタックフレームワークとして優れています。
開発環境
OS Windows10
Docker 20.10.7
Visual Studio Code 1.7.1
DockerでCentOS7環境を構築し、コンテナ内で作成を行っています。
事前設定
Flaskを利用するための事前準備を進めていきます。
コンテナの起動
今回は公開済みのCentOS7のDockerイメージからコンテナを構築しています。
Dockerイメージ取得~コンテナ起動まで実行します。
# Dockerイメージ取得
$ docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Already exists
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 11 months ago 204MB
# コンテナ起動
$ docker run -it -d --name centos7 centos:centos7
c4e8532de5f720c60097a7eef5cf33b049dffc4122d68dfd41ff9887ceeced46
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4e8532de5f7 centos:centos7 "/bin/bash" 35 seconds ago Up 32 seconds centos7
Python環境の準備
ここからはコンテナ内での操作となります。
インストールされていなければPythonのインストールを行ってください。
今回はPython 3.6.8をインストールしています。
# python3のインストール
$ yum install -y python3
-- 省略 --
$ python --version
Python 3.6.8
仮想環境をvenvで構築&有効化します。
仮想環境名はvenvにしています。
# 作業ディレクトリに移動
$ cd working_dir
# 仮想環境venvの作成
$ python3 -m venv venv
# 仮想環境venvの有効化
$ source venv/bin/activate
Flaskを仮想環境上にインストールします。
インストールが完了するとflask
コマンドが使用できるようになります。
これで準備完了です。
# flaskのインストール
(venv)$ pip install flask
Flaskの仕様
環境変数について
Flaskでは2つの環境変数で制御することができます。
環境変数を事前にexportで設定しておくか、.envファイルで管理する方法があります。
- FLASK_APP : アプリ起動時に実行するソースを指定する
- FLASK_ENV : 開発か本番か指定する(development or production)
また、.env
ファイルがある状態でアプリを実行すると、アプリのルートディレクトリが.env
ファイルがあるディレクトリとなります。
ソースコードの作成
主にリクエスト先のURIと関数を紐づけるルーティングをおこなっています。
関数の先頭にデコレーターと呼ばれる@app.route()
を追加することでルートを追加できます。
from flask import Flask
app = Flask(__name__)
# http://127.0.0.1:5000にアクセスしたときに呼び出される
@app.route("/")
def index():
return "Hello Flask!"
# http://127.0.0.1:5000/helloにアクセスしたときに呼び出される
@app.route("/hello")
def hello():
return "Hello Wolrd!"
flask routes
コマンドで、作成したルートの確認ができます。
indexとhelloの2つができていることを確認しましょう。
(venv) $ flask routes
Endpoint Methods Rule
-------------- --------- -----------------------
hello GET /hello
index GET /
static GET /static/<path:filename>
アプリ実行
環境変数FLASK_APPにhello.pyを設定しておきます。
開発用ということで、環境変数FLASK_ENVはdevelopmentに設定しておきます。
$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
flask run
で実行できます。
$ flask run
* Serving Flask app 'hello.py' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: XXX-XXX-XXX
http://127.0.0.1:5000 にアクセスして Hello Flask! と表示されていればOKです。
http://127.0.0.1:5000/hello にアクセスすると Hello World! と表示されます。
まとめ
FlaskでHello Worldアプリを作るには以下の手順でOK
- Flaskをインストールする
- ルーティングをコードで実装
- 環境変数の設定
- アプリを起動
便利なポイントがあれば別記事でさらに投稿していく予定です。
参考文献
Python FlaskによるWebアプリ開発入門
著:佐藤昌基、平田哲也
監修:寺田学