← 戻る

BetterAuth + Cloudflare D1: kysely→drizzle移行とSPAモード


BetterAuthのD1アダプタはDrizzle一択

kysely-d1はCF Workers本番でFailed to initialize database adapterエラー。drizzle-orm + drizzleAdapterが正解。

import { drizzleAdapter } from 'better-auth/adapters/drizzle';
import { drizzle } from 'drizzle-orm/d1';
import * as authSchema from './auth-schema';

const drizzleDb = drizzle(db, { schema: authSchema });
betterAuth({
  database: drizzleAdapter(drizzleDb, { provider: 'sqlite', schema: authSchema }),
});

schema必須 — 渡さないとThe model "verification" was not foundエラー。Drizzleスキーマでuser, session, account, verificationの4テーブルを定義して渡す。

認証必須アプリはSPAモードでよい

SEO不要なアプリでssr: trueは百害あって一利なし。src/routes/+layout.tsexport const ssr = falseで解決。SSR起因のブラウザAPI問題(window未定義等)が全て消える。

ローカル開発でD1を使うには

svelte.config.jsplatformProxy設定 + ローカルD1マイグレーション適用が必要:

wrangler d1 execute DB_NAME --local --file ./migrations/0001_initial.sql

vite devplatform.env.DBundefinedになる場合、.wrangler/state/v3/にローカルDBが存在しないのが原因。