mcpField
D
database-table-creator

database-table-creator

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

database-table-creator について

PostgreSQL と Exposed ORM の規約に沿う Kotlin プロジェクト向けに、データベーステーブルの実装を作成するスキルです。マイグレーションからテストまでの手順と、論理削除やスキーマのルールを示します。

主な機能

  1. 01PostgreSQL マイグレーション生成
  2. 02Kotlin のテーブルとエンティティ生成
  3. 03CRUD リポジトリ実装
  4. 04Factory bean 登録
  5. 05リポジトリテスト生成

活用シーン

  1. 01Kotlin サービスへのテーブル追加
  2. 02論理削除対応 CRUD リポジトリの作成
  3. 03マイグレーションとリポジトリテストの生成

インストール

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

$npx skills add https://github.com/c0x12c/ai-toolkit --skill database-table-creator

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

examples.md
kotlin-templates.md
migration-template.sql
validation-checklist.md

詳細

データベーステーブル作成スキル

SQL マイグレーション、Kotlin コード、包括的なテストを含む、完全なデータベーステーブル実装を作成します。

このスキルでできること

次の項目を生成します。

  1. SQL マイグレーション — ソフトデリート、インデックス、トリガーを備えた PostgreSQL テーブル
  2. Kotlin テーブルオブジェクト — Exposed ORM のテーブル定義(UUIDTable を継承)
  3. エンティティデータクラス — Entity<Instant> を実装する Kotlin エンティティ
  4. リポジトリインターフェース+実装 — ソフトデリート対応の CRUD 操作
  5. リポジトリテスト — 包括的なテストカバレッジ(7 件以上)
  6. ファクトリービーン — 依存性注入の登録

重要なルール

データベース設計(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 を参照してください。

次の順序で進めてください。

  1. ステップ 3 — テーブルオブジェクト(UUIDTable を継承し、varchar() ではなく text() を使用)
  2. ステップ 4 — エンティティデータクラス(Entity<Instant> を実装)
  3. ステップ 5 — 定数/列挙型(必要な場合)
  4. ステップ 6 — リポジトリインターフェース
  5. ステップ 7 — リポジトリ実装(書き込みには db.primary、読み込みには db.replica を使用し、必ず deletedAt.isNull() でフィルタリング)
  6. ステップ 8 — ファクトリービーンの登録
  7. ステップ 9 — リポジトリテスト(最低 7 件。ソフトデリートの検証を必ず含める)
  8. ステップ 10 — テストを実行する:./gradlew test

避けるべきよくある間違い

よくある間違いとアンチパターンについては、examples.md を参照してください。

成功基準

✅ SQL マイグレーションが正常に実行される ✅ TEXT を使用している(VARCHAR ではない) ✅ 外部キー制約がない ✅ すべてのインデックスに WHERE 句がある ✅ Kotlin のテーブルが UUIDTable を継承している ✅ エンティティが Entity<Instant> を実装している ✅ すべてのクエリで deletedAt.isNull() によるフィルタリングを行っている ✅ !! 演算子がない ✅ ソフトデリートのみを使用している(物理削除はない) ✅ ファクトリービーンが登録されている ✅ 7 件以上のテストがすべて成功する

コメント