Skip to content

kitamuraDev/crud-webapi-with-hono

Repository files navigation

Hono + D1 + Drizzle のCRUDサンプル

D1 + Drizzle 環境構築

  1. パッケージインストール
bun add drizzle-orm
bun add -D drizzle-kit @types/bun
  1. D1にデータベースを作成
bun run wrangler d1 create todo
  1. D1のセットアップウィザードに応答
✔ Would you like Wrangler to add it on your behalf? … yes
  → wrangler.jsonc に設定値を追記するか
✔ What binding name would you like to use? … todo
  → バインディング名はどうするか
✔ For local dev, do you want to connect to the remote resource instead of a local resource? … no
  → ローカル開発時に、ローカルのD1ではなく、リモートのD1に接続するか
  1. バインディングの型定義を更新
bun run cf-typegen
  1. Cloudflare の認証情報を .dev.vars ファイルに追記
CLOUDFLARE_ACCOUNT_ID='CloudflareのアカウントID'
CLOUDFLARE_DATABASE_ID='wrangler.jsoncファイルに設定したdatabase_idと同じ値'
CLOUDFLARE_D1_TOKEN='Cloudflareダッシュボードで発行したAPIトークン'
  1. drizzle.config.ts ファイルを作成

プロジェクトのルートディレクトリに drizzle.config.ts ファイルを作成する

  1. tsconfig.json を編集する

compilerOptions > types"bun" を追記(process.envの型定義エラーを解消するため)

    "types": [
      "./worker-configuration.d.ts",
+     "bun"
    ]
  1. wrangler.jsonc を編集

drizzle.config.ts の out に合わせる

	"d1_databases": [
		{
+			"migrations_dir": "drizzle"
		}
	]
  1. スキーマファイルを作成

drizzle.config.ts の schema に記載のスキーマファイルを編集する

  1. マイグレーションファイルを生成
bun run drizzle-kit generate
  1. マイグレーションを適用
bun run wrangler d1 migrations apply todo --local
bun run wrangler d1 migrations apply todo --remote
  1. シードファイルを作成

src > db > seed.sql

  1. シードを適用
bun run wrangler d1 execute todo --local --file=./src/db/seed.sql
bun run wrangler d1 execute todo --remote --file=./src/db/seed.sql
  1. テーブルを確認
  • 開発環境: VScode拡張機能のdatabase clientでローカルのd1(.wrangler/state/v3/d1/miniflare-D1DatabaseObject/xxx.sqlite)をフルパスで開く
  • 本番環境: drizzle-kit studioで確認 or cloudflare d1の管理者コンソールから確認

FAQ

Q.テーブルの構造が変わったら?

  1. マイグレーションファイルを生成し直す(bun run dz:generate
  2. マイグレーションの適用を行う(bun run db:migrate:local & bun run db:migrate:remote
  3. シードファイルを更新する

About

Hono と D1 で作るCRUDサンプル

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published