postgres-drizzle
PostgreSQL と Drizzle ORM を使用した API・バックエンド・データモデルの構築時に積極的に適用されます。スキーマ定義・クエリ・マイグレーション・トランザクション・インデックス・リレーション・コネクションプーリング・N+1問題・JSONB・RLS など、データベース関連のコードを記述する際にトリガーされます。Drizzle ORM と PostgreSQL のベストプラクティスに基づいた実装を提供します。
description の原文を見る
Proactively apply when creating APIs, backends, or data models. Triggers on PostgreSQL, Postgres, Drizzle, database, schema, tables, columns, indexes, queries, migrations, ORM, relations, joins, transactions, SQL, drizzle-kit, connection pooling, N+1, JSONB, RLS. Use when writing database schemas, queries, migrations, or any database-related code. PostgreSQL and Drizzle ORM best practices.
SKILL.md 本文
PostgreSQL + Drizzle ORM
PostgreSQL 18 と Drizzle ORM を使用した型安全なデータベースアプリケーション。
重要なコマンド
npx drizzle-kit generate # スキーマ変更からマイグレーションを生成
npx drizzle-kit migrate # 保留中のマイグレーションを適用
npx drizzle-kit push # スキーマを直接プッシュ (開発時のみ!)
npx drizzle-kit studio # データベースブラウザを開く
クイック判断ツリー
「この関連性をどうモデル化するか?」
関連性の種類?
├─ 一対多 (ユーザーが投稿を持つ) → FK を"多"側に + relations()
├─ 多対多 (投稿がタグを持つ) → ジャンクションテーブル + relations()
├─ 一対一 (ユーザーがプロフィールを持つ) → FK と unique 制約
└─ 自己参照 (コメント) → 同じテーブルへの FK
「なぜクエリが遅いのか?」
クエリが遅い?
├─ WHERE/JOIN 列のインデックスが不足 → インデックスを追加
├─ ループ内の N+1 クエリ → リレーショナルクエリ API を使用
├─ フルテーブルスキャン → EXPLAIN ANALYZE、インデックスを追加
├─ 大きな結果セット → ページネーションを追加 (limit/offset)
└─ コネクション オーバーヘッド → コネクションプーリングを有効化
「どの drizzle-kit コマンド?」
何が必要か?
├─ スキーマが変更、SQL マイグレーションが必要 → drizzle-kit generate
├─ マイグレーションをデータベースに適用 → drizzle-kit migrate
├─ 開発の高速イテレーション (マイグレーション不要) → drizzle-kit push
└─ ビジュアルでデータを閲覧/編集 → drizzle-kit studio
ディレクトリ構造
src/db/
├── schema/
│ ├── index.ts # すべてのテーブルを再エクスポート
│ ├── users.ts # テーブル + リレーション
│ └── posts.ts # テーブル + リレーション
├── db.ts # プーリング付きコネクション
└── migrate.ts # マイグレーションランナー
drizzle/
└── migrations/ # 生成された SQL ファイル
drizzle.config.ts # drizzle-kit 設定
スキーマパターン
タイムスタンプ付きの基本テーブル
export const users = pgTable('users', {
id: uuid('id').primaryKey().defaultRandom(),
email: varchar('email', { length: 255 }).notNull().unique(),
createdAt: timestamp('created_at').defaultNow().notNull(),
updatedAt: timestamp('updated_at').defaultNow().notNull(),
});
インデックス付きの外部キー
export const posts = pgTable('posts', {
id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull().references(() => users.id),
title: varchar('title', { length: 255 }).notNull(),
}, (table) => [
index('posts_user_id_idx').on(table.userId), // 常に FK にインデックスを付ける
]);
リレーション
export const usersRelations = relations(users, ({ many }) => ({
posts: many(posts),
}));
export const postsRelations = relations(posts, ({ one }) => ({
author: one(users, { fields: [posts.userId], references: [users.id] }),
}));
クエリパターン
リレーショナルクエリ (N+1 を回避)
// ✓ ネストされたデータを含む単一クエリ
const usersWithPosts = await db.query.users.findMany({
with: { posts: true },
});
フィルタリングされたクエリ
const activeUsers = await db
.select()
.from(users)
.where(eq(users.status, 'active'));
トランザクション
await db.transaction(async (tx) => {
const [user] = await tx.insert(users).values({ email }).returning();
await tx.insert(profiles).values({ userId: user.id });
});
パフォーマンスチェックリスト
| 優先度 | チェック項目 | 影響 |
|---|---|---|
| 重大 | すべての外部キーにインデックスを付ける | JOIN でのフルテーブルスキャンを防止 |
| 重大 | ネストされたデータにはリレーショナルクエリを使用 | N+1 を回避 |
| 高 | 本番環境ではコネクションプーリングを使用 | コネクションオーバーヘッドを削減 |
| 高 | 遅いクエリで EXPLAIN ANALYZE を実行 | 不足しているインデックスを特定 |
| 中 | フィルタリング対象のサブセット用にパーシャルインデックスを使用 | より小さく高速なインデックス |
| 中 | PK に UUIDv7 を使用 (PG18+) | インデックスのロケーション性を改善 |
アンチパターン (重大)
| アンチパターン | 問題 | 解決策 |
|---|---|---|
| FK インデックスなし | 遅い JOIN、フルスキャン | すべての FK 列にインデックスを追加 |
| ループ内の N+1 | 行ごとにクエリ | with: リレーショナルクエリを使用 |
| プーリングなし | リクエストごとのコネクション | @neondatabase/serverless 等を使用 |
本番環境での push | データ損失のリスク | 常に generate + migrate を使用 |
| JSON をテキストとして保存 | 検証なし、悪いクエリ | jsonb() 列型を使用 |
リファレンスドキュメント
| ファイル | 目的 |
|---|---|
references/SCHEMA.md | 列型、制約 |
references/QUERIES.md | 演算子、join、集計 |
references/RELATIONS.md | 一対多、多対多 |
references/MIGRATIONS.md | drizzle-kit ワークフロー |
references/POSTGRES.md | PG18 機能、RLS、パーティショニング |
references/PERFORMANCE.md | インデックス、最適化 |
references/CHEATSHEET.md | クイックリファレンス |
リソース
Drizzle ORM
- 公式ドキュメント: https://orm.drizzle.team
- GitHub リポジトリ: https://github.com/drizzle-team/drizzle-orm
- Drizzle Kit (マイグレーション): https://orm.drizzle.team/kit-docs/overview
PostgreSQL
- 公式ドキュメント: https://www.postgresql.org/docs/
- SQL コマンドリファレンス: https://www.postgresql.org/docs/current/sql-commands.html
- パフォーマンスのヒント: https://www.postgresql.org/docs/current/performance-tips.html
- インデックスタイプ: https://www.postgresql.org/docs/current/indexes-types.html
- JSON 関数: https://www.postgresql.org/docs/current/functions-json.html
- 行レベルセキュリティ: https://www.postgresql.org/docs/current/ddl-rowsecurity.html
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ccheney
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/ccheney/robust-skills / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。