https://github.com/t3tra-dev/edgekit
EdgeKit: Cloudflare Workers Python native SDK and builder toolkit
https://github.com/t3tra-dev/edgekit
Last synced: 6 days ago
JSON representation
EdgeKit: Cloudflare Workers Python native SDK and builder toolkit
- Host: GitHub
- URL: https://github.com/t3tra-dev/edgekit
- Owner: t3tra-dev
- Created: 2026-04-14T18:13:26.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-14T18:15:49.000Z (about 2 months ago)
- Last Synced: 2026-04-14T20:17:26.191Z (about 2 months ago)
- Language: Python
- Homepage:
- Size: 104 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
Awesome Lists containing this project
README
# EdgeKit: Cloudflare Workers Python-native SDK
EdgeKit には 2 つの役割があります。
1. Workers Python を書くための、小さくて Python-first な API を提供すること。
2. プロジェクトを解析し、tree-shaking と依存関係の vendoring を行って、ランタイムバンドルを構築すること。
## What EdgeKit Provides
- 型付き Worker のための `WorkerEntrypoint[Env]`
- Workers Web API を wrap する型安全な `Request`、`Response`、`Headers`、`URL`
- 以下に対応する typed-binding:
- static assets
- D1
- KV
- R2
- Queues
- Durable Objects
- フレームワーク統合のための `WSGI` および `ASGI` adapters
- 以下のための CLI:
- プロジェクトの解析
- tree-shaking 及び vendoring に対するリスクチェック
- bundle の出力
- report の生成
## 要件
- Python `>=3.12`
- 依存関係管理のための `uv`
- 開発およびデプロイのための wrangler CLI
## ローカル開発
リポジトリのルートで Python と Node の依存関係をインストールします。
```bash
uv sync
```
よく使うコマンド:
```bash
edgekit analyze
edgekit doctor
edgekit build
npm run dev
```
ルートの `wrangler.jsonc` で `wrangler dev` の前に `edgekit build` を呼び出すよう設定してください。
## Quick Start
まず新しいプロジェクトを初期化します。
```bash
uvx --from workers-py==1.9.1 pywrangler init # 現時点での最新 workers-py v1.9.2 ではエラーが発生するため
cd
uv add edgekit
```
最小限の Worker の形は次のようになります。
```python
from edgekit import Request, Response, WorkerEntrypoint
class Default(WorkerEntrypoint):
async def fetch(self, request: Request) -> Response:
return Response.json(
{
"ok": True,
"method": request.method,
"pathname": request.url.pathname,
}
)
```
`pyproject.toml` で Worker のエントリを記述します。
```toml
[tool.edgekit.builder]
entry = "src/app.py"
compatibility_date = "2026-04-13"
```
続いて、ビルド済み出力を使うように wrangler を設定します。
```jsonc
{
"main": "build/edgekit/wrangler/python_modules/app.py",
"compatibility_date": "2026-04-13",
"compatibility_flags": ["python_workers"],
"build": {
"command": "uv run edgekit build",
},
}
```
実行:
```bash
wrangler dev
```
## Typed Environment Bindings
EdgeKit では、Workers の `env` オブジェクトを型付き Protocol またはクラスに bind できます。
```python
from typing import Protocol
from edgekit import Request, Response, WorkerEntrypoint
from edgekit.bindings import D1Database, StaticAssets
class Env(Protocol):
ASSETS: StaticAssets
DB: D1Database
class Default(WorkerEntrypoint[Env]):
async def fetch(self, request: Request) -> Response:
ok = await self.env.DB.prepare("select 1 as ok").first("ok", type=int)
asset = await self.env.ASSETS.fetch("/hello.txt")
return Response.json(
{
"ok": ok if ok is not None else 0,
"asset": await asset.read_text(),
}
)
```
## Runtime Helpers
`edgekit.runtime` は 2 つの helper を公開しています。
- `current_env([EnvType])`
- 現在のリクエストスコープにおけるアクティブな env オブジェクトを返します。
- WSGI や ASGI のような adapters がフレームワーク内部のコードから現在の Worker env にアクセスできるようにするために使われます。
- `await_sync(awaitable)`
- Pyodide のランタイムバインディングを通じて awaitable を同期的に実行します。
例:
```python
from typing import Protocol
from edgekit.adapters import WSGI
from edgekit.bindings import StaticAssets
from edgekit.runtime import await_sync, current_env
class Env(Protocol):
ASSETS: StaticAssets
def read_asset_text(path: str) -> str:
env = current_env(Env)
response = await_sync(env.ASSETS.fetch(path))
return await_sync(response.read_text())
```
## License
MIT License