mcpField
N
nestjs-drizzle-crud-generator

nestjs-drizzle-crud-generator

github.com/giuseppe-trisciuoglio開発3653.6k 回インストール7 週間前に更新
リポジトリ

nestjs-drizzle-crud-generator について

NestJS アプリケーション向けに、Drizzle ORM を使った CRUD モジュールを生成するスキルです。記載された monorepo のパターンに沿って、コントローラー、サービス、Zod 検証付き DTO、スキーマ、Jest テストを作成します。

主な機能

  1. 01CRUD コントローラーとサービスの生成
  2. 02Zod 検証付き DTO の作成
  3. 03Drizzle スキーマの生成
  4. 04ページネーションとフィルタリング
  5. 05モック DB を使う Jest テストの生成

活用シーン

  1. 01新しいエンティティモジュールのひな形作成
  2. 02データベース連携機能の追加
  3. 03検証付き API 入力の生成
  4. 04CRUD 操作用テストの作成

インストール

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

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill nestjs-drizzle-crud-generator

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

同梱ファイル

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

assets/templates/
controller-template.ts
dto-template.ts
module-template.ts
service-template.ts
table-template.ts
test-template.ts
references/
field-types.md
scripts/
generate_crud.py

詳細

NestJS Drizzle CRUD ジェネレーター

概要

Drizzle ORM を使用して、NestJS アプリケーション向けの完全な CRUD モジュールを自動生成します。zaccheroni-monorepo のパターンに従って、機能モジュール、コントローラー、サービス、Zod で検証する DTO、Drizzle スキーマ、Jest ユニットテストなど、必要なファイルをすべて作成します。

使用する場面

  • 完全な CRUD エンドポイントを備えた新しいエンティティモジュールを作成する場合
  • NestJS でデータベースを利用する機能を構築する場合
  • Zod バリデーションを備えた型安全な DTO を生成する場合
  • Drizzle ORM クエリを使用するサービスを追加する場合
  • モックデータベースを使用したユニットテストを作成する場合

手順

ステップ 1:エンティティのフィールドを定義する

エンティティの定義をまとめます。

  • エンティティ名(例:user、product、order)
  • 型を含むフィールドの一覧(サポートされている型については references/field-types.md を参照)
  • デフォルト値のある必須フィールドと任意フィールド
ステップ 2:ジェネレーターを実行する
python scripts/generate_crud.py --feature <name> --fields '<json-array>' --output <path>
ステップ 3:生成されたファイルを確認する

想定されるファイルがすべて作成されたことを確認します。

ls -la libs/server/<feature-name>/src/lib/

想定される構成:

controllers/
services/
dto/
schema/
<feature>-feature.module.ts
ステップ 4:TypeScript のコンパイルを実行する
cd libs/server && npx tsc --noEmit
ステップ 5:ユニットテストを実行する
cd libs/server && npm test -- --testPathPattern=<feature-name>

例

User モジュールを生成する
python scripts/generate_crud.py \
  --feature user \
  --fields '[{"name": "name", "type": "string", "required": true}, {"name": "email", "type": "email", "required": true}, {"name": "password", "type": "string", "required": true}]' \
  --output ./libs/server
Product モジュールを生成する
python scripts/generate_crud.py \
  --feature product \
  --fields '[{"name": "title", "type": "string", "required": true}, {"name": "price", "type": "number", "required": true}, {"name": "description", "type": "text", "required": false}, {"name": "inStock", "type": "boolean", "required": false, "default": true}]' \
  --output ./libs/server

生成される構成

libs/server/{feature-name}/
├── src/
│   ├── index.ts
│   └── lib/
│       ├── {feature}-feature.module.ts
│       ├── controllers/
│       │   ├── index.ts
│       │   └── {feature}.controller.ts
│       ├── services/
│       │   ├── index.ts
│       │   ├── {feature}.service.ts
│       │   └── {feature}.service.spec.ts
│       ├── dto/
│       │   ├── index.ts
│       │   └── {feature}.dto.ts
│       └── schema/
│           └── {feature}.table.ts

機能

モジュール
  • 遅延設定に forRootAsync パターンを使用します
  • 生成されたサービスを他のモジュール向けにエクスポートします
  • 機能テーブル向けに DatabaseModule をインポートします
コントローラー
  • CRUD エンドポイント一式:POST、GET、PATCH、DELETE
  • ページネーション用のクエリパラメーターを検証します
  • Zod バリデーションパイプを統合します
サービス
  • Drizzle ORM のクエリメソッド
  • ソフトデリートに対応します(deletedAt カラムを使用)
  • limit/offset によるページネーション
  • フィルタリングに対応します
  • 型安全な戻り値の型
DTO
  • Create と Update 用の Zod スキーマ
  • フィルタリング用のクエリパラメータースキーマ
  • NestJS DTO との統合
テスト
  • Jest テストスイート
  • モック Drizzle データベース
  • すべての CRUD 操作を対象としたテストケース

手動での統合

生成後、アプリモジュールに統合します。

// app.module.ts
import { {{FeatureName}}FeatureModule } from '@your-org/server-{{feature}}';

@Module({
  imports: [
    {{FeatureName}}FeatureModule.forRootAsync({
      useFactory: () => ({
        defaultPageSize: 10,
        maxPageSize: 100,
      }),
    }),
  ],
})
export class AppModule {}

依存関係

必要なパッケージ:

  • @nestjs/common
  • @nestjs/core
  • drizzle-orm
  • drizzle-zod
  • zod
  • nestjs-zod

ベストプラクティス

  1. コミット前に確認する:生成したコードをコミットする前に、必ず tsc --noEmit とテストを実行してください
  2. サービスをカスタマイズする:検証後、生成されたサービスにビジネスロジックを追加してください
  3. データベースマイグレーション:生成された Drizzle スキーマ用のマイグレーションは別途作成してください
  4. 生成された型を使用する:アプリケーションコードでは生成された型を参照してください
  5. DTO を確認する:API の要件に応じて Zod バリデーションルールを調整してください

制約と注意事項

  • ソフトデリートのみ:削除操作ではソフトデリート(deletedAt タイムスタンプ)を使用します。物理削除には手動での変更が必要です
  • 認証なし:生成されるコードには認証ガードは含まれません。セキュリティ要件に応じて追加してください
  • 基本的な CRUD のみ:複雑なクエリ、トランザクション、ビジネスロジックは手動で実装する必要があります
  • JSON のエスケープ:コマンドラインでフィールドを渡す際は、JSON 配列をシングルクォートで囲んでください

コメント