drizzle-v1 について
drizzle-v1は、Drizzle ORMプロジェクトをv1リリース候補へ移行するためのガイドです。移行コマンドに加え、リレーション定義、データベース設定、クエリ構文の変更と段階的な移行方法をまとめています。
主な機能
- 01drizzle-kit upによるマイグレーションフォルダー変換
- 02defineRelationsへのリレーション移行
- 03オブジェクト形式のリレーショナルクエリ構文
- 04throughによる多対多リレーション
- 05RQB v1を維持した段階的な移行
活用シーン
- 01Drizzle ORMのアップグレード準備
- 02リレーショナルクエリとスキーマ定義の更新
- 03RQB v1からの段階的な移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ habibium/ agent-skills --skill drizzle-v1インストール後、Claude Code で/drizzle-v1を入力して読み込まれたか確認します。
同梱ファイルreferences/relational-queries-v2.md
詳細
Drizzle ORM v1 RC アップグレードガイド
インストール
npm i drizzle-orm@beta drizzle-kit@beta -D
アップグレード手順
ステップ 1:drizzle-kit up を実行する
以前のマイグレーションフォルダーを新しい形式に移行します(journal.json を削除し、SQL ファイルとスナップショットをグループ化します)。
npx drizzle-kit up
ステップ 2:リレーショナルクエリーを v2 に更新する
マイグレーションパターンの全容については、references/relational-queries-v2.md を参照してください。
クイックリファレンス:主な変更点
リレーションの定義
v1 - テーブルごとに個別の relations() 呼び出しを使用します。
import { relations } from "drizzle-orm/_relations"; // Note: moved import
export const usersRelation = relations(users, ({ one, many }) => ({
posts: many(posts),
}));
v2 - すべてのテーブルに対して単一の defineRelations() を使用します。
import { defineRelations } from "drizzle-orm";
import * as schema from "./schema";
export const relations = defineRelations(schema, (r) => ({
users: {
posts: r.many.posts({
from: r.users.id,
to: r.posts.authorId,
}),
},
}));
データベースインスタンス
v1:
const db = drizzle(url, { schema, mode: "planetscale" });
v2 - mode は不要で、relations を使用します。
import { relations } from './relations';
const db = drizzle(url, { relations });
クエリー
v1 - 関数ベースの where/orderBy:
await db.query.users.findMany({
where: (users, { eq }) => eq(users.id, 1),
orderBy: (users, { asc }) => [asc(users.id)],
});
v2 - オブジェクトベースの構文:
await db.query.users.findMany({
where: { id: 1 },
orderBy: { id: "asc" },
});
through を使った多対多リレーション
v2(新機能):
export const relations = defineRelations(schema, (r) => ({
users: {
groups: r.many.groups({
from: r.users.id.through(r.usersToGroups.userId),
to: r.groups.id.through(r.usersToGroups.groupId),
}),
},
}));
部分的なアップグレード(RQB v1 を維持)
段階的に移行する間は、従来の構文を使用します。
drizzle-orm/_relationsからインポートしますdb.queryの代わりにdb._queryを使用します
v2 のフィルター演算子
AND、OR、NOT、RAW を使ったオブジェクトベースのフィルター:
await db.query.users.findMany({
where: {
AND: [
{ OR: [{ name: { like: "John%" } }, { name: { ilike: "jane%" } }] },
{ age: { gt: 18 } },
{ NOT: { status: "banned" } },
{ RAW: (t) => sql`${t.createdAt} > NOW() - INTERVAL '30 days'` },
],
},
});
v2 の新機能
optional: false- 型レベルでリレーションを必須にしますthrough- 手動での中間テーブルのクエリーなしに、多対多リレーションを直接扱います- 定義済みフィルター - リレーション定義内の
where - リレーションのフィルタリング - 子のプロパティで親をフィルタリングします
- 関連オブジェクトのオフセット - ネストされたリレーションでページネーションを行います
コメント
Markdown 対応