Closed2
SvelteKit + Cloudflare D1 + DrizzleORMの連携を行う。
参考リンク
SvelteKit + D1の準備
wrangler.tomlの[[d1_databases]]
に書いたbindingの値をsrc/app.d.tsのPlatform.envに割り当てる。
# wrangler.toml
name = "name"
account_id = "..."
main = "./.cloudflare/worker.js"
site.bucket = "./.cloudflare/public"
build.command = "npm run build"
compatibility_date = "2023-10-11"
workers_dev = true
[[d1_databases]]
binding = "DB"
database_name = "..."
database_id = "..."
// src/app.d.ts
import type { Theme } from "$lib/types";
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
namespace App {
// ...
interface Platform {
env: {
DB: D1Database;
}
}
}
}
export {};
SvelteKit + DrizzleORMの準備
1. packageインストール&設定ファイル追加
npm install drizzle-orm
npm install -D drizzle-kit
package.jsonのscriptsにmigrateを追加する。
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
...
"migrate": "drizzle-kit generate:sqlite"
},
DrizzleORMの設定ファイルをプロジェクトルートに用意する。
import type { Config } from 'drizzle-kit';
export default {
schema: './src/lib/server/db/schema.ts',
out: './drizzle',
breakpoints: true,
} satisfies Config;
2. フロント側のコード用意
Drizzleのインスタンスを生成する用に、lib/server/に2つのファイルを用意する。
schema.tsはテーブル定義。
// lib/server/db/db-client.ts
import { drizzle } from 'drizzle-orm/d1';
export const dbClient = (db: D1Database | undefined) => {
if (!db) {
return undefined;
}
return drizzle(db);
}
// lib/server/db/schema.ts
import { sql } from 'drizzle-orm';
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';
export const posts = sqliteTable('posts', {
id: integer('id').primaryKey(),
title: text('title').notNull(),
content: text('content').notNull(),
createdAt: text('created_at')
.notNull()
.default(sql`CURRENT_TIMESTAMP`),
updatedAt: text('updated_at')
.notNull()
.default(sql`CURRENT_TIMESTAMP`),
deletedAt: text('deleted_at')
.notNull()
.default(sql`(datetime('1990-12-31 23:59:59'))`),
isPublished: integer('is_published', { mode: 'boolean' }).notNull().default(true),
});
テーブル作成
schema.tsに書いたテーブル定義をもとにSQLを生成し、D1側にテーブルやレコードを作成する。
npm run migrate
wrangler d1 table_name execute -- file [npm run migrateで生成されたSQLファイルのパス]
ビルド起動&Cloudflare Workersへデプロイ
# Dev環境起動
wrangler dev
# デプロイ
wrangler deploy
このスクラップは2023/11/13にクローズされました