PythonをCloudflare Workersに統合: PyodideとWebAssemblyを活用
- Cloudflare WorkersでPythonが使えるようになった。
- 従来のJavaScript以外の言語サポートとは異なり、Python実装が
workerdランタイムに直接統合されている。
- Vectorize、Workers AI、R2、Durable Objectsなど、すべてのバインディングに対応している。
- FastAPI、Langchain、Numpyなど人気のPythonパッケージの一部を取り込める。
- 別途ビルド工程や外部ツールチェーンは不要。
WebAssemblyへコンパイルするだけでは足りない
- Cloudflare Workersは2018年からWebAssemblyをサポートしている。
- 言語をWebAssemblyやJavaScriptへコンパイルするだけでは十分ではない。
- 開発者が慣れ親しんだパッケージエコシステムをサポートする必要がある。
Python Workerのライフサイクル
- Pyodideが
workerdに組み込まれており、Pythonコードを書ける。
Wrangler.tomlファイルで.pyファイルを指定し、npx wrangler@latest devを実行すると、ランタイムがPyodideを自動で注入する。
Workersランタイムに組み込まれたPythonインタープリタ
- CPythonはPythonの参照実装であり、PyodideはCPythonをWebAssemblyへ移植したもの。
- PyodideはPython標準ライブラリの大部分を提供し、JavaScript APIを直接呼び出せるFFIも提供する。
Pyodideと外部関数インターフェース(FFI)の魔法
- PyodideのFFIにより、PythonからJavaScript機能へアクセスできる。
- これによってFastAPIやLangchainのようなパッケージをそのまま利用できる。
なぜ動的リンクが不可欠なのか、静的リンクでは不十分
- 多くのPythonパッケージはC FFIを使ってネイティブライブラリを取り込む。
- 動的リンクにより、Pyodideはネイティブライブラリ依存を持つ多くのPythonパッケージをサポートできる。
サーバーおよびクライアントライブラリのサポート
- Pythonにはhttpx、urllib3、requestsなど人気のHTTPクライアントライブラリが多いが、Pyodideではデフォルトでは動作しない。
- 非同期クライアントライブラリはFetch APIを使ってリクエストを実行できる。
Pythonパッケージの取り込み
- Python Workersは、Pyodideが直接提供するPythonパッケージのサブセットをサポートする。
requirements.txtファイルにパッケージを追加するだけでよい。
メモリスナップショットでコールドスタート時間を短縮
- PyodideをWorkerへ注入してCloudflareへアップロードする過程でメモリスナップショットを生成し、コールドスタート時間を短縮する。
Pyodideのバージョンと互換性日付に対する将来性の確保
- 互換性日付と互換性フラグを使い、新しい動作や、場合によっては後方互換性のない変更を明示的に選択できるようにする。
Python Workersでのバインディングの仕組み
- PyodideはJavaScript向けのFFIを提供しており、PythonからJavaScriptオブジェクト、メソッド、関数などを直接利用できる。
Python Workersを始める
- 新しいプログラミング言語への真のサポートには、"hello world"を超える大きな投資が必要だ。
- PythonはJavaScriptに次いで人気のあるプログラミング言語であり、CloudflareはPythonパッケージのサポート拡大と性能改善に継続的に取り組んでいる。
GN⁺の見解
- CloudflareのPython Workers対応は、サーバーレスアーキテクチャにおけるPython活用を広げる重要な進展である。これはPython開発者により高い柔軟性と選択肢を提供し、JavaScriptに依存せずクラウドベースのアプリケーションを構築できる機会を開く。
- Pyodideを通じたPythonのWebAssembly統合は、ブラウザおよびサーバーレス環境でPythonコードを実行する新たな可能性を示している。これはPythonエコシステムに大きな影響を与え得るものであり、特にデータサイエンスや機械学習のようにJavaScriptが支配的でない分野で、Python利用を後押しする可能性がある。
- 動的リンクとメモリスナップショット技術は、初期ロード時間を短縮し、リソースを効率的に共有する方法を提供する。これは特に大規模分散システムにおける重要な性能改善を意味する。
- 互換性日付とフラグによるバージョン管理は、既存コードの安定性を保ちながら新機能や更新を受け入れられる柔軟な方法を提供する。これは長期的にサービスを運用する企業にとって重要な要素である。
- CloudflareがPython Workersへの対応を拡大するにつれ、Python開発者は既存のクラウドサービスと統合したり、新しいサービスを開発したりする際に、より多くの選択肢を持てるようになる。これはPythonがサーバーレスコンピューティング分野で重要な役割を果たし得ることを示している。
1件のコメント
Hacker Newsの意見
CloudflareがEdge上でWebAssemblyを通じてPythonを実行することに、より注力しているのはうれしいという好意的な反応。
Cloudflareはホスティングやデータベースに関して優れた機能を提供しているが、開発者プラットフォームとして自社を売り込むことにはあまり成功してこなかった、という意見。
CloudflareでJS workersを使ったことがあり、使いやすく非常に高速だったという好意的な評価。
JS workerとの性能比較があると助かる、という意見。
Pyodideが本格的な支援を受けることで、PythonがフロントエンドでJavaScriptの真の代替になりうるという希望が見えてきた、という意見。
lzmaを使ったデモが意図的なのか、それとも単なる偶然なのかという質問がある。Cloudflare上でAI関連の処理を実行するうえでゲームチェンジャーだと評価し、長い間これを待ち望んでいたという意見。
CloudflareがJS workersに限定されず、WASMを第一級市民として扱うworkersを実装してほしい、という意見。
CF Pagesを使って静的サイトを作ることで良い結果を得ており、CloudflareのオープンソースなLLM-as-a-service提案に魅了されている。
Pyodideパッケージのみを使うという制限が、簡単ではないビルドにどのような影響を与えるのか気になる、という意見。