この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:8
ページ更新者:ぼうず
更新日時:2026-06-11 07:12:00

タイトル: フレームワーク
SEOタイトル: Python の Web フレームワーク比較 — Django / Flask / FastAPI の選び方

この記事の要点
  • Python の Web フレームワーク御三家は Django (フル) / Flask (マイクロ) / FastAPI (型ヒント+非同期)
  • Django: 管理画面・ORM・認証込みでスタートアップから大規模まで。 Instagram / Pinterest 採用
  • FastAPI: 2018 年登場、 OpenAPI 自動生成 + 高速。 機械学習 API の定番に
  • データサイエンス UI: Streamlit / Dash / Gradio — Python だけでダッシュボード作成
  • 選び方: 業務 Web は DjangoAPI/マイクロサービスは FastAPI軽量で学習用なら Flask

Python の主要 Web フレームワーク

フレームワークタイプ初版特徴採用事例
Djangoフルスタック2005ORM/Admin/認証同梱、 大規模対応Instagram、 Pinterest、 Disqus
Flaskマイクロ2010最小コア、 拡張で組み立てNetflix、 LinkedIn 一部
FastAPIAPI/ASGI2018型ヒント、 非同期、 OpenAPI 自動Uber、 Microsoft、 Netflix
Pyramid柔軟系2010小〜大規模で同じコードMozilla, Yelp
Tornado非同期2009長時間接続・WebSocketFriendFeed(Facebook 買収)
Bottleマイクロ2009単一ファイル、 学習用小規模ツール多数
Sanic非同期2016Flask 風 API、 uvloop で高速ベンチ系
Litestar (旧 Starlite)API/ASGI2021FastAPI 代替、 機能豊富新興

Django — フルスタックの王道

「Web 開発のすべて」をパッケージにしたフレームワーク。 管理画面・ORM・認証・テンプレート・国際化・セキュリティが標準同梱。 1 つの大きなアプリを作るのに最適。

# Django: 最小コード(実際は startproject で雛形生成)
# views.py
from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, Django!")

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello),
]

# Model
from django.db import models
class Article(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

# 起動
# python manage.py runserver

使うべき場面: CMS / 業務 Web / EC / コミュニティサイト / 管理画面が必要なシステム

Flask — マイクロフレームワーク

核は最小、 必要なものは自分で選ぶ」哲学。 ORM (SQLAlchemy) ・認証 (Flask-Login) ・フォーム (WTForms) を必要に応じて追加。

# Flask: シンプル API
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Flask!"

@app.route('/users/<int:user_id>')
def get_user(user_id):
    return jsonify({"id": user_id, "name": f"User{user_id}"})

@app.route('/items', methods=['POST'])
def create_item():
    data = request.get_json()
    return jsonify({"created": data}), 201

if __name__ == '__main__':
    app.run(debug=True)

使うべき場面: 小〜中規模 API、 プロトタイプ、 学習、 既存システムへの組み込み

FastAPI — 型ヒント + 非同期

2018 年登場の新世代。 Python 型ヒントから入力検証・OpenAPI ドキュメント・JSON シリアライズを自動生成。 ASGI で非同期 I/O に対応。

# FastAPI: 型ヒントベース
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional

app = FastAPI(title="My API", version="1.0.0")

class User(BaseModel):
    name: str
    age: int
    email: Optional[str] = None

@app.get("/")
async def root():
    return {"msg": "Hello, FastAPI!"}

@app.post("/users/", response_model=User)
async def create_user(user: User):
    # 入力検証は Pydantic が自動
    if user.age < 0:
        raise HTTPException(status_code=400, detail="age must be >= 0")
    return user

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    return {"id": user_id, "name": f"User{user_id}"}

# 起動
# uvicorn main:app --reload
# OpenAPI ドキュメント: http://localhost:8000/docs (Swagger UI)
# Redoc:               http://localhost:8000/redoc

使うべき場面: マイクロサービス API、 機械学習モデルの提供、 OpenAPI ファースト開発

非同期系: Tornado / Sanic / Litestar

# Tornado — 老舗の非同期フレームワーク
import tornado.web
import tornado.ioloop

class MainHandler(tornado.web.RequestHandler):
    async def get(self):
        # 非同期 DB アクセス等
        self.write(&quot;Hello, Tornado!&quot;)

app = tornado.web.Application([(r&quot;/&quot;, MainHandler)])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()

# Sanic — Flask 風 + 非同期
from sanic import Sanic
from sanic.response import json

app = Sanic(&quot;MyApp&quot;)

@app.get(&quot;/&quot;)
async def hello(request):
    return json({&quot;hello&quot;: &quot;sanic&quot;})

# 起動
# sanic main:app --host 0.0.0.0 --port 8000

データサイエンス UI フレームワーク

Python だけで分析ダッシュボードや機械学習デモを作れるツール群:

ツール用途特徴
Streamlit分析ダッシュボードスクリプト的にコードを書くだけで UI に
Dash (Plotly)BI ダッシュボード本格的、 コールバックベース、 商用利用多
GradioML デモ UIHuggingFace Spaces の標準、 共有 URL 自動
Panel科学計算ダッシュボードHoloViz、 Jupyter 連携強
VoilaJupyter 直接公開Notebook をそのまま Web に
Shiny for PythonR 出身者向けRStudio (Posit) 製、 リアクティブ
# Streamlit: わずか数行でダッシュボード
import streamlit as st
import pandas as pd

st.title(&quot;売上ダッシュボード&quot;)

df = pd.read_csv(&quot;sales.csv&quot;)
st.dataframe(df)

month = st.selectbox(&quot;月&quot;, df['month'].unique())
filtered = df[df['month'] == month]
st.bar_chart(filtered.set_index('product')['sales'])

# 起動: streamlit run app.py

# Gradio: ML モデルの即席 UI
import gradio as gr

def classify(image):
    # 何らかの ML 推論
    return {&quot;cat&quot;: 0.8, &quot;dog&quot;: 0.2}

demo = gr.Interface(fn=classify, inputs=&quot;image&quot;, outputs=&quot;label&quot;)
demo.launch()

選び方フローチャート

  • 管理画面が必要 / 認証必須 / 業務 WebDjango
  • REST API のみ / マイクロサービス / ML モデル提供FastAPI
  • 軽量プロトタイプ / 学習 / 既存への組込みFlask
  • WebSocket / 長時間接続が必要Tornado / Sanic / FastAPI
  • データ分析の即席 UIStreamlit / Gradio
  • 本格的 BI ダッシュボードDash
  • 大規模・両極端対応Pyramid

学習曲線とエコシステム

項目DjangoFlaskFastAPI
学習曲線急 (規約多)緩 (自由)中 (型ヒント前提)
ドキュメント豊富・公式が網羅シンプル、 拡張ごと公式が秀逸(チュートリアル形式)
非同期4.1+ で対応 (ASGI)2.0+ で部分対応ネイティブ
ORMDjango ORM 同梱SQLAlchemy 自前SQLAlchemy / Tortoise
管理画面標準同梱Flask-Admin 等SQLAdmin 等
テスト標準 test ランナーpytest + Flask 拡張pytest + TestClient
本番運用gunicorn + nginxgunicorn + nginxuvicorn + nginx

人気度の推移

GitHub Star 数 (2026 年時点目安):

  • Django: 78k+ — 安定して伸び
  • FastAPI: 75k+ — 2020 年以降急上昇、 Django に追いつく勢い
  • Flask: 67k+ — 緩やかに伸び
  • Streamlit: 33k+ — データサイエンス需要で急成長
  • Gradio: 32k+ — LLM 時代に大躍進

JetBrains の年次調査でも FastAPI が 2020 年の 14% から 2024 年に 29%へ倍増、 Django 47% / Flask 39% を脅かす存在になりました。

FAQ

Q: Django と Flask、 どちらから学ぶ?
A: Django 推奨。 Web 開発に必要な要素が一通り入っているため全体像が掴みやすい。 Flask は「自由ゆえに迷う」段階を後回しに。

Q: FastAPI で SSR (テンプレート HTML) できる?
A: できますが本領ではない。 Jinja2 でテンプレート使えますが、 HTML を返すなら Django、 API なら FastAPI が役割分担。

Q: Streamlit と Dash の違い?
A: Streamlit はスクリプト的でとにかく速い、 Dash は本格 BI でコールバック設計が必要。 試作は Streamlit、 製品化は Dash が定番。