🛠️ 開発・MCP コミュニティ
drizzle-patterns
Drizzle ORM patterns for PostgreSQL.
⚡ おすすめ: コマンド1行でインストール(60秒)
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o drizzle-patterns.zip https://jpskill.com/download/17458.zip && unzip -o drizzle-patterns.zip && rm drizzle-patterns.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17458.zip -OutFile "$d\drizzle-patterns.zip"; Expand-Archive "$d\drizzle-patterns.zip" -DestinationPath $d -Force; ri "$d\drizzle-patterns.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
drizzle-patterns.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
drizzle-patternsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Drizzle ORM パターン
スキーマ定義
// db/schema/users.ts
import { pgTable, uuid, varchar, timestamp, boolean } from 'drizzle-orm/pg-core';
export const users = pgTable('users', {
id: uuid('id').primaryKey().defaultRandom(),
email: varchar('email', { length: 255 }).notNull().unique(),
name: varchar('name', { length: 255 }),
emailVerified: boolean('email_verified').default(false),
createdAt: timestamp('created_at').defaultNow().notNull(),
updatedAt: timestamp('updated_at').defaultNow().notNull(),
});
export type User = typeof users.$inferSelect;
export type NewUser = typeof users.$inferInsert;
リレーション
// db/schema/relations.ts
import { relations } from 'drizzle-orm';
import { users } from './users';
import { posts } from './posts';
export const usersRelations = relations(users, ({ many }) => ({
posts: many(posts),
}));
export const postsRelations = relations(posts, ({ one }) => ({
author: one(users, {
fields: [posts.authorId],
references: [users.id],
}),
}));
データベースクライアント
// db/index.ts
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';
import * as schema from './schema';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
export const db = drizzle(pool, { schema });
クエリ
import { eq, and, or, like, desc, asc } from 'drizzle-orm';
// Find one
const user = await db.query.users.findFirst({
where: eq(users.id, userId),
});
// Find many with relations
const usersWithPosts = await db.query.users.findMany({
with: { posts: true },
where: eq(users.emailVerified, true),
orderBy: [desc(users.createdAt)],
limit: 10,
});
// Complex where
const results = await db.query.posts.findMany({
where: and(
eq(posts.published, true),
or(
like(posts.title, '%search%'),
like(posts.content, '%search%')
)
),
});
ミューテーション
// Insert
const [newUser] = await db.insert(users).values({
email: 'test@example.com',
name: 'Test User',
}).returning();
// Insert many
await db.insert(users).values([
{ email: 'user1@example.com', name: 'User 1' },
{ email: 'user2@example.com', name: 'User 2' },
]);
// Update
await db.update(users)
.set({ name: 'New Name', updatedAt: new Date() })
.where(eq(users.id, userId));
// Delete
await db.delete(users)
.where(eq(users.id, userId));
トランザクション
await db.transaction(async (tx) => {
const [user] = await tx.insert(users).values(userData).returning();
await tx.insert(profiles).values({ userId: user.id, ...profileData });
await tx.insert(settings).values({ userId: user.id, ...defaultSettings });
});
マイグレーション
# Generate migration
pnpm drizzle-kit generate
# Push to database
pnpm drizzle-kit push
# Open Drizzle Studio
pnpm drizzle-kit studio
drizzle.config.ts
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
schema: './db/schema/index.ts',
out: './db/migrations',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
}); 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Drizzle ORM Patterns
Schema Definition
// db/schema/users.ts
import { pgTable, uuid, varchar, timestamp, boolean } from 'drizzle-orm/pg-core';
export const users = pgTable('users', {
id: uuid('id').primaryKey().defaultRandom(),
email: varchar('email', { length: 255 }).notNull().unique(),
name: varchar('name', { length: 255 }),
emailVerified: boolean('email_verified').default(false),
createdAt: timestamp('created_at').defaultNow().notNull(),
updatedAt: timestamp('updated_at').defaultNow().notNull(),
});
export type User = typeof users.$inferSelect;
export type NewUser = typeof users.$inferInsert;
Relations
// db/schema/relations.ts
import { relations } from 'drizzle-orm';
import { users } from './users';
import { posts } from './posts';
export const usersRelations = relations(users, ({ many }) => ({
posts: many(posts),
}));
export const postsRelations = relations(posts, ({ one }) => ({
author: one(users, {
fields: [posts.authorId],
references: [users.id],
}),
}));
Database Client
// db/index.ts
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';
import * as schema from './schema';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
export const db = drizzle(pool, { schema });
Queries
import { eq, and, or, like, desc, asc } from 'drizzle-orm';
// Find one
const user = await db.query.users.findFirst({
where: eq(users.id, userId),
});
// Find many with relations
const usersWithPosts = await db.query.users.findMany({
with: { posts: true },
where: eq(users.emailVerified, true),
orderBy: [desc(users.createdAt)],
limit: 10,
});
// Complex where
const results = await db.query.posts.findMany({
where: and(
eq(posts.published, true),
or(
like(posts.title, '%search%'),
like(posts.content, '%search%')
)
),
});
Mutations
// Insert
const [newUser] = await db.insert(users).values({
email: 'test@example.com',
name: 'Test User',
}).returning();
// Insert many
await db.insert(users).values([
{ email: 'user1@example.com', name: 'User 1' },
{ email: 'user2@example.com', name: 'User 2' },
]);
// Update
await db.update(users)
.set({ name: 'New Name', updatedAt: new Date() })
.where(eq(users.id, userId));
// Delete
await db.delete(users)
.where(eq(users.id, userId));
Transactions
await db.transaction(async (tx) => {
const [user] = await tx.insert(users).values(userData).returning();
await tx.insert(profiles).values({ userId: user.id, ...profileData });
await tx.insert(settings).values({ userId: user.id, ...defaultSettings });
});
Migrations
# Generate migration
pnpm drizzle-kit generate
# Push to database
pnpm drizzle-kit push
# Open Drizzle Studio
pnpm drizzle-kit studio
drizzle.config.ts
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
schema: './db/schema/index.ts',
out: './db/migrations',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});