nestjs について
nestjs は、プロジェクト固有のリファレンスとモジュール構成の規約に沿って NestJS 開発タスクを進めるスキルです。検証、依存性注入、実装、確認を扱い、開発者やコーディングエージェント向けです。
主な機能
- 01タスクに応じた NestJS リファレンスの選択
- 02実装前のスタック方針の確認
- 03モジュール構成と依存性注入の適用
- 04検証、テスト、確認のガイド
活用シーン
- 01NestJS モジュールの作成や編集
- 02DTO 検証を伴うエンドポイントの実装
- 03認証、キュー、データベースの作業
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ulpi-io/ skills --skill nestjsインストール後、Claude Code で/nestjsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/auth.mdconfig.mdcontrollers.mdcqrs.mddocker.mderror-handling.mdhealth.mdinterceptors.mdlogging.mdmicroservices.mdmiddleware.mdmodules.mdopenapi.mdpipes.mdprisma.mdproject-structure.mdproviders.mdqueues.mdscheduling.mdstack.mdtesting.mdtypeorm.mdvalidation.mdwebsockets.md詳細
譲れないルール:
- プロジェクトの NestJS のバージョン、ORM、固定された決定事項を把握するため、最初に
references/stack.mdを読んでください。 - その後、実際のタスクに必要なリファレンスだけを読み込んでください。
- ドメインごとにモジュールは1つ — コントローラー、サービス、DTO、エンティティは、同じモジュールのディレクトリに配置します。
- コントローラーは薄く保つ — バリデーション(DTO + パイプ)、委譲(サービス)、返却を行います。ビジネスロジックは含めません。
- すべての入力を DTO で検証する — すべての DTO に class-validator デコレーターを適用し、
ValidationPipeをグローバルに設定します。 - あらゆる箇所で依存性注入を使う —
new Service()は使いません。コンストラクター経由で注入し、モジュールでプロバイダーとして設定します。 - 循環依存を避ける —
forwardRef()の使用は最後の手段とし、構成の見直しを優先します。 - NestJS の詳細なガイダンスは、ここに直接書かず
references/に置いてください。
nestjs
入力
$request:作業対象の NestJS モジュール、エンドポイント、サブシステム、または機能
目標
NestJS の作業をプロジェクトのモジュールベースのアーキテクチャに沿って進め、依存性注入、バリデーション、データアクセス、リクエストのライフサイクルに関する既存のパターンに従って実装します。
ステップ 0:スタックの契約を読む
必ず最初に次を読んでください。
references/stack.md
ここでは、NestJS のバージョン、ORM(TypeORM/Prisma/Drizzle)、パッケージマネージャー、認証方式、キューシステム、固定された依存関係の選択が定められています。
成功基準:実装を始める前に、プロジェクトの NestJS アーキテクチャと固定された決定事項が明確になっていること。
ステップ 1:関連するリファレンスだけを読み込む
ルーティングテーブルからリファレンスファイルを選んでください。リファレンスツリー全体を一括で読み込まないでください。
| タスク | 読むファイル |
|---|---|
| NestJS のバージョン、ORM、主要な依存関係、CLI、プロジェクト構成 | references/stack.md |
| フォルダーの規約、モジュール構成、バレルエクスポート | references/project-structure.md |
| モジュールの作成または編集 | references/modules.md |
| コントローラー、ルートデコレーター、リクエストのライフサイクル | references/controllers.md |
| サービス、プロバイダー、依存性注入 | references/providers.md |
| DTO、class-validator、ValidationPipe、変換 | references/validation.md |
| TypeORM のエンティティ、リポジトリ、マイグレーション | references/typeorm.md |
| NestJS と Prisma の統合 | references/prisma.md |
| ガード、認証、認可、JWT、Passport | references/auth.md |
| インターセプター、ロギング、キャッシュ、レスポンスのマッピング | references/interceptors.md |
| パイプ、カスタムバリデーション、パラメーター変換 | references/pipes.md |
| 例外フィルター、カスタム例外、エラーレスポンス | references/error-handling.md |
| BullMQ のキュー、プロセッサー、フロー | references/queues.md |
| WebSocket ゲートウェイ、イベント、ルーム | references/websockets.md |
| マイクロサービス、トランスポート、メッセージパターン | references/microservices.md |
| OpenAPI/Swagger デコレーター、スキーマ生成 | references/openapi.md |
| 単体テスト、e2e テスト、テストモジュール、モック | references/testing.md |
| 設定、ConfigModule、環境変数のバリデーション | references/config.md |
| ミドルウェア、ライフサイクルフック、シャットダウン | references/middleware.md |
| pino または組み込みロガーによるロギング | references/logging.md |
| ヘルスチェック、Terminus | references/health.md |
| CQRS、イベント、サーガ | references/cqrs.md |
| スケジューリング、cron ジョブ、インターバル | references/scheduling.md |
| Docker、デプロイ、本番環境のセットアップ | references/docker.md |
複数のタスクがある場合は、複数のファイルを読んでください。各リファレンスは単独で利用できます。
成功基準:タスクに関連する NestJS の規約だけが対象になっていること。
ステップ 2:NestJS の基本ガードレールに従って実装する
以下のルールを常に適用してください。
- すべてのモジュールで、コントローラー、プロバイダー、インポート、エクスポートを明示的に宣言します
- コントローラーでは DTO と
ValidationPipeで検証し、サービスに処理を委譲して、型付きのレスポンスを返します - サービスにビジネスロジックを記述し、コンストラクターで注入します。
newでインスタンス化してはいけません - エンティティ/モデルと DTO は分けます。コントローラーから生のエンティティを返してはいけません
- ガードは認証/認可を、インターセプターは横断的関心事を、パイプは変換を扱います
- すべての外部入力に、class-validator デコレーターを付けた DTO を用意します
- 原子性が重要な場合は、データベースの変更をトランザクションでラップします
- 環境変数の検証には、Zod または Joi と
@nestjs/configを使用します
成功基準:この変更がフレームワークを迂回せず、プロジェクトの NestJS モジュールアーキテクチャに適合していること。
ステップ 3:影響範囲を検証する
関連する範囲に絞って、最適な検証を行います。
- ユニットテスト(
jest --testPathPattern=<module>) - E2E テスト(
jest --config test/jest-e2e.json) - 型チェック(
tsc --noEmit) - リント(
eslint .) - デコレーターを変更した場合は OpenAPI 仕様を再生成します
成功基準:変更した NestJS の範囲が引き続きビルドでき、型チェックに合格し、テストが通ること。
ガードレール
- NestJS ハンドブック全体を
SKILL.mdにインラインで記述しないでください。 references/stack.mdを省略しないでください。- コントローラーにビジネスロジックを記述しないでください。サービスに処理を委譲します。
- 生のエンティティを返さないでください。DTO またはシリアライズ用インターセプターを使用します。
- 依存性の注入を迂回しないでください。
new Service()は使用しません。 - ほかの選択肢を十分に検討する前に、循環するモジュール依存関係を作成しないでください。
- 型のインポートに
@nestjs/commonのバレルインポートを使用しないでください。可能な場合は、個別のサブパスからインポートします。 disable-model-invocationを追加しないでください。これは通常のドメインスキルです。
参照資料を読み込むタイミング
-
references/stack.md必ず読み込みます。 -
その後、
references/内でタスクに関連するファイルのみを読み込みます
出力要件
以下を報告します。
- 読み込んだ NestJS の参照資料
- 選択したモジュールおよびアーキテクチャのパターン
- 実施した変更
- 実行した検証