外部関数インターフェース (FFI)
Pyodide ↗を介して、Python WorkersはJavaScriptへの外部関数インターフェース (FFI) ↗を提供します。これにより、次のことが可能になります:
- Workers AI、Vectorize、R2、KV、D1、Queues、Durable Objects、Service Bindingsなど、Cloudflare上のリソースへのバインディングを使用できます。
Request、Response、およびfetch()などのJavaScriptグローバルを使用できます。- Cloudflare Workersの全機能を利用できます — APIがJavaScriptでアクセス可能であれば、Python Workerでもアクセスでき、専らPythonコードを書くことができます。
Pyodideの外部関数インターフェースの詳細はこちら ↗に文書化されており、Pythonで書かれたWorkersはこれをフルに活用できます。
バインディングを使用すると、WorkerがCloudflare Developer Platform上のリソースと対話できます。Workerでバインディングを宣言すると、特定の機能、たとえばR2バケットにファイルを読み書きする能力を付与します。
たとえば、Python WorkerからKV名前空間にアクセスするには、Workerのwrangler.tomlに次のように宣言します:
main = "./src/index.py"kv_namespaces = [ { binding = "FOO", id = "<YOUR_KV_NAMESPACE_ID>" }]…そして、envで公開されているバインディングオブジェクトに対して.get()を呼び出します:
from js import Response
async def on_fetch(request, env): await env.FOO.put("bar", "baz") bar = await env.FOO.get("bar") return Response.new(bar) # "baz"を返す内部的には、envは実際にはJavaScriptオブジェクトです。.FOOを呼び出すと、JsProxy ↗を介してこのプロパティにアクセスしています — JavaScriptオブジェクトをPythonオブジェクトのように振る舞わせる特別なプロキシオブジェクトです。
PythonでWorkersを書くとき、jsモジュールからJavaScriptグローバルにアクセスできます。たとえば、以下の例でResponseがjsからインポートされていることに注目してください:
from js import Response
def on_fetch(request): return Response.new("Hello World!")PythonからJavaScript関数を呼び出す方法については、Pythonの例を参照してください。これには、console.logやロギング、Responseへのオプションの提供、JSONの解析が含まれます。