Flask ふらすく
簡単に言うとこんな感じ!
FlaskはPythonでWebアプリを作るための「小さくて身軽な道具箱」だよ!必要なものだけ自分で選んで組み合わせる自由さが魅力で、「まず動くものを作りたい!」というときにぴったりなんだ。大きなフレームワークが「全部入りスーパー」なら、Flaskは「厳選食材の専門店」って感じ!
Flaskとは
Flaskは、Pythonで書かれたマイクロWebフレームワークです。「マイクロ」といっても機能が少ないわけではなく、「コアをシンプルに保ちつつ、必要な機能は拡張機能(プラグイン)で追加する」という設計思想を指します。2010年にArmin Ronacher(アーミン・ロナッハー)が公開し、現在はPythonのWebフレームワークとして世界中で広く使われています。
Flaskの最大の特徴は自由度の高さです。データベースの接続方法、認証の仕組み、テンプレートエンジンなど、多くの選択肢をプロジェクトの用途に合わせて開発者自身が選べます。これはDjango(ジャンゴ)のような「全部入り」フレームワークとは対照的なアプローチです。システム発注の観点では、「小規模なAPI・社内ツール・プロトタイプ」ならFlask、「大規模な業務システム・EC」ならDjangoと使い分けられることが多いです。
Flaskの仕組みと構成要素
Flaskは大きく3つのコアコンポーネントで成り立っています。
| コンポーネント | 役割 | 具体例 |
|---|---|---|
| Werkzeug(ヴェルクツォイク) | HTTPリクエスト・レスポンスを処理するWSGIライブラリ | URLの解析・クッキー管理など |
| Jinja2(ジンジャツー) | HTMLテンプレートエンジン | {{ user.name }} のような変数埋め込み |
| Click | コマンドラインツール | flask run などのCLI操作 |
Flaskアプリの最小構成
最もシンプルなFlaskアプリはたった5行で書けます。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
@app.route("/") はデコレーターと呼ばれる記法で、「このURLにアクセスが来たらこの関数を呼ぶ」という対応関係を定義します。URLとPythonの関数をひもづけるこの仕組みをルーティングといいます。
Flaskのリクエスト処理の流れ
ブラウザ/クライアント
│
│ HTTPリクエスト(GET /users など)
▼
Werkzeug(WSGIサーバー)
│
│ URLを解析・ルーティング
▼
Flaskアプリ(ビュー関数)
│
│ 必要に応じてDBアクセス・処理
▼
Jinja2(テンプレート or JSONレスポンス)
│
│ HTTPレスポンス
▼
ブラウザ/クライアント
歴史と背景
- 2010年4月1日 — Armin Ronacherがエイプリルフールのジョークとして公開。しかし反響が大きく、本格開発が始まる
- 2010年後半 — PyPIに正式登録。「Werkzeug + Jinja2 + URLルーティング」のシンプルな構成が支持を集める
- 2013〜2016年 — REST API開発ブームの波に乗り、軽量さが評価されて急速に普及
- 2018年 — Flask 1.0リリース。長らくバージョン0.x系だったが、安定版として正式メジャーリリース
- 2020年 — Flask 2.0リリース。Python 3.6以上必須、非同期処理(async/await)のサポートを追加
- 2024年現在 — Flask 3.x系が最新。データサイエンス・機械学習モデルをAPIとして公開する用途でも多用されている
DjangoとFlaskの比較
PythonのWebフレームワークとして最もよく比較されるDjango(ジャンゴ)との違いを整理します。
Flaskが向いているケース
| ユースケース | 理由 |
|---|---|
| 社内ツール・管理スクリプトのWeb化 | シンプルな構成で素早く構築できる |
| REST APIサーバー | 余計な機能がなくAPIに集中しやすい |
| 機械学習モデルのAPI公開 | PythonのMLライブラリと相性抜群 |
| プロトタイプ・PoC | 小さく始めて素早く検証できる |
| 学習・教育目的 | コード量が少なく仕組みを理解しやすい |
主なFlask拡張機能(プラグイン)
Flaskは本体に機能がない分、豊富な拡張機能で補います。
Flask本体(コア)
├── Flask-SQLAlchemy → データベース操作(ORM)
├── Flask-Login → ユーザー認証・セッション管理
├── Flask-WTF → Webフォーム・バリデーション
├── Flask-RESTful → REST API構築の補助
├── Flask-Migrate → DBスキーママイグレーション
└── Flask-CORS → クロスオリジン(CORS)対応
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 3875 | CGI(Common Gateway Interface)の仕様。WSGIの前身にあたるWebサーバーとアプリの連携仕様 |
| RFC 7231 | HTTP/1.1のセマンティクス(GET・POST・PUT・DELETEなどのメソッド定義) |
| RFC 7807 | REST APIのエラーレスポンス形式(Problem Details for HTTP APIs) |
関連用語
- Django — PythonのフルスタックWebフレームワーク。Flaskと対をなす存在
- REST API — HTTP通信でデータをやり取りするAPIの設計スタイル。Flaskの主要ユースケース
- WSGI — PythonのWebフレームワークとWebサーバーをつなぐ標準インターフェース規約
- Python — Flaskが書かれているプログラミング言語
- Jinja2 — FlaskのデフォルトHTMLテンプレートエンジン
- JSON — FlaskでREST APIを作る際のデータ交換フォーマット
- FastAPI — Flaskと同様のPython製軽量フレームワーク。非同期処理に強い
- Docker — Flaskアプリをコンテナ化して本番環境へデプロイする際によく使われる技術