nestjs-best-practices
NestJSのモジュラーアーキテクチャ、依存性注入のスコープ管理、例外フィルター、class-validatorを用いたDTOバリデーション、Drizzle ORMの統合など、包括的なベストプラクティスを提供します。NestJSのモジュール設計、プロバイダーの実装、例外フィルターの作成、DTOのバリデーション、またはDrizzle ORMの統合を行う際にご活用ください。
description の原文を見る
Provides comprehensive NestJS best practices including modular architecture, dependency injection scoping, exception filters, DTO validation with class-validator, and Drizzle ORM integration. Use when designing NestJS modules, implementing providers, creating exception filters, validating DTOs, or integrating Drizzle ORM within NestJS applications.
SKILL.md 本文
NestJS ベストプラクティス
概要
NestJS公式ドキュメントに基づいており、モジュラーアーキテクチャ、依存性注入スコーピング、例外フィルター、class-validatorを用いたDTO検証、およびDrizzle ORM統合パターンを強制します。
使用時期
- NestJSモジュールまたは依存性注入の設計・リファクタリング時
- 例外フィルター、DTO検証、またはDrizzle ORM統合の作成時
- アンチパターンのコードレビューまたはNestJSコードベースへのオンボーディング時
指示
1. モジュラーアーキテクチャ
厳密なモジュールカプセル化に従います。各ドメイン機能は独自の@Module()である必要があります:
- 他のモジュールが必要とするもののみをエクスポート — 内部プロバイダーはプライベートのままにする
- 循環依存関係に対しては
forwardRef()を最後の手段としてのみ使用 — リストラクチャリングを優先する - 関連するコントローラー、サービス、リポジトリーを同じモジュール内にグループ化する
- クロスカッティングコンサーン(ロギング、構成、キャッシング)には
SharedModuleを使用する
強制ルールについてはreferences/arch-module-boundaries.mdを参照してください。
2. 依存性注入
ユースケースに基づいて正しいプロバイダースコープを選択します:
| スコープ | ライフサイクル | ユースケース |
|---|---|---|
DEFAULT | シングルトン(共有) | ステートレスサービス、リポジトリー |
REQUEST | リクエストごとのインスタンス | リクエストスコープデータ(テナント、ユーザーコンテキスト) |
TRANSIENT | 注入ごとに新規インスタンス | ステートフルユーティリティ、クライアントごとのキャッシュ |
DEFAULTスコープをデフォルトとする —REQUESTまたはTRANSIENTは正当化される場合のみ使用する- コンストラクタ注入を排他的に使用 — プロパティ注入は避ける
useClass、useValue、useFactory、またはuseExistingでカスタムプロバイダーを登録する
強制ルールについてはreferences/di-provider-scoping.mdを参照してください。
3. リクエストライフサイクル
NestJSリクエスト処理パイプラインを理解し尊重します:
Middleware → Guards → Interceptors (before) → Pipes → Route Handler → Interceptors (after) → Exception Filters
- Middleware: クロスカッティングコンサーン(ロギング、CORS、ボディパース)
- Guards: 認可および認証チェック(
true/falseを返す) - Interceptors: レスポンスデータの変換、キャッシング追加、タイミング測定
- Pipes: 入力パラメーターの検証と変換
- Exception Filters: エラーレスポンスのキャッチとフォーマット
4. エラーハンドリング
アプリケーション全体でエラーレスポンスを標準化します:
- HTTPに特化したエラーについては
HttpExceptionを拡張する - ドメイン固有の例外クラス(例:
OrderNotFoundException)を作成する - 一貫したエラーフォーマットのためにグローバル
ExceptionFilterを実装する - 予想されるビジネスロジック失敗にはResult パターンを使用する
- 例外を静かに飲み込まないこと
強制ルールについてはreferences/error-exception-filters.mdを参照してください。
5. 検証
API境界で入力検証を強制します:
ValidationPipeをグローバルに有効化し、transform: trueとwhitelist: trueで設定する- すべてのDTOプロパティを
class-validatorデコレーターで修飾する - 型強制には
class-transformerを使用する(@Type()、@Transform()) - Create、Update、Response操作に対して別々のDTOを作成する
- ユーザー入力を信頼しない — すべてを検証する
強制ルールについてはreferences/api-validation-dto.mdを参照してください。
6. データベースパターン(Drizzle ORM)
NestJSプロバイダー慣例に従ってDrizzle ORMを統合します:
- Drizzleクライアントを注入可能なプロバイダーでラップする
- データアクセスカプセル化のためにRepository パターンを使用する
- ドメインモジュールごとのスキーマファイルでスキーマを定義する
- マルチステップ操作にはトランザクションを使用する
- データベースロジックをコントローラーから除外する
強制ルールについてはreferences/db-drizzle-patterns.mdを参照してください。
ベストプラクティス
| 領域 | すること | しないこと |
|---|---|---|
| モジュール | ドメイン機能ごとに1モジュール | すべてをAppModuleに詰め込む |
| DIスコーピング | デフォルトはシングルトンスコープ | 正当化なくREQUESTスコープを使用 |
| エラーハンドリング | カスタム例外フィルター+ドメインエラー | 素のtry/catchとconsole.log |
| 検証 | グローバルValidationPipe+DTOデコレーター | コントローラーの手動ifチェック |
| データベース | 注入クライアントを使ったRepository パターン | コントローラーで直接DB クエリ |
| テスト | サービスのユニットテスト、コントローラーのe2eテスト | テストスキップまたは実装詳細テスト |
| 構成 | @nestjs/configと型付きスキーマ | ハードコード値またはprocess.envの使用 |
例
例:検証付き新規ドメインモジュール
「Product」機能を構築する場合、このワークフローに従います:
1. 適切なカプセル化でモジュールを作成します:
// product/product.module.ts
@Module({
imports: [DatabaseModule],
controllers: [ProductController],
providers: [ProductService, ProductRepository],
exports: [ProductService], // 他のモジュールが必要とするもののみエクスポート
})
export class ProductModule {}
2. 検証済みDTOを作成します:
// product/dto/create-product.dto.ts
import { IsString, IsNumber, IsPositive, MaxLength } from 'class-validator';
export class CreateProductDto {
@IsString() @MaxLength(255) readonly name: string;
@IsNumber() @IsPositive() readonly price: number;
}
3. エラーハンドリング付きサービス:
@Injectable()
export class ProductService {
constructor(private readonly productRepository: ProductRepository) {}
async findById(id: string): Promise<Product> {
const product = await this.productRepository.findById(id);
if (!product) throw new ProductNotFoundException(id);
return product;
}
}
4. モジュール登録を確認します:
# AppModuleにProductModuleが取り込まれていることを確認
grep -r "ProductModule" src/app.module.ts
# e2eを実行してエクスポートが機能していることを確認
npx jest --testPathPattern="product"
制約と警告
- スコープを正当化なく混在させない —
REQUESTスコープのプロバイダーはすべての依存先に連鎖する - コントローラーからデータベースに直接アクセスしない — 常にサービスとリポジトリレイヤーを経由する
forwardRef()を避ける — 循環依存関係を排除するためにモジュールをリストラクチャリングするValidationPipeをスキップしない — DTOを使ってAPI境界で常に検証する- シークレットをハードコードしない — 環境変数で
@nestjs/configを使用する - モジュールを焦点化する — モジュールごとに1つのドメイン機能、「god modules」を避ける
参照
references/architecture.md— NestJSアーキテクチャパターンの深掘りreferences/— 正しい/誤った例を含む個別の強制ルールassets/templates/— 一般的なNestJSコンポーネント用スターターテンプレート
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。