メインコンテンツへスキップ

Flaskはなぜ今も死なないのか

🧭 はじめに(What / Why)

このページでは Flaskが「古い・軽量・時代遅れ」と言われながら、なぜ今も現役で使われ続けているのか を整理する。

  • Flaskは何を目的として生まれたフレームワークか
  • FastAPIやDjangoが普及した現在でも選ばれる理由は何か
  • 「Flaskを選ぶ判断」が成立する境界はどこか

到達点はシンプルで、 「Flaskは“何でもできる”道具ではなく、“責任範囲が明確な道具”だと理解できること」


🧱 立ち位置の整理(Before / After)

Before:Python Webフレームワークの状況

  • 標準ライブラリにはWebフレームワークは存在しない

  • WSGIはあるが、アプリケーション構造は各自で設計する必要があった

  • Djangoは存在していたが、

    • ORM
    • 認証
    • 管理画面
    • 設定規約 が一体化しすぎていると感じる層も多かった

After:Flaskの立ち位置

Flaskは 「Webアプリの最小骨格」 を提供するために登場した。

  • ルーティング
  • リクエスト / レスポンス
  • テンプレート連携(Jinja2)
  • WSGIとの自然な接続

それ以上は 意図的に提供しない

Flaskは「Djangoの軽量版」ではない。責務を限定した設計という別解である。


🧠 設計思想の核(最重要)

Flaskが優先したもの

  • 明示性
  • 最小主義
  • フレームワークが主張しすぎないこと

Flaskは「こう書け」とは言わない。 代わりに「ここまで用意するから、あとは自分で決めろ」と言う。

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello"

この簡潔さは偶然ではない。

Flaskが捨てたもの

  • デフォルトORM
  • デフォルト認証
  • 設定ファイル規約
  • プロジェクト構成テンプレートの強制

Flaskは「フレームワークの意思」より「利用者の意思」を優先する。


🎯 できること / できないこと

得意なこと

  • 小〜中規模Webサービス
  • 内部向けAPI
  • プロトタイプ
  • 既存システムへの組み込み
  • WebというI/O層だけを担当する構成

向いていないこと

  • 大規模チームでの暗黙知に依存しない開発
  • 初学者大量投入プロジェクト
  • 「何も考えずに正解に辿り着きたい」ケース

Flaskは設計をサボると一気に破綻する。 「自由」はそのまま「責任」になる。


🧩 典型的な利用パターン(最小)

Flaskは 「Webの入口」だけを担当させる のが典型。

[Client]
   ↓
[Flask]
   ↓
[Application / Domain Logic]
   ↓
[DB / External API]
  • FlaskはI/O変換のみ
  • ビジネスロジックは外に出す
  • dataclass / pydantic / service層と自然に分離可能

Flaskは「薄く使う」ほど強い


🚨 よくある誤解・アンチパターン

❌ Flask = 何でも自由に書いてよい

  • 単一ファイル巨大化
  • グローバル状態氾濫
  • 暗黙依存だらけ

設計責任を放棄した結果

❌ FastAPIがあるからFlaskは不要

  • FastAPIは型駆動・API志向
  • Flaskは構造を押し付けない

思想が違う。

「FastAPIの下位互換としてFlaskを見る」のは完全な誤認


🔗 他ライブラリとの関係

  • FastAPI → 型・OpenAPI・自動生成重視
  • Django → 一貫した規約と統合体験
  • Flask → Web層の最小責務

Flaskは 他OSSと組み合わせる前提 で成立している。


🧾 まとめ(1文で言うと)

Flaskは「Webフレームワーク」ではなく、「WebというI/Oを引き受ける最小の器」である。