これからPythonフレームワークであるFlaskを始めたい初心者・入門者は、Flaskの実行環境を準備する必要があります。
そのために、Flaskのインストールのほかに実行環境構築も実施しなければ使えません。
ここでは、以下の悩みをお持ちの方に読み進めていただきたいです。
- Flaskとは?
- Flaskのインストール方法がわからない
- インストール時の適切な設定がわからない
- Flaskアプリケーションの実行環境を構築したい
これらの悩みを解決しながら、Flaskのインストールと設定・環境構築を解説します。
記事を読み終えると、Flaskのアプリケーション実行環境の構築まで準備できます。
Flaskとは?
Flask(フラスク/フラスコ)は、Python製のマイクロWebフレームワークです。
Flaskは拡張性を持つ特徴があり、基本的に最低限の機能のみを提供するフレームワークになります。
必要に応じて様々な拡張機能を追加することで、小規模から大規模なWebアプリ開発まで多様なケースで利用できるよう設計されています。
なぜFlaskを使うのか?
時代の潮流として、2000~2010年代半ばまでWeb開発ではフルスタックフレームワークが人気でした。
一方で、近年マイクロサービス化が進み、フロントエンド技術が発展したことでサーバーサイドはAPI、フロントエンドはJavaScript(TypeScript)で実装するのが主流になりました。
そのため、Flaskのようなコンパクトで学習コストが低く利用しやすいフレームワークが求められた背景があります。
Flaskの特徴
ここでは、Flaskを中心に特徴をまとめています。
- 標準で提供する機能が最小限
- 学習コストが低い(Python初心者もすぐに使える)
- 拡張機能をサポートしており小規模WebアプリからWeb APIまで開発可能
特に、言語問わずプログラミング初心者であれば、PythonのFlaskから始めるのはおすすめフレームワークの一つです。
FlaskはMVTモデル(Model/View/Template)を採用
Flaskは、UIを持つアプリを実装するデザインパターンとしてMVTモデル(Model/View/Template)を採用してます。
Model/View/Templateは以下の役割を持ちます。
- Model:ロジックを担当
- View:入力を受け取りModelとTemplateを制御
- Template:入出力を担当
一般的に、MVCモデル(Model/View/Controller)が有名ですが、MVTのViewはMVCのControllerに相当し、MVTのTemplateはMVCのViewに相当します。
具体的なルーティングとして図解を記載しておきます。
FlaskにおけるModelの役割
FlaskにおいてModelは以下の役割を持ちます。
- データベースを作成する
- データベースを操作する
つまり、Modelはデータベースのテーブルを定義することになります。
データベースを構築する際に必要な知識が以下の内容になります。
- flask-sqlalchemy
- flask-migrate
- SQLite
Modelの作成方法やデータベース構築方法を具体的に知りたい人は、「【Flask】Webアプリ開発におけるModelの役割」を一読ください。
FlaskにおけるViewの役割
FlaskにおいてViewは以下の役割を持ちます。
- データベースを操作する
- PRGに基づいてルーティングとテンプレートを制御する
つまり、ViewはModelとTemplateを制御することになります。
Viewを実装する際に必要な知識が以下の内容になります。
- CRUD機能の理解
- ルーティングの理解
- PRG(Post/Redirect/Get)パターン
- render_template
- redirect
- url_for
- request
Viewの作成方法やデータベース/テンプレート制御を具体的に知りたい人は、「【Flask】Webアプリ開発におけるViewの役割」を一読ください。
FlaskにおけるTemplateの役割
FlaskにおいてTemplateは以下の役割を持ちます。
- ViewからTemplateへのデータの受け渡し
- ルーティング情報に沿ったテンプレート作成(各ページ)
- <a>タグ, <form>タグ, <button>タグが持つルートデザイン設計
- CSSによるUI/UXを意識したデザイン調整
つまり、Templateはユーザー行動を意識したデザインを考慮することになります。
Templateを実装する際に必要な知識が以下の内容になります。
- ルーティングの理解
- テンプレートエンジン(jinja2)の理解
- 共通テンプレートと継承
- データ出力のロジック設計
Templateの作成方法や共通化/継承など具体的に知りたい人は、「【Flask】Webアプリ開発におけるTemplateの役割」を一読ください。
Flask以外のPython製Webフレームワーク
Python製の代表的なWebフレームワークが存在します。
特に、Flaskと比較されるのが以下のDjango、Bottle、FastAPIです。
フレームワーク | 公式サイト | 初回リリース時期 |
---|---|---|
Flask(フラスク/フラスコ) | https://palletsprojects.com/p/flask/ | 2010年 |
Django(ジャンゴ) | https://www.djangoproject.com/ | 2005年 |
Bottle(ボトル) | https://bottlepy.org/docs/dev/ | 2009年 |
FastAPI(ファストエーピーアイ) | https://fastapi.tiangolo.com/ | 2018年 |
Flaskでできること
上述した通り、Flaskの特徴から小規模から中規模のアプリ開発に利用され、カスタマイズ性の高さがメリットです。
基本的に、機能別でアプリ開発を実施できるため、規模の小さい機能をつなぎ合わせ拡張していきます。
本サイトでは、FlaskによるWebアプリ開発のチュートリアルとして以下の開発記事があります。
- flask-mailによるcontact-formアプリ
- flask-loginによるログイン認証アプリ
- 画像ファイルアップロード機能を実装した画像表示アプリ
flask-mailによるcontact-formアプリ
- PRGパターン(POST/REDIRECT/GET)の理解
- request, redirectモジュールの理解と使い方
- formの使い方
特に、flsak-mailによるメール送信機能を実装してみたい人は「Flaskによるrequest・redirectを利用したformの使い方」を一読ください。
flask-loginによるログイン認証アプリ
- flask-loginの使い方を理解する
- サインアップ/ログイン認証/ログアウト機能の実装方法を理解する
- バリデーションチェックやデータベース操作を理解する
特に、flsak-loginによるログイン認証機能を実装してみたい人は「【Flask】flask-loginによるログイン機能を実装した認証アプリ開発」を一読ください。
画像ファイルアップロード機能を実装した画像表示アプリ
- 画像ファイルアップロード機能の使い方を理解する
- 画像と紐づくデータベース操作を理解する
- 画像ファイルの表示方法と削除方法を理解する
特に、Webアプリ上での画像の扱い方を実装してみたい人は「【Flask】画像ファイルアップロード機能を実装した画像表示アプリ開発」を一読ください。
Flaskを利用するためのPython環境構築
PythonのWebフレームワークであるFlaskを利用するには、開発におけるPythonの環境構築が必要です。
Pythonの開発環境を構築するために、以下の手順を示します。
- Pythonのダウンロードとインストール
- VSCode(Visual Studio Code)のインストール
- Flaskのインストール
本記事では、Flaskのインストールからメインに記載しておりますが、PythonとVSCodeインストールがまだできていない人は「【Python】ダウンロードとインストール方法から環境構築まで解説!」を一読ください。
Pythonにてローカル環境に仮想環境を作成する
Pythonで開発を実施する際、開発プロジェクトごとに専用の実行環境を作成し切り替えることができます。
また、開発用として一時的に作成する実行環境を「仮想環境」と呼びます。
ローカル環境で開発を進めるにあたり、venvモジュールを利用し仮想環境を構築します。
venvは、Pythonに標準搭載された仮想環境用モジュールです。
venvを利用することで、プロジェクトごとに分離したPython実行環境を構築できるため、各実行環境でそれぞれのパッケージを管理できます。
Pythonによる仮想環境の構築方法が知りたい人は、「【Python】ダウンロードとインストール方法から環境構築まで解説!」を一読ください。
Flaskのインストール
本記事では、WindowsPCによる任意のディレクトリにて「flask-project」を作成しています。
インストール自体は簡単で、以下のコマンドを実行しましょう。
pip install flask
上記のコマンドを実行すると、インストールが完了します。
Flaskが依存しているパッケージ
Flaskをインストールすると、Flaskが依存しているパッケージも同時にインストールされます。
また、インストールされたパッケージを確認するには、以下のコマンドで確認できます。
pip list
Flaskをインストールすることで同時にインストールされるパッケージは以下です。
パッケージ | 説明 |
---|---|
click | コマンドライン用のフレームワークでFlaskのカスタムコマンドを使う際に利用する。 |
itsdangerous | 安全にデータを署名しデータの整合性を確保する。 FlaskのセッションやCookieを保護するために利用される。 |
jinja2 | デフォルトのHTMLテンプレートエンジン。 別のテンプレートエンジンも使用可能。 |
MarkupSafe | インジェクション攻撃を回避するために、テンプレートをレンダリングする際に信頼できない入力をエスケープする。 |
Werkzeug | WSGIツールキットでFlaskのコア実装はWerkzeugを基に作られている。 |
Flaskで利用する代表的なモジュール
Flaskでは、標準で以下の代表的なモジュールが利用できます。
- current_app
- flash
- g
- make_response
- redirect
- request
- render_template
- send_file
- send_from_directory
- url_for
Flaskで様々な機能を実現する場合は、拡張機能をインストールする必要があります。
拡張機能で利用したいFlaskパッケージについては、以下サイトで検索してみるとよいです。
Flaskの主なコマンド
Flaskをインストールすると、flaskコマンドが利用できます。
flaskまたはflask –helpコマンドでオプションを確認できます。
また、以下がflaskの主なコマンドになります。
コマンド | 説明 |
---|---|
flask run | 開発時にFlaskの組み込みサーバーを実行するためのコマンド |
flask routes | アプリのルーティング情報を出力するコマンド |
flask shell | Pythonインタラクティブシェルを使う場合に利用するコマンド |
特に、flask runコマンドとflask routesコマンドを詳細に解説します。
flask runコマンド
flask runコマンドは、開発時にFlaskの組み込みサーバーを実行するコマンドであり、多くのオプションが存在します。
flask runコマンドの主なオプション内容は以下です。
オプション | 内容 |
---|---|
flask run -hまたは–host | ホストを指定する。 |
flask run -pまたは–port | ポートを指定する。 |
flask run –reloadまたは–no-reload | オートリロードをオン/オフする。 コード編集時に自動反映したい場合はオンにする。 デバックモード時はデフォルトでオンになる。 |
flask run –debuggerまたは–no-debugger | デバッガーをオン/オフする。 デバッグモード時はデフォルトでオンになる。 |
flask run –help | コマンドオプションを表示する。 |
flask routesコマンド
flask routesコマンドは、アプリのルーティング情報を出力するコマンドです。
ルーティングとは、リクエスト先のURLと処理する関数を紐づける作業を指します。
flask routesコマンドを実行すると、追加したルートの紐づけ情報が確認できます。(Flaskアプリが存在しないと実行できない。)
flask routesコマンドの実行結果で出力される項目は以下です。
項目 | 説明 |
---|---|
Endpoint | URLにアクセスされた際に実行する関数または指定した名前。 staticは静的ファイル用のエンドポイントが常に固定で存在する。 |
Methods | アクセス許可するHTTPメソッド。 指定がない場合はGETがデフォルトになる。 |
Rule | アクセスするURLのルール。 |
Flaskの実装
本記事では、Flaskの利用する目的のみで最小限のアプリケーションを実装し実行まで行います。
そのため、以下が本アプリの構成ファイルになります。
flask-project
└── app.py
上記の構成ファイルをもとに、最小限のFlaskアプリケーションを開発するため、任意のディレクトリにてフォルダおよびファイルを作成してください。
app.pyの実装
VSCodeにて、app.pyを作成し、実装を行うためファイルを開きます。
# Flaskをimport
from flask import Flask
# Flaskクラスをインスタンス化
app = Flask(__name__)
上記では、flaskをインポートしています。
また、本来インスタンス化することで直接オブジェクトに触れず、データの衝突を防ぐことができます。
# URLと実行する関数をマッピング
@app.route("/")
def index():
return 'Hello World!'
Flaskでは、関数の先頭にデコレータと呼ばれる関数@app.route()を記述することで、ルートを追加できます。
上記では、@app.route(“/”)デコレータはindex関数をアプリケーションのURL(パス)/
にマッピングしています。
app.py
# Flaskをimport
from flask import Flask
# Flaskクラスをインスタンス化
app = Flask(__name__)
# URLと実行する関数をマッピング
@app.route("/")
def index():
return 'Hello World!'
flask runコマンドの実行
ターミナル(あるいはVSCode内のターミナル)にて、任意のディレクトリでflask runコマンドを実行します。
ターミナル上で実行すると、以下の実行結果が返ってきます。
PS C:\Users\sugir\documents\application\flask-project> flask run --debug
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 116-480-154
上記のコマンドを実行した際に表示されるURL:http://127.0.0.1:5000をブラウザのバーに入力してください。
画像のように、左上に「Hello World!」が表示されていれば問題なく起動完了です。
FlaskによるWebアプリ開発の基本知識
Webアプリ開発を実施する上で、むやみやたらにコーディングすることはお勧めしません。
なぜなら、ディレクトリや格納ファイルの管理、1ファイル内の冗長化したコード管理などアプリの拡張性に影響を及ぼすからです。
そのため、Flaskの基本的なディレクトリ構成(MVTモデル)を理解しておきましょう。
以下は、Flaskにおける基本的なディレクトリ構成例になります。
flask-project
├── .env
└── apps
├── app.py
├── config.py
├── static
│ └── bootstrap.min.css
└── auth
├── __init__.py
├── forms.py
├── models.py
├── static/css
│ └── style.css
├── templates
│ └── auth
│ ├── base.html
│ ├── index.html
│ ├── login.html
│ └── signup.html
└── views.py
- flask-project:開発用ディレクトリ名
- apps:格納されたアプリを管理するディレクトリ
- static:静的ファイルのディレクトリ
- auth:認証アプリの関連ファイルを格納したディレクトリ
- templates:HTMLファイルを格納したディレクトリ
各ファイルをMVTモデルに沿って仕分けると以下になります。
- Model:models.py
- View:views.py
- Template:css, htmlファイル
上記のように、役割に応じてディレクトリ構造とファイル配置によって記述するコードを限定化します。
また、FlaskにおけるWebアプリ開発の基本知識は他にも存在します。
- Blueprint
- ルーティング
- テンプレート
上記の基本知識は、Flaskに限らずWebアプリ開発で重要になります。
Blueprintとは
Blueprintとは、アプリケーションを分割するためのFlaskの拡張機能です。
Blueprintは、次のような特徴があります。
- アプリケーションを分割できる
- url_prefix, subdomainを指定しアプリケーションルートを区別できる
- Blueprint単位でテンプレートを分けられる
- Blueprint単位で静的ファイルを分けられる
Blueprintを利用すると、アプリケーション全体が大規模になっても簡潔な状態を保ち、アプリの保守性が向上します。
また、アプリを分割しているため1ファイルにおけるコードの可読性も高めます。
そのため、Blueprintを活用することでアプリケーション開発時に以下のメリットが享受できます。
- アプリケーション全体の保守性向上
- 1ファイルにおけるコードの可読性向上
ディレクトリ構成が可視化しやすいため、開発効率も高まるメリットがあります。
Blueprintによるアプリ分割
例として、以下のディレクトリ構成を想定します。
flask-project
├── .env
├── apps
│ ├── app.py
│ ├── config.py
│ ├── static
│ │ └── bootstrap.min.css
│ ├── auth ← blueprintアプリ
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ ├── models.py
│ │ ├── static/css
│ │ │ └── style.css
│ │ ├── templates
│ │ │ └── auth
│ │ │ ├── base.html
│ │ │ ├── index.html
│ │ │ ├── login.html
│ │ │ └── signup.html
│ │ └── views.py
│ └── todo ← blueprintアプリ
│ ├── __init__.py
│ ├── forms.py
│ ├── models.py
│ ├── static
│ │ └── style.css
│ ├── templates
│ │ └── todo
│ │ ├── base.html
│ │ ├── index.html
│ │ ├── todo_create.html
│ │ ├── todo_edit.html
│ │ ├── todo_done.html
│ │ └── todo_delete.html
│ └── views.py
├── local.sqlite
└── migrations
開発側は、Blueprintを利用することで独立したアプリ開発が可能になります。
ユーザー側は、認証機能を持ったToDoアプリといったように一つのアプリとして認識できます。
FlaskにおけるBlueprintの使い方や具体的な実装方法を知りたい人は、「【Flask】Blueprintとは?使い方と実装方法を解説」を一読ください。
ルーティングとは
Flaskにてルーティングを利用する場合、以下の基本的な使い方を理解しましょう。
- ルーティングを設定する
- flask routesコマンドでルーティング情報を確認する
- FlaskのEndpoint(エンドポイント)を設定する
- Ruleに変数を設定する
FlaskのViewとTemplateを理解するために「ルーティング」を知りたい人は「【Python】Flaskによるルーティングの利用方法とテンプレート活用」を一読ください。
テンプレートとは
Flaskにてテンプレートを利用する場合、以下の基本的な使い方を理解しましょう。
- テンプレートエンジンを利用する
- テンプレート(templates)を作成する
- Jinja2の基本的な使い方を理解する
FlaskのViewとTemplateを理解するために「テンプレート」を知りたい人は「【Python】Flaskによるルーティングの利用方法とテンプレート活用」を一読ください。
本格的にエンジニアへのキャリアチェンジを考えてる人へ
プログラミングスキルを社内やプライベートで活用している人が増えています。
- 一部業務プロセスの効率化/自動化
- 分析システム構築による担当業務改善
- 社内公開によるチーム/プロジェクトの業務時間短縮
Pythonは特にデータ収集や分析に特化したライブラリが豊富なため、業務プロセスの一元管理やDX化に貢献しています。
また、プログラミングに触れてエンジニアへのキャリアチェンジを実現したい人の人材規模も年々高まっています。
一度、あなたのキャリアプランを振り返ってみてください。
- 収入アップが見込めている
- キャリアアップが見込めている
- 働き方を明確に決めれている
上記の項目をYESと答えられる人は、特に言うことはありません。
現在、エンジニアへのキャリアチェンジでお悩みの方は、「【Python特化】厳選したおすすめプログラミングスクール」を一読ください。
コメント