mcpField
D
drizzle-orm-d1

drizzle-orm-d1

github.com/secondskyデータ・データベース240428 回インストール5 週間前に更新
リポジトリ

drizzle-orm-d1 について

drizzle-orm-d1は、Drizzle ORMとCloudflare D1を使う開発者向けのスキルです。スキーマ設計、クエリ、D1固有のマイグレーション、トラブルシューティングを例やテンプレート、リファレンスで案内します。

主な機能

  1. 01D1向けDrizzle Kitの設定
  2. 02スキーマ定義とTypeScript型推論
  3. 03マイグレーションの生成と適用
  4. 04D1のバッチ操作
  5. 05よくあるD1エラーの調査

活用シーン

  1. 01D1を使うアプリのスキーマ作成
  2. 02本番適用前のローカルマイグレーション
  3. 03SQLトランザクションを使わないバッチ書き込み
  4. 04バインディングや外部キーエラーの診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill drizzle-orm-d1

インストール後、Claude Code で/drizzle-orm-d1を入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
common-errors.md
error-catalog.md
links-to-official-docs.md
migration-workflow.md
query-builder-api.md
schema-patterns.md
wrangler-setup.md
scripts/
check-versions.sh
templates/
basic-queries.ts
basic-schema.ts
client.ts
cloudflare-worker-integration.ts
drizzle.config.ts
package.json
prepared-statements.ts
relations-queries.ts
schema.ts
transactions.ts
templates/migrations/
0001_example.sql

詳細

Cloudflare D1 向け Drizzle ORM

ステータス:本番環境で利用可能 ✅ 最終更新日:2025-12-14 最新バージョン:[email protected]、[email protected] 依存関係:cloudflare-d1、cloudflare-worker-base


クイックスタート(10 分)

1. Drizzle をインストールする
bun add drizzle-orm drizzle-kit
2. Drizzle Kit を設定する

drizzle.config.ts を作成します:

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  schema: './src/db/schema.ts',
  out: './migrations',
  dialect: 'sqlite',          // MANDATORY since drizzle-kit 0.21 (D1 = sqlite)
  driver: 'd1-http',          // D1 HTTP driver for remote migrations/Studio
  dbCredentials: {            // MANDATORY: drizzle-kit 0.30+ tightened zod validation
    accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,
    databaseId: process.env.CLOUDFLARE_DATABASE_ID!,
    token: process.env.CLOUDFLARE_D1_TOKEN!,
  },
});

drizzle-kit 0.30/0.31 に関する注意:dialect と dbCredentials の検証が厳格になりました。dialect が省略されている設定や、古い connectionString/uri キーを使用する設定は、検証に失敗します。D1 では、accountId/databaseId/token(または wrangler ベースの認証情報)とともに、dialect: 'sqlite' + driver: 'd1-http' を使用してください。drizzle-orm/<driver>/migrator の実行時 migrate() シグネチャは、0.36 から 0.45 まで変更されていません(変更されるのは 1.0-beta のみで、^0.45 の対象外です)。

3. スキーマを定義する

src/db/schema.ts を作成します:

import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
import { relations } from 'drizzle-orm';

export const users = sqliteTable('users', {
  id: integer('id').primaryKey({ autoIncrement: true }),
  email: text('email').notNull().unique(),
  name: text('name').notNull(),
  createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
});

export const posts = sqliteTable('posts', {
  id: integer('id').primaryKey({ autoIncrement: true }),
  title: text('title').notNull(),
  content: text('content').notNull(),
  authorId: integer('author_id')
    .notNull()
    .references(() => users.id, { onDelete: 'cascade' }),
});

export const usersRelations = relations(users, ({ many }) => ({
  posts: many(posts),
}));
4. マイグレーションを生成して適用する
bunx drizzle-kit generate                           # Generate SQL
bunx wrangler d1 migrations apply my-database --local   # Apply local
bunx wrangler d1 migrations apply my-database --remote  # Apply prod
5. Worker でクエリを実行する
import { drizzle } from 'drizzle-orm/d1';
import { users } from './db/schema';
import { eq } from 'drizzle-orm';

export default {
  async fetch(request: Request, env: { DB: D1Database }): Promise<Response> {
    const db = drizzle(env.DB);
    const allUsers = await db.select().from(users).all();
    return Response.json(allUsers);
  },
};

重要なルール

必ず行うこと
ルール理由
マイグレーションには drizzle-kit generate を使用するSQL を手動で記述しないでください
まずローカルでマイグレーションをテストする--remote の前に --local を実行します
単一の結果には .get() を使用する最初の行、または undefined を返します
トランザクションには db.batch() を使用するD1 は SQL の BEGIN/COMMIT をサポートしていません
日付には mode: 'timestamp' を指定した integer を使用するD1 にはネイティブの日付型がありません
動的なデフォルト値には .$defaultFn() を使用する関数には .default() を使用しないでください
絶対に行わないこと
ルール理由
SQL の BEGIN TRANSACTION を使用するD1 では batch API が必要です(エラー #1)
drizzle-kit migrate と wrangler apply を併用するWrangler のみを使用してください
本番環境で drizzle-kit push を使用するgenerate + apply を使用してください
認証情報を drizzle.config.ts にコミットする環境変数を使用してください
関数呼び出しに .default() を使用する代わりに .$defaultFn() を使用してください

重大なエラーのトップ 5

#エラー解決策
1D1_ERROR: Cannot use BEGIN TRANSACTIONdb.transaction() の代わりに db.batch([...]) を使用します
2FOREIGN KEY constraint failed.references(() => users.id, { onDelete: 'cascade' }) でカスケードを定義します
3env.DB is undefinedwrangler.jsonc のバインディングが env.DB と一致することを確認します
4No such module "wrangler"import { drizzle } from 'drizzle-orm/d1' を使用します
5Type instantiation excessively deep明示的な型には InferSelectModel<typeof users> を使用します

参照:すべての 12 件のエラーと完全な解決策については、references/error-catalog.md を参照してください。


よく使われるパターンの概要

パターン用途テンプレート
CRUD 操作基本的なデータベース操作templates/basic-queries.ts
リレーションと結合ネストされたクエリ、手動での結合templates/relations-queries.ts
バッチ操作トランザクション(D1 batch API)templates/transactions.ts
スキーマ設計命名、インデックス、論理削除references/schema-patterns.md

設定の概要

ファイル目的テンプレート
drizzle.config.tsDrizzle Kit の設定templates/drizzle.config.ts
wrangler.jsoncD1 バインディングの設定references/wrangler-setup.md
package.jsonマイグレーション用 npm スクリプトtemplates/package.json

npm スクリプト:

{
  "db:generate": "drizzle-kit generate",
  "db:migrate:local": "wrangler d1 migrations apply my-database --local",
  "db:migrate:remote": "wrangler d1 migrations apply my-database --remote"
}

マイグレーションのワークフロー

手順コマンド備考
1. スキーマを編集src/db/schema.ts を編集変更を加えます
2. 生成npm run db:generateSQL マイグレーションを作成します
3. ローカルでテストnpm run db:migrate:localローカルで確認します
4. コードをデプロイnpm run deployCloudflare にプッシュします
5. 本番環境に適用npm run db:migrate:remoteマイグレーションを適用します

参照:ワークフロー全体については、references/migration-workflow.md を参照してください。


TypeScript の型推論

import { InferSelectModel, InferInsertModel } from 'drizzle-orm';
import { users } from './db/schema';

export type User = InferSelectModel<typeof users>;
export type NewUser = InferInsertModel<typeof users>;

リファレンスを読み込むタイミング

リファレンス読み込むタイミング
references/error-catalog.mdD1 のエラー、トランザクションの失敗、バインディングの問題をデバッグするとき
references/schema-patterns.mdスキーマ、命名規則、インデックス、論理削除を設計するとき
references/migration-workflow.mdマイグレーションを設定またはトラブルシューティングするとき
references/query-builder-api.md複雑なクエリ、演算子、JOIN 構文を扱うとき
references/wrangler-setup.mdD1 用に wrangler.jsonc を設定するとき
references/common-errors.mdエラーをすばやく検索するとき

同梱リソース

テンプレート: basic-schema.ts、basic-queries.ts、transactions.ts、relations-queries.ts、prepared-statements.ts、drizzle.config.ts、package.json

リファレンス: error-catalog.md、schema-patterns.md、migration-workflow.md、query-builder-api.md、wrangler-setup.md、common-errors.md、links-to-official-docs.md


依存関係

{
  "dependencies": {
    "drizzle-orm": "^0.45.2"
  },
  "devDependencies": {
    "drizzle-kit": "^0.31.10"
  }
}

安全なインストール

Drizzle ORM と D1 ドライバーパッケージをインストールする際は、サプライチェーンセキュリティのベストプラクティスに従ってください。

  • インストール後スクリプトをブロックする — npm config set ignore-scripts true(または Bun:デフォルトで無効)
  • クールダウン期間を設ける — 新しいパッケージバージョンがコミュニティによって審査されるまで、7 日間待ちます
  • インストール前に監査する — socket package score npm <pkg> を実行するか、socket npm install <pkg> を使用してパッケージを確認します

Socket CLI との連携、クールダウンの設定、ロックファイルの検証、CI での適用を含む、セキュリティ設定の詳細については、dependency-upgrade スキルを読み込んでください。

公式ドキュメント


トークン削減率: 約 65%(包括的なパターンをリファレンスに収録) エラー防止率: 100%(文書化された 12 件すべての問題に対応) 本番環境で使用できます! ✅

コメント