nestjs-drizzle-crud-generator について
NestJS アプリケーション向けに、Drizzle ORM を使った CRUD モジュールを生成するスキルです。記載された monorepo のパターンに沿って、コントローラー、サービス、Zod 検証付き DTO、スキーマ、Jest テストを作成します。
主な機能
- 01CRUD コントローラーとサービスの生成
- 02Zod 検証付き DTO の作成
- 03Drizzle スキーマの生成
- 04ページネーションとフィルタリング
- 05モック DB を使う Jest テストの生成
活用シーン
- 01新しいエンティティモジュールのひな形作成
- 02データベース連携機能の追加
- 03検証付き API 入力の生成
- 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.tsdto-template.tsmodule-template.tsservice-template.tstable-template.tstest-template.tsreferences/field-types.mdscripts/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/coredrizzle-ormdrizzle-zodzodnestjs-zod
ベストプラクティス
- コミット前に確認する:生成したコードをコミットする前に、必ず
tsc --noEmitとテストを実行してください - サービスをカスタマイズする:検証後、生成されたサービスにビジネスロジックを追加してください
- データベースマイグレーション:生成された Drizzle スキーマ用のマイグレーションは別途作成してください
- 生成された型を使用する:アプリケーションコードでは生成された型を参照してください
- DTO を確認する:API の要件に応じて Zod バリデーションルールを調整してください
制約と注意事項
- ソフトデリートのみ:削除操作ではソフトデリート(
deletedAtタイムスタンプ)を使用します。物理削除には手動での変更が必要です - 認証なし:生成されるコードには認証ガードは含まれません。セキュリティ要件に応じて追加してください
- 基本的な CRUD のみ:複雑なクエリ、トランザクション、ビジネスロジックは手動で実装する必要があります
- JSON のエスケープ:コマンドラインでフィールドを渡す際は、JSON 配列をシングルクォートで囲んでください
コメント
Markdown 対応