Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

外部関数インターフェイス(FFI)

最終更新 Markdown で表示Agent セットアップ

Pyodide 経由で、Python Workers は JavaScript への 外部関数インターフェイス(FFI) を提供します。これにより、次ができます。

Pyodide の外部関数インターフェイスの詳細は こちら にあります。Python で書いた Worker は、これをフルに使えます。

Python Workers からバインディングを使う

バインディングを使うと、Worker は Cloudflare Developer Platform 上のリソースとやり取りできます。Worker にバインディングを宣言すると、R2 バケットへのファイルの読み書きなど、特定の能力を与えます。

たとえば Python Worker から KV 名前空間にアクセスするには、Worker の Wrangler 設定ファイル で次のように宣言します。

{
	"main": "./src/index.py",
	"kv_namespaces": [
		{
			"binding": "FOO",
			"id": "<YOUR_KV_NAMESPACE_ID>"
		}
	]
}
main = "./src/index.py"

[[kv_namespaces]]
binding = "FOO"
id = "<YOUR_KV_NAMESPACE_ID>"

...そのうえで、env に公開されるバインディングオブジェクトの .get() を呼び出します。

from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        await self.env.FOO.put("bar", "baz")
        bar = await self.env.FOO.get("bar")
        return Response(bar) # returns "baz"

Python を JavaScript に変換する

JavaScript API と連携するために、Python オブジェクトを JavaScript に変換する必要があることがあります。Pyodide は、この変換のために to_js 関数を提供します。

from js import Object
from pyodide.ffi import to_js as _to_js

from workers import WorkerEntrypoint, Response

# to_js converts between Python dictionaries and JavaScript Objects
def to_js(obj):
   return _to_js(obj, dict_converter=Object.fromEntries)

詳細は pyodide.ffi.to_js のドキュメント を参照してください。

Python Workers から JavaScript グローバルを使う

JavaScript グローバルには、workers-runtime-sdk パッケージが提供する workers モジュールを使い、より Python らしい方法でアクセスすることを推奨します。 ただし、何らかの理由で JavaScript グローバルに直接アクセスする必要がある場合は、js モジュールからインポートできます。

たとえば、次の例では Responsejs からインポートしています。

from workers import WorkerEntrypoint
from js import Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        return Response.new("Hello World!")

console.log とログ出力、Response へのオプション指定、JSON のパースなど、Python から JavaScript 関数を呼び出す方法は、Python の例 を参照してください。

役に立ちましたか?