mcpField
D
drizzle-queries

drizzle-queries

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

drizzle-queries について

drizzle-queriesは、Drizzle ORMとPostgresを使う開発者向けのクエリ作成スキルです。CRUD操作やリレーショナルクエリ、テーブル追加とマイグレーションの手順を扱います。

主な機能

  1. 01型安全なPostgresクエリ
  2. 02選択・挿入・更新・削除
  3. 03リレーショナルデータのクエリ
  4. 04テーブル追加とマイグレーション

活用シーン

  1. 01アプリケーションデータの読み取りや変更
  2. 02関連するメッセージとチャットの取得
  3. 03機能用データベーステーブルの追加

インストール

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

$npx skills add https://github.com/andrelandgraf/fullstackrecipes --skill drizzle-queries

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

詳細

Drizzle クエリ

Drizzle ORM で型安全な Postgres クエリを記述します。

前提条件

先に次のセットアップレシピを完了してください。

  • Neon + Drizzle のセットアップ
選択

@/lib/db/client から db を、drizzle-orm から演算子をインポートします。1 行だけ取得する場合は、.limit(1) を指定してから rows[0] を取得します。

import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq, desc } from "drizzle-orm";

const allChats = await db.select().from(chats);

const userChats = await db
  .select()
  .from(chats)
  .where(eq(chats.userId, userId))
  .orderBy(desc(chats.createdAt));

const chat = await db
  .select()
  .from(chats)
  .where(eq(chats.id, chatId))
  .limit(1)
  .then((rows) => rows[0]);
挿入

挿入した行を返す必要がある場合は、.returning() を使用します。

const [newChat] = await db
  .insert(chats)
  .values({ userId, title: "New Chat" })
  .returning();

await db.insert(messages).values([
  { chatId, role: "user", content: "Hello" },
  { chatId, role: "assistant", content: "Hi there!" },
]);
更新
await db
  .update(chats)
  .set({ title: "Updated Title" })
  .where(eq(chats.id, chatId));
削除
await db.delete(chats).where(eq(chats.id, chatId));
リレーショナルクエリ

手動で結合する代わりに、リレーションには db.query.<table> を使用します。

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

参考資料

コメント