database-table-creator について
PostgreSQL と Exposed ORM の規約に沿う Kotlin プロジェクト向けに、データベーステーブルの実装を作成するスキルです。マイグレーションからテストまでの手順と、論理削除やスキーマのルールを示します。
主な機能
- 01PostgreSQL マイグレーション生成
- 02Kotlin のテーブルとエンティティ生成
- 03CRUD リポジトリ実装
- 04Factory bean 登録
- 05リポジトリテスト生成
活用シーン
- 01Kotlin サービスへのテーブル追加
- 02論理削除対応 CRUD リポジトリの作成
- 03マイグレーションとリポジトリテストの生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ c0x12c/ ai-toolkit --skill database-table-creatorインストール後、Claude Code で/database-table-creatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples.mdkotlin-templates.mdmigration-template.sqlvalidation-checklist.md詳細
データベーステーブル作成スキル
SQL マイグレーション、Kotlin コード、包括的なテストを含む、完全なデータベーステーブル実装を作成します。
このスキルでできること
次の項目を生成します。
- SQL マイグレーション — ソフトデリート、インデックス、トリガーを備えた PostgreSQL テーブル
- Kotlin テーブルオブジェクト — Exposed ORM のテーブル定義(
UUIDTableを継承) - エンティティデータクラス —
Entity<Instant>を実装する Kotlin エンティティ - リポジトリインターフェース+実装 — ソフトデリート対応の CRUD 操作
- リポジトリテスト — 包括的なテストカバレッジ(7 件以上)
- ファクトリービーン — 依存性注入の登録
重要なルール
データベース設計(rules/database/SCHEMA.md)
SQL の要件:
- ❌ 外部キー制約は使用しないでください(
REFERENCESまたはFOREIGN KEYは絶対に使用しない) - ✅ 文字列には
TEXTを使用してください(VARCHARは使用しない) - ✅
id(UUID)、created_at、updated_at、deleted_atを含めてください - ✅ すべてのインデックスに
WHERE deleted_at IS NULLを指定してください - ✅ ソフトデリート用インデックスを追加してください:
WHERE deleted_at IS NOT NULL - ✅
updated_atを更新するトリガーを追加してください
Kotlin の要件:
- ✅ テーブルは
UUIDTableを継承する必要があります(Tableではありません) - ✅ エンティティは
Entity<Instant>を実装する必要があります - ✅ すべてのクエリで
deletedAt.isNull()によるフィルタリングが必要です - ❌
!!演算子は使用しないでください(コミット前フックで禁止されています) - ✅ ソフトデリートのみを使用してください(
deletedAtを設定し、物理削除はしない)
ワークフロー
ステップ 1:SQL マイグレーションを作成する
場所:database-migration/sql/{number}-{description}.sql
-- ============================================================================
-- Description: [Describe what this migration does]
-- Table: {table_name}
-- ============================================================================
CREATE TABLE {table_name} (
-- Primary key (REQUIRED)
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Business columns
name TEXT NOT NULL,
email TEXT,
status TEXT DEFAULT 'active',
user_id UUID,
count INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT true,
metadata JSONB,
-- Standard timestamps (REQUIRED)
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP,
deleted_at TIMESTAMP
);
-- Unique index (allows duplicate soft-deleted records)
CREATE UNIQUE INDEX idx_{table_name}_email_unique
ON {table_name}(email) WHERE deleted_at IS NULL;
-- Foreign key index (NO FK constraint, just index)
CREATE INDEX idx_{table_name}_user_id
ON {table_name}(user_id) WHERE deleted_at IS NULL;
-- Soft delete index (REQUIRED)
CREATE INDEX idx_{table_name}_deleted_at
ON {table_name}(deleted_at) WHERE deleted_at IS NOT NULL;
-- Update trigger (REQUIRED)
CREATE TRIGGER update_{table_name}_updated_at
BEFORE UPDATE ON {table_name}
FOR EACH ROW
EXECUTE FUNCTION update_updated_at();
重要:
VARCHARではなくTEXTを使用するREFERENCESまたはFOREIGN KEYは使用しない- すべてのインデックスに
WHERE句を指定する - ソフトデリート用インデックスが必要
- 更新トリガーが必要
ステップ 2:マイグレーションを実行する
./gradlew :app:module-repository:flywayMigrate
続行する前に、正常に実行されたことを確認してください。
ステップ 3〜10:Kotlin の実装
Kotlin のコードテンプレート(テーブル、エンティティ、リポジトリ、ファクトリービーン、テスト)については、
kotlin-templates.mdを参照してください。
次の順序で進めてください。
- ステップ 3 — テーブルオブジェクト(
UUIDTableを継承し、varchar()ではなくtext()を使用) - ステップ 4 — エンティティデータクラス(
Entity<Instant>を実装) - ステップ 5 — 定数/列挙型(必要な場合)
- ステップ 6 — リポジトリインターフェース
- ステップ 7 — リポジトリ実装(書き込みには
db.primary、読み込みにはdb.replicaを使用し、必ずdeletedAt.isNull()でフィルタリング) - ステップ 8 — ファクトリービーンの登録
- ステップ 9 — リポジトリテスト(最低 7 件。ソフトデリートの検証を必ず含める)
- ステップ 10 — テストを実行する:
./gradlew test
避けるべきよくある間違い
よくある間違いとアンチパターンについては、
examples.mdを参照してください。
成功基準
✅ SQL マイグレーションが正常に実行される
✅ TEXT を使用している(VARCHAR ではない)
✅ 外部キー制約がない
✅ すべてのインデックスに WHERE 句がある
✅ Kotlin のテーブルが UUIDTable を継承している
✅ エンティティが Entity<Instant> を実装している
✅ すべてのクエリで deletedAt.isNull() によるフィルタリングを行っている
✅ !! 演算子がない
✅ ソフトデリートのみを使用している(物理削除はない)
✅ ファクトリービーンが登録されている
✅ 7 件以上のテストがすべて成功する