
2026/09/21 22:38
Python ワーカーが一般利用可能になりました
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Cloudflare は、Python Workers を正式に一般利用可能にし、同プラットフォームにおいて Python が完全にサポートされた一等言語として認識されるという転換点を示しました。この進歩により、開発者は Cloudflare 環境内でネイティブの Python アプリケーションを構築でき、不便な JavaScript グループコードや TypeScript バインディングの必要性が排除されました。リリースには、Workers AI、R2、D1、Hyperdrive、Durable Objects、Queues、Workflows というコアサービスとのシームレスな統合が含まれ、データベースおよび AI モデルへの直接アクセスを可能にしています。特に、FastAPI、Django、Flask といった人気フレームワークは、内蔵の ASGI/WSGI コネクタを使用してネイティブに動作し、標準ライブラリは fetch API を介して適切にルーティングされます。このイニシアチブは、WebAssembly POSIX スタブに関する以前の制限を解消し、Workers Connect API を介してソケットシステムコールを実装することで、PostgreSQL および MySQL に対する Hyperdrive サポートを実現しました。また、直近で承認された PEP 783 を活用して PyEmscripten の標準化を進め、ネイティブ C/C++/Rust 拡張子に関するクロスコンパイルの問題を解消しました。その結果、企業は既存の Python ワークロードをエッジ上で直接デプロイできるようになり、ハイブリッドコードベースを排除することでアーキテクチャが簡素化されました。今後の取り組みは、パフォーマンスとメモリ効率の向上、追加パッケージへのサポート拡大に焦点を当て、AI オケストレーション、Bluesky Jetstream を使用したリアルタイムストリーム処理、MCP サーバー、RAG システムなどでの生産準備型のパターンを言語変換なしで実現できるようにします。ドキュメントには、Cloudflare のほぼすべての製品について、TypeScript/JavaScript と並んで Python 例が追加されました。
本文
Cloudflare Workers で Python アプリケーションを実行可能に:一般利用開始
Cloudflare Workers ランタイム上で Python を完全にサポートする環境が一般利用(GA)を開始しました。TypeScript と同等の簡潔さで Python コードを記述し、Python パッケージのエコシステムをそのまま活用できるプラットフォームです。
GA 発表の意図と背景
- 第一級言語としての認定
Python が Cloudflare Workers プラットフォームにおいて、第一級かつ完全にサポートされる言語となりました。 - エコシステムの統合
- 既存のコード、ライブラリ、設計パターンの利用が可能に。
- Workers AI、R2、D1、Hyperdrive、Durable Objects、Queues、Workflows など、プラットフォーム機能とシームレスに連携可能。
- 人気フレームワークの実行
FastAPI、Django、Flask などの代表的な Python フレームワークを実行可能。 - Dynamic Workers の利用
Dynamic Workers を介して、別のワーカー内で Python ワーカーを作成することも可能。
開発の歩みと技術的課題の解決
1. ランタイムへの統合
- WebAssembly (Wasm) ベースの実装
- 2018 年より Wasm サポートを開始し、コンパイル済み Python インタープリタを実行する環境を提供。
- Pyodide を活用し、多様な Python アプリケーションの即時サポートを実現。
- スケーラビリティ
他のプラットフォーム同様「容易かつ高性能」な開発を可能にしつつ、無限スケーリングに対応できる最初のプラットフォームとして構築。
2. JavaScript 依存からの脱却(Type Conversion)
以前は Cloudflare バインディング(例:Queue)を使用する際、Python オブジェクトを明示的に TypeScript 型に変換する必要があり、コードが複雑化していました。
【従来の方法(Bridge コードが必要)】
from pyodide.ffi import to_js import js self.env.QUEUE.send(to_js({"key": "value"}, dict_converter=js.Object.fromEntries))
【現在の対応(Python 的アプローチ)】
タイプ変換プロセスをランタイムおよび SDK にカプセル化し、一行も JavaScript を書かずに以下のように記述可能にしました。
self.env.QUEUE.send({"key": "value"})
Web フレームワークの実行方法
ASGI / WSGI コンネクタの導入
Python ワーカーズ内で API サーバーを構築するには、
workers.asgi および workers.wsgi コンネクタを使用します。Cloudflare Workers プラットフォーム自体が Web サーバーの役割を果たすため、Uvicorn や Gunicorn などの外部サーバー設定は不要です。
FastAPI(非同期)の実行
from fastapi import FastAPI from workers import asgi app = FastAPI() @app.get("/") async def root(): message = "Hello, world!" return {"message": message} class Default(WorkerEntrypoint): async def fetch(self, request): return await asgi.fetch(app, request, self.env) Default = asgi.entrypoint(app)
Django(同期)の実行
from workers import WorkerEntrypoint, wsgi from your_django_app.wsgi import app Default = wsgi.entrypoint(app)
データベース連携:Hyperdrive のサポート
Python ワーカーズでは、現在 PostgreSQL や MySQL などのリレーショナルデータベースをHyperdriveを通じて直接使用可能です。
技術的背景(WebAssembly とソケット)
- 課題
WebAssembly サンドボックス内では標準的な POSIX システムコール(ソケット操作)が失敗する傾向があり、従来の TCP 接続は不可能でした。 - 解決策
Workers Connect API を使用し、ソケットシステムコールをカスタム実装しました。これにより、データベースドライバーは下流の実装を気にせず標準的な API で動作できます。
設定と利用例
wrangler 構成で Hyperdrive バインディングを設定後、標準的なドライバ(例:aiomysql)を使用します。
Wrangler.toml の設定例:
"hyperdrive": [ { "binding": "HYPERDRIVE_MYSQL", "id": "<example id: 57b7076f58be42419276f058a8968187>", } ]
Python コード例:
import aiomysql from workers import WorkerEntrypoint class Default(WorkerEntrypoint): async def fetch(self, request): hd = self.env.HYPERDRIVE_MYSQL conn = await aiomysql.connect( host=hd.host, port=int(hd.port), user=hd.user, password=hd.password, db=hd.database, ssl=None, ) cur = await conn.cursor() await cur.execute("SELECT username FROM user") r = await cur.fetchall() await cur.close() conn.close()
エコシステムの拡大:WebAssembly とパッケージ
PyEmscripten の採用と標準化(PEP 783)
- 制限の打破
以前はネイティブ拡張子を持つパッケージが実行不可能で、手動でのクロスコンパイルが必要でした。現在はより広いパッケージを利用可能にしました。 - プラットフォームの進化
- PEP 783 を提案し承認され、Pyodide および WebAssembly 上の Python コミュニティ全体に利益をもたらすようにエコシステムを進化。
に PyEmscripten サポートを追加し、パッケージメンテナーが容易に Wasm 環境向けパッケージを構築可能に。cibuildwheel
AI エージェントとパイプラインの構築
Python の豊富なデータサイエンス/機械学習エコシステム(OpenAI, LangChain など)を Workers で活用できます。
ネットワークスタックの解決
- 課題
多くの AI ライブラリは外部 API への通信に HTTP クライアント(
,requests
)を依存しており、Wasm 環境では動作していませんでした。httpx - 解決策
低レベルソケット操作サポートの導入により、HTTP クライアントを JavaScript
を介した直接ルーティングに対応させました。これにより、Python ワーカーズ内部でのネットワークスタックがシームレスに動作します。fetch API
Workers AI との連携
- ネイティブ実行
OpenAI, LangChain, MCP などのライブラリをネイティブで実行可能。 - 推論方法
- Cloudflare ネットワーク上の GPU を使用したサーバーレス推論(Workers AI)。
- Cloudflare AI Gateway を介したプロキシ処理。
LangChain と Workers AI を組み合わせる例:
from langchain_cloudflare import ChatCloudflareWorkersAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import PromptTemplate from workers import Response, WorkerEntrypoint class Default(WorkerEntrypoint): async def fetch(self, request): prompt = PromptTemplate.from_template( "In one sentence, describe a great day in the life of an {profession}." ) llm = ChatCloudflareWorkersAI( model_name="@cf/meta/llama-3.3-70b-instruct-fp8-fast", binding=self.env.AI, max_tokens=64, ) chain = prompt | llm | StrOutputParser() result = await chain.ainvoke({"profession": "electrician"}) return Response.json({"result": result})
実装例とドキュメント
-
Python Workers Examples リポジトリ
生産環境での利用パターンをまとめたサンプルコードが公開されています。- 非同期 AI オーケストレーション:Image-to-Image ジェネレーターの構築(Queue, Workflows, R2 を使用)。
- リアルタイムストリーム処理:Bluesky Jetstream WebSocket と Durable Objects の組み合わせ。
- MCP サーバー:公式 Python パッケージによるエッジデータへのアクセス提供。
- RAG システム:Vectorize と Workers AI を利用した検索補完生成。
-
ドキュメントの更新
Cloudflare 製品全体のドキュメントに Python コード例を追加。JavaScript、TypeScript、Python の切り替えに対応し、すべての製品で Python 例を継続的に提供します。
まとめ
Python ワーカーズは、**一般利用(GA)**を開始しました。TypeScript と同等の簡潔さでコードを書きつつ、豊富な Python エコシステムを活用できるプラットフォームです。これからの展開として、より高性能・メモリー効率の高い環境やサポートパッケージの拡大を計画しており、コミュニティと共に進化していく予定です。