ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Python の主要 Web フレームワーク
| フレームワーク | タイプ | 初版 | 特徴 | 採用事例 |
|---|---|---|---|---|
| Django | フルスタック | 2005 | ORM/Admin/認証同梱、 大規模対応 | Instagram、 Pinterest、 Disqus |
| Flask | マイクロ | 2010 | 最小コア、 拡張で組み立て | Netflix、 LinkedIn 一部 |
| FastAPI | API/ASGI | 2018 | 型ヒント、 非同期、 OpenAPI 自動 | Uber、 Microsoft、 Netflix |
| Pyramid | 柔軟系 | 2010 | 小〜大規模で同じコード | Mozilla, Yelp |
| Tornado | 非同期 | 2009 | 長時間接続・WebSocket | FriendFeed(Facebook 買収) |
| Bottle | マイクロ | 2009 | 単一ファイル、 学習用 | 小規模ツール多数 |
| Sanic | 非同期 | 2016 | Flask 風 API、 uvloop で高速 | ベンチ系 |
| Litestar (旧 Starlite) | API/ASGI | 2021 | FastAPI 代替、 機能豊富 | 新興 |
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/')
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("Hello, Tornado!")
app = tornado.web.Application([(r"/", MainHandler)])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
# Sanic — Flask 風 + 非同期
from sanic import Sanic
from sanic.response import json
app = Sanic("MyApp")
@app.get("/")
async def hello(request):
return json({"hello": "sanic"})
# 起動
# sanic main:app --host 0.0.0.0 --port 8000
データサイエンス UI フレームワーク
Python だけで分析ダッシュボードや機械学習デモを作れるツール群:
| ツール | 用途 | 特徴 |
|---|---|---|
| Streamlit | 分析ダッシュボード | スクリプト的にコードを書くだけで UI に |
| Dash (Plotly) | BI ダッシュボード | 本格的、 コールバックベース、 商用利用多 |
| Gradio | ML デモ UI | HuggingFace Spaces の標準、 共有 URL 自動 |
| Panel | 科学計算ダッシュボード | HoloViz、 Jupyter 連携強 |
| Voila | Jupyter 直接公開 | Notebook をそのまま Web に |
| Shiny for Python | R 出身者向け | RStudio (Posit) 製、 リアクティブ |
# Streamlit: わずか数行でダッシュボード
import streamlit as st
import pandas as pd
st.title("売上ダッシュボード")
df = pd.read_csv("sales.csv")
st.dataframe(df)
month = st.selectbox("月", 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 {"cat": 0.8, "dog": 0.2}
demo = gr.Interface(fn=classify, inputs="image", outputs="label")
demo.launch()
選び方フローチャート
- 管理画面が必要 / 認証必須 / 業務 Web → Django
- REST API のみ / マイクロサービス / ML モデル提供 → FastAPI
- 軽量プロトタイプ / 学習 / 既存への組込み → Flask
- WebSocket / 長時間接続が必要 → Tornado / Sanic / FastAPI
- データ分析の即席 UI → Streamlit / Gradio
- 本格的 BI ダッシュボード → Dash
- 大規模・両極端対応 → Pyramid
学習曲線とエコシステム
| 項目 | Django | Flask | FastAPI |
|---|---|---|---|
| 学習曲線 | 急 (規約多) | 緩 (自由) | 中 (型ヒント前提) |
| ドキュメント | 豊富・公式が網羅 | シンプル、 拡張ごと | 公式が秀逸(チュートリアル形式) |
| 非同期 | 4.1+ で対応 (ASGI) | 2.0+ で部分対応 | ネイティブ |
| ORM | Django ORM 同梱 | SQLAlchemy 自前 | SQLAlchemy / Tortoise |
| 管理画面 | 標準同梱 | Flask-Admin 等 | SQLAdmin 等 |
| テスト | 標準 test ランナー | pytest + Flask 拡張 | pytest + TestClient |
| 本番運用 | gunicorn + nginx | gunicorn + nginx | uvicorn + 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 が定番。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?