using-drizzle-queries について
using-drizzle-queriesは、Drizzle ORMで型安全なデータベースクエリを書くためのリファレンススキルです。基本操作やリレーショナルクエリに加え、テーブル追加とマイグレーションの手順を扱います。
主な機能
- 01Select、insert、update、deleteクエリ
- 02リレーショナルクエリのパターン
- 03テーブルスキーマの作成
- 04スキーマ登録とマイグレーション
活用シーン
- 01条件付きデータベースクエリの作成
- 02リレーションを使った関連レコードの取得
- 03プロジェクトのスキーマにテーブルを追加
- 04データベースマイグレーションの生成と実行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ andrelandgraf/ fullstackrecipes --skill using-drizzle-queriesインストール後、Claude Code で/using-drizzle-queriesを入力して読み込まれたか確認します。
詳細
Drizzle を使用した開発
Drizzle ORM で型安全なデータベースクエリを記述します。select、insert、update、delete、リレーショナルクエリ、新しいテーブルの追加について説明します。
Drizzle を使用した開発の実装
Drizzle ORM で型安全なデータベースクエリを記述します。select、insert、update、delete、リレーショナルクエリ、新しいテーブルの追加について説明します。
参照:
- リソース:Fullstack Recipes の
using-drizzle-queries - URL:https://fullstackrecipes.com/recipes/using-drizzle-queries
クエリの記述
型安全なデータベース操作には Drizzle のクエリ API を使用します。
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq, desc } from "drizzle-orm";
// Select all
const allChats = await db.select().from(chats);
// Select with filter
const userChats = await db
.select()
.from(chats)
.where(eq(chats.userId, userId))
.orderBy(desc(chats.createdAt));
// Select single record
const chat = await db
.select()
.from(chats)
.where(eq(chats.id, chatId))
.limit(1)
.then((rows) => rows[0]);
データの挿入
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
// Insert single record
const [newChat] = await db
.insert(chats)
.values({
userId,
title: "New Chat",
})
.returning();
// Insert multiple records
await db.insert(messages).values([
{ chatId, role: "user", content: "Hello" },
{ chatId, role: "assistant", content: "Hi there!" },
]);
データの更新
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";
await db
.update(chats)
.set({ title: "Updated Title" })
.where(eq(chats.id, chatId));
データの削除
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";
await db.delete(chats).where(eq(chats.id, chatId));
リレーショナルクエリの使用
リレーションを含むクエリには、クエリ API を使用します。
import { db } from "@/lib/db/client";
const chatWithMessages = await db.query.chats.findFirst({
where: eq(chats.id, chatId),
with: {
messages: {
orderBy: (messages, { asc }) => [asc(messages.createdAt)],
},
},
});
新しいテーブルの追加
- 機能のライブラリフォルダーにスキーマを作成します。
// src/lib/feature/schema.ts
import { pgTable, text, uuid, timestamp } from "drizzle-orm/pg-core";
export const items = pgTable("items", {
id: uuid("id").primaryKey().defaultRandom(),
name: text("name").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
});
src/lib/db/client.tsにスキーマをインポートします。
import * as itemSchema from "@/lib/feature/schema";
const schema = {
...authSchema,
...chatSchema,
...itemSchema,
};
- マイグレーションを生成して実行します。
bun run db:generate
bun run db:migrate
参考資料
コメント
Markdown 対応