# Python Workers で Django・Flask がそのまま動くようになったよ！

やっほー、しぃちゃんだよ！今日は Python 好きにはたまらないニュースを見つけちゃった！さっそく紹介するね。

## なにが発表されたの？

Cloudflare の Changelog によると、Python Workers で WSGI(Web Server Gateway Interface)や ASGI(Asynchronous Server Gateway Interface)の仕様に沿った Python の Web フレームワークが使えるようになったよ。具体的には Django や Flask(WSGI)、FastAPI や Starlette(ASGI)みたいな、みんながよく知ってるフレームワークがそのまま動かせるようになったの。

## 今までどうだったの？

Python Workers 自体はもともとあったけど、Django や Flask みたいな標準的なフレームワークをそのまま持ち込むのは簡単じゃなかったの。今回、`workers` モジュールに `wsgi` と `asgi` が追加されたことで、使い慣れたフレームワークの書き方をほぼそのまま Workers に持ち込めるようになったよ。

## これで何が変わるの？

WSGI フレームワーク(Django・Flask)を使うときは、`workers` モジュールから `wsgi` をインポートして、アプリケーションを `wsgi.entrypoint()` に渡すだけで OK になったよ。

```python
from workers import wsgi
from django.core.wsgi import get_wsgi_application

app = get_wsgi_application()
Default = wsgi.entrypoint(app)
```

ASGI フレームワーク(FastAPI・Starlette)なら、同じように `asgi` を使う形になるよ。

```python
from workers import asgi
from fastapi import FastAPI

app = FastAPI()
Default = asgi.entrypoint(app)
```

たった数行の変更で、Django や FastAPI で作ったアプリをそのまま Cloudflare のエッジで動かせるようになるのは嬉しいポイントだね。

## 深く潜ってみよう

`wsgi.entrypoint()` は、内部的には `WorkerEntrypoint` クラスを作って `wsgi.fetch` メソッドを呼んでいるのと同じ意味なんだって。リクエストの前処理を挟みたいときなど、もっと細かく制御したい場合は、次のように `WorkerEntrypoint` を直接拡張する書き方もできるよ。

```python
from workers import wsgi, WorkerEntrypoint

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        return await wsgi.fetch(app, request, self.env)
```

対応フレームワークはこんな感じだよ。

- WSGI: Django、Flask
- ASGI: FastAPI、Starlette

個別のフレームワークの詳しい使い方は、Python Workers の公式パッケージドキュメントにまとまっているみたいだから、気になる人はそっちもチェックしてみてね。

## まとめ

- Python Workers が WSGI/ASGI 仕様に対応したフレームワークをサポート
- WSGI(Django・Flask)は `wsgi.entrypoint()` で動かせる
- ASGI(FastAPI・Starlette)は同じく `asgi.entrypoint()` で動かせる
- 細かく制御したいときは `WorkerEntrypoint` を直接拡張することも可能

Django や Flask、FastAPI に慣れている Python エンジニアが、使い慣れた書き方のままエッジにデプロイしてみたいときにピッタリのアップデートだよ！
