Pythonのミドルウェアとは

Pythonのミドルウェア,イメージ

AI実装検定のご案内

Pythonにおける「ミドルウェア(middleware)」とは、アプリケーションのリクエストとレスポンスの間に入り込み、処理の流れを制御・変更するソフトウェアの層のことを指します。

これは特にWebアプリケーション開発で頻繁に使われる概念で、フレームワーク(例:Django, Flask, FastAPI)と密接に関係しています。

目次

ミドルウェアの役割とは

ミドルウェアは、アプリケーションの主なロジックとは独立して、共通処理を挿入できる仕組みです。

具体的な役割には以下のようなものがあります。

処理内容説明
認証・認可ユーザーがログインしているか、アクセス権を持っているかのチェック
ログ出力どのリクエストがいつ来たかを記録
エラー処理例外が発生したときの共通的なハンドリング
リクエスト変換クライアントからのデータを加工、整形
レスポンス追加処理ヘッダー追加、データ圧縮、レスポンスのキャッシュ制御など
CORS制御クロスオリジンリクエストの許可・拒否の制御

Pythonの代表的なWebフレームワークにおけるミドルウェアの使われ方

Djangoのミドルウェア

Djangoでは、ミドルウェアはクラスとして実装されます。

# myapp/middleware.py
class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print("リクエスト前処理")
        response = self.get_response(request)
        print("レスポンス後処理")
        return response

このミドルウェアは、リクエストがビューに届く前後に処理を挿入できます。

Django設定ファイルの MIDDLEWARE リストに追加すると有効になります。

MIDDLEWARE = [
    'myapp.middleware.SimpleMiddleware',
    ...
]

Flaskのミドルウェア

Flaskには「正式なミドルウェア」という仕組みは存在しませんが、before_requestafter_request フックを使って同様のことができます。

from flask import Flask, request

app = Flask(__name__)

@app.before_request
def before():
    print("リクエスト前の処理")

@app.after_request
def after(response):
    print("レスポンス後の処理")
    return response

また、WSGIミドルウェアを使って、アプリ自体をラップすることも可能です(後述)。

FastAPIのミドルウェア

FastAPIは @app.middleware("http") デコレータを使って、より明確にミドルウェアを定義できます。

!pip install fastapi uvicorn

from fastapi import FastAPI, Request
from starlette.middleware.base import BaseHTTPMiddleware

app = FastAPI()

@app.middleware("http")
async def log_middleware(request: Request, call_next):
    print(f"アクセス:{request.url}")
    response = await call_next(request)
    print("レスポンス生成完了")
    return response

FastAPIでもクラスベースでミドルウェアを定義できます。

WSGIミドルウェアとは?

Python Webアプリケーションは、WSGI(Web Server Gateway Interface) という共通インタフェースに基づいて実装されることが多いです。

WSGIミドルウェアは、アプリケーションを包み込むようにして拡張する関数またはクラスです。

def simple_wsgi_middleware(app):
    def wrapper(environ, start_response):
        print("WSGI ミドルウェア:リクエスト処理中")
        return app(environ, start_response)
    return wrapper

# Flaskアプリに適用
app.wsgi_app = simple_wsgi_middleware(app.wsgi_app)

このように、WSGIレベルで共通処理を加えることもできます。

ミドルウェアのメリットと注意点

メリット

  • 共通処理を一箇所にまとめられる(コードの重複を防げる)
  • アプリケーションのビューやエンドポイントを汚さずにロジックを挿入可能
  • テストやデバッグがしやすくなる(リクエストのトレースなど)

注意点

  • ミドルウェアの順序が重要(DjangoやFastAPIでは実行順が影響)
  • 処理が重くなるとパフォーマンス低下につながる
  • 状態管理を間違えると、セキュリティリスクが生じることも(例:認証情報の漏洩)

まとめ

観点説明
ミドルウェアとは?リクエストとレスポンスの間に共通処理を挿入する仕組み
主な用途認証、ログ、エラーハンドリング、CORSなど
実装スタイルDjangoではクラス、FastAPIでは関数またはクラス、FlaskではフックやWSGI
注意点順序と性能に注意。状態や副作用にも気を配る

以上、Pythonのミドルウェアについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次