d1-drizzle-schema
Cloudflare D1データベース向けに、D1固有のパターンに準拠したDrizzle ORMスキーマを生成します。スキーマファイル・マイグレーションコマンド・型エクスポート・`DATABASE_SCHEMA.md`ドキュメントを一括で出力し、外部キーの強制適用・BOOLEAN/DATETIMEネイティブ型非対応・バインドパラメータ上限100件・JSONのTEXT保存といったD1の仕様差異も適切に処理します。新規データベースの作成・テーブル追加・D1データレイヤーの雛形構築時に活用してください。
description の原文を見る
Generate Drizzle ORM schemas for Cloudflare D1 databases with correct D1-specific patterns. Produces schema files, migration commands, type exports, and DATABASE_SCHEMA.md documentation. Handles D1 quirks: foreign keys always enforced, no native BOOLEAN/DATETIME types, 100 bound parameter limit, JSON stored as TEXT. Use when creating a new database, adding tables, or scaffolding a D1 data layer.
SKILL.md 本文
D1 Drizzle スキーマ
Cloudflare D1 向けの正しい Drizzle ORM スキーマを生成します。D1 は SQLite ベースですが、標準的な SQLite パターンを使用すると微妙なバグが発生する重要な違いがあります。このスキルは D1 の制約に正しく対応したスキーマを生成します。
D1 の重要な違い
| 機能 | 標準 SQLite | D1 |
|---|---|---|
| 外部キー | デフォルトは OFF | 常に ON (無効化不可) |
| Boolean 型 | なし | なし — integer({ mode: 'boolean' }) を使用 |
| Datetime 型 | なし | なし — integer({ mode: 'timestamp' }) を使用 |
| 最大バインドパラメータ | ~999 | 100 (一括挿入に影響) |
| JSON サポート | 拡張機能 | 常に利用可能 (json_extract, ->, ->>) |
| 並行処理 | マルチライター | シングルスレッド (一度に 1 つのクエリ) |
ワークフロー
ステップ 1: データモデルを記述
要件を集めます: どのようなテーブル、どのようなリレーションシップ、インデックスが必要か。既存の説明から作成する場合は、スキーマを直接推論します。
ステップ 2: Drizzle スキーマを生成
D1 に対応したカラムパターンを使用してスキーマファイルを作成します:
import { sqliteTable, text, integer, real, index, uniqueIndex } from 'drizzle-orm/sqlite-core'
export const users = sqliteTable('users', {
// UUID 主キー (D1 では推奨)
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
// テキストフィールド
name: text('name').notNull(),
email: text('email').notNull(),
// Enum (TEXT として保存、スキーマレベルで検証)
role: text('role', { enum: ['admin', 'editor', 'viewer'] }).notNull().default('viewer'),
// Boolean (D1 に BOOL がない — INTEGER 0/1 として保存)
emailVerified: integer('email_verified', { mode: 'boolean' }).notNull().default(false),
// Timestamp (D1 に DATETIME がない — unix 秒として保存)
createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
// 型付き JSON (TEXT として保存、Drizzle が自動シリアライズ)
preferences: text('preferences', { mode: 'json' }).$type<UserPreferences>(),
// 外部キー (D1 では常に強制)
organisationId: text('organisation_id').references(() => organisations.id, { onDelete: 'cascade' }),
}, (table) => ({
emailIdx: uniqueIndex('users_email_idx').on(table.email),
orgIdx: index('users_org_idx').on(table.organisationId),
}))
完全な型リファレンスについては references/column-patterns.md を参照してください。
ステップ 3: リレーションを追加
Drizzle リレーションはクエリビルダーのヘルパーです (FK 制約とは別):
import { relations } from 'drizzle-orm'
export const usersRelations = relations(users, ({ one, many }) => ({
organisation: one(organisations, {
fields: [users.organisationId],
references: [organisations.id],
}),
posts: many(posts),
}))
ステップ 4: 型をエクスポート
export type User = typeof users.$inferSelect
export type NewUser = typeof users.$inferInsert
ステップ 5: Drizzle 設定をセットアップ
assets/drizzle-config-template.ts を drizzle.config.ts にコピーし、スキーマパスを更新します。
ステップ 6: マイグレーションスクリプトを追加
package.json に追加:
{
"db:generate": "drizzle-kit generate",
"db:migrate:local": "wrangler d1 migrations apply DB --local",
"db:migrate:remote": "wrangler d1 migrations apply DB --remote"
}
テストする前に、ローカルとリモートの両方で実行してください。
ステップ 7: DATABASE_SCHEMA.md を生成
今後のセッションのためにスキーマを記録します:
- テーブル、カラム、型、制約
- リレーションシップと外部キー
- インデックスとその目的
- マイグレーションワークフロー
一括挿入パターン
D1 はバインドパラメータを 100 に制限します。バッチサイズを計算します:
const BATCH_SIZE = Math.floor(100 / COLUMNS_PER_ROW)
for (let i = 0; i < rows.length; i += BATCH_SIZE) {
await db.insert(table).values(rows.slice(i, i + BATCH_SIZE))
}
D1 ランタイム使用方法
import { drizzle } from 'drizzle-orm/d1'
import * as schema from './schema'
// Worker fetch ハンドラー内:
const db = drizzle(env.DB, { schema })
// クエリパターン
const all = await db.select().from(schema.users).all() // Array<User>
const one = await db.select().from(schema.users).where(eq(schema.users.id, id)).get() // User | undefined
const count = await db.select({ count: sql`count(*)` }).from(schema.users).get()
リファレンスファイル
| 対象 | 参照 |
|---|---|
| D1 vs SQLite、JSON クエリ、制限 | references/d1-specifics.md |
| Drizzle + D1 のカラム型パターン | references/column-patterns.md |
アセット
| ファイル | 目的 |
|---|---|
assets/drizzle-config-template.ts | D1 向けスターター drizzle.config.ts |
assets/schema-template.ts | すべての一般的な D1 パターンを含むスキーマの例 |
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- jezweb
- リポジトリ
- jezweb/claude-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/jezweb/claude-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パターンを含んでいます。