Webバックエンド - フレームワーク

Flask ふらすく

PythonWebフレームワークマイクロフレームワークWSGIREST APIJinja2
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 vs Django — 特徴比較 Flask マイクロフレームワーク Django フルスタックフレームワーク 規模感 小〜中規模・API向き 規模感 中〜大規模・業務システム向き ← 同じ軸で比較 ← 同じ軸で比較 ✅ 学習コストが低い ✅ 小さく始めやすい ✅ REST API・機械学習連携に最適 ✅ 構成の自由度が高い ⚠️ 大規模化で設計力が必要 ⚠️ 機能追加は自分で選定 ⚠️ 管理画面は標準で持たない ✅ 管理画面が標準搭載 ✅ ORM・認証が最初から揃う ✅ 大規模開発の実績が豊富 ✅ セキュリティ対策が組込み ⚠️ 学習コストがやや高い ⚠️ 小規模用途では過剰になりがち ⚠️ 構成の自由度は低め 「何を作るか」で選ぼう。どちらが優れているという話ではない

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 3875CGI(Common Gateway Interface)の仕様。WSGIの前身にあたるWebサーバーとアプリの連携仕様
RFC 7231HTTP/1.1のセマンティクス(GET・POST・PUT・DELETEなどのメソッド定義)
RFC 7807REST 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アプリをコンテナ化して本番環境へデプロイする際によく使われる技術