- d1 を prisma で動かしたい
- prisma-query-wasm がどれだけ小さくなるか検証
- query builder 部分だけ取り出せないか
- PR 出せたらいいね
- (mizchi の考える)次世代の銀の弾丸
- cloudflare workers(or pages)
- vite ssr framework
- remix
- qwik-city
- d1 + ORM?
- kysely とか drizzle とかあるけど使いづらい
- 使いやすさと普及度の観点から prisma 使いたい
- 手軽さのために cloudflare スタックで完結させたい
- (実現できれば)安くて速くて手軽
- workers の制限
- フリープランのサイズ上限 1MB
- 有料プランで $5/m で 10MB
- ネイティブプラグインが使えない(wasmは可)
- d1
- CDN Edge で動く sqlite
- sqlite 互換(を目指している。現状不完全)
d1 の互換性に関しては今回のスコープ外(ベータまでには仕上がってくると思うので)
- prisma-engine(クエリビルダ+実行+プロファイラ) が Rust
- d1 環境なら wasm で動かす必要がある
- @prisma/query-engine-wasm が 3.0MB
- 有料プランで動かなくはないがスケール面で不利
- @prisma/client/edge は別サーバーへのプロキシ
- https://www.prisma.io/docs/platform/classic-projects/data-proxy
- 別のホスティングサービスが必要で、運用面でのお手軽さはない
$ npm create cloudflare@latest workers-prisma
$ pnpm install
$ pnpm wrangler d1 create mydb4
export interface Env {
DB: D1Database;
}
export default {
async fetch(
request: Request,
env: Env,
ctx: ExecutionContext
): Promise<Response> {
const db = env.DB;
const ret = await db.exec('select 1');
return Response.json(ret);
},
};
実際のアダプタ部分は db.exec(sql)
や db.prepare(sql).run()
https://developers.cloudflare.com/d1/platform/client-api/
- query-engine-wasm が 3.0MB
- psl(prisma-schema-language) で 660k
- ランタイムにスキーマのパーサいらないのでは
- mysql/postrgesql/mssql/mongodb アダプタも同梱されてる
- d1 だけなら sqlite のみでよいはず
- tokio でかいんじゃないか?
- twiggy がうまく使えなかった
- やりたいこと
- Rust のビルドサイズ
- やらないこと
- アダプタの実装
- d1 自体の未実装部分の調査