mcpField
D
drizzle-v1

drizzle-v1

github.com/habibium開発041 回インストール39 週間前に更新
リポジトリ

drizzle-v1 について

drizzle-v1は、Drizzle ORMプロジェクトをv1リリース候補へ移行するためのガイドです。移行コマンドに加え、リレーション定義、データベース設定、クエリ構文の変更と段階的な移行方法をまとめています。

主な機能

  1. 01drizzle-kit upによるマイグレーションフォルダー変換
  2. 02defineRelationsへのリレーション移行
  3. 03オブジェクト形式のリレーショナルクエリ構文
  4. 04throughによる多対多リレーション
  5. 05RQB v1を維持した段階的な移行

活用シーン

  1. 01Drizzle ORMのアップグレード準備
  2. 02リレーショナルクエリとスキーマ定義の更新
  3. 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 を維持)

段階的に移行する間は、従来の構文を使用します。

  1. drizzle-orm/_relations からインポートします
  2. 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
  • リレーションのフィルタリング - 子のプロパティで親をフィルタリングします
  • 関連オブジェクトのオフセット - ネストされたリレーションでページネーションを行います

コメント