nestjs-code-review
NestJSアプリケーションに特化した包括的なコードレビュー機能を提供し、コントローラー・サービス・モジュール・ガード・インターセプター・パイプ・依存性注入・データベース統合パターンを分析します。NestJSのコード変更レビュー、プルリクエストのマージ前、新機能実装後、またはアーキテクチャの妥当性確認が必要な場面で活用できます。「review NestJS code」「NestJS code review」「check my NestJS controller/service」などの指示で起動します。
description の原文を見る
Provides comprehensive code review capability for NestJS applications, analyzing controllers, services, modules, guards, interceptors, pipes, dependency injection, and database integration patterns. Use when reviewing NestJS code changes, before merging pull requests, after implementing new features, or for architecture validation. Triggers on "review NestJS code", "NestJS code review", "check my NestJS controller/service".
SKILL.md 本文
NestJS コードレビュー
概要
NestJS アプリケーション向けの構造化されたコードレビューを提供します。検出結果は重大度別(Critical、Warning、Suggestion)に分類され、実行可能な推奨事項が含まれます。詳細な分析は nestjs-code-review-expert エージェントに委譲されます。
使用場面
- 「NestJS コードをレビューしてほしい」「NestJS コードレビューしてください」「NestJS のコントローラー/サービスをチェックしてほしい」
- プルリクエストのマージ前または新機能実装後
- NestJS デコレーター、DI パターン、ガード実装の検証
- NestJS モジュールとプロバイダーのアーキテクチャ検証
- DTO、パイプ、インターセプター、データベース統合(TypeORM、Prisma、Drizzle)のレビュー
手順
-
スコープの特定: レビュー対象となる NestJS ファイルとモジュールを決定します。
globとgrepを使用して、対象領域内のコントローラー、サービス、モジュール、ガード、インターセプター、パイプを発見します。 -
モジュール構造を分析: 適切なモジュール構成を確認します。各機能は明確に定義されたインポート、コントローラー、プロバイダー、エクスポートを持つ独自のモジュールを備えている必要があります。循環依存関係と適切なモジュール境界をチェックします。
-
依存性注入をレビュー: すべてのインジェクタブルサービスがコンストラクタインジェクションを使用していることを検証します。プロバイダーのスコープ(singleton、request、transient)が意図されたライフサイクルと一致することを確認します。DI コンテナーをバイパスする直接インスタンス化がないことを確認します。
-
コントローラーを評価: HTTP メソッドの使用法、ルート命名、ステータスコード、リクエスト/レスポンス DTO、検証パイプ、OpenAPI デコレーターをレビューします。コントローラーが薄いことを確認します。ビジネスロジックはサービスに属します。
-
サービスとビジネスロジックを評価: サービスがビジネスロジックを適切にカプセル化していることをチェックします。エラーハンドリング、トランザクション管理、インフラストラクチャの関心事からの適切な分離を検証します。メソッドが大きすぎたり責任が多すぎたりするサービスを探します。
-
セキュリティをチェック: ガード実装、認証/認可パターン、class-validator による入力検証、一般的な脆弱性(インジェクション、XSS、CSRF)からの保護をレビューします。
-
テストをレビュー: コントローラー、サービス、ガード、パイプのテストカバレッジを評価します。適切なモッキング戦略と、テストが実装の詳細ではなく動作を検証していることを確認します。
-
検出結果を検証(必須チェックポイント): 最終化する前に、各 Critical および Warning の検出結果に再現可能な証拠(ファイルパス、行番号、正確なコードスニペット)と具体的で実行可能な修正があることを確認します。スタイル設定、過度に主観的、または具体的な改善策がない検出結果を削除またはダウングレードします。
-
レビューレポートを作成: 重大度別に分類された検出結果(Critical、Warning、Suggestion)、肯定的な観察、および優先順位付けされた推奨事項(コード例付き)を含む構造化レポートを生成します。
例
例 1: コントローラーのレビュー
// ❌ 悪い例: ビジネスロジックを含む太いコントローラーと検証の欠落
@Controller('users')
export class UserController {
constructor(private readonly userRepo: Repository<User>) {}
@Post()
async create(@Body() body: any) {
const user = this.userRepo.create(body);
return this.userRepo.save(user);
}
}
// ✅ 良い例: 適切な DTO、検証、サービス委譲を備えた薄いコントローラー
@Controller('users')
@ApiTags('Users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
@HttpCode(HttpStatus.CREATED)
@ApiOperation({ summary: 'Create a new user' })
@ApiResponse({ status: 201, type: UserResponseDto })
async create(
@Body(ValidationPipe) createUserDto: CreateUserDto,
): Promise<UserResponseDto> {
return this.userService.create(createUserDto);
}
}
例 2: 依存性注入のレビュー
// ❌ 悪い例: DI をバイパスする直接インスタンス化
@Injectable()
export class OrderService {
private readonly logger = new Logger();
private readonly emailService = new EmailService();
async createOrder(dto: CreateOrderDto) {
this.emailService.send(dto.email, 'Order created');
}
}
// ✅ 良い例: 適切なコンストラクタインジェクション
@Injectable()
export class OrderService {
private readonly logger = new Logger(OrderService.name);
constructor(
private readonly orderRepository: OrderRepository,
private readonly emailService: EmailService,
) {}
async createOrder(dto: CreateOrderDto): Promise<Order> {
const order = await this.orderRepository.create(dto);
await this.emailService.send(dto.email, 'Order created');
return order;
}
}
例 3: エラーハンドリングのレビュー
// ❌ 悪い例: 情報漏洩を伴う汎用的なエラーハンドリング
@Get(':id')
async findOne(@Param('id') id: string) {
try {
return await this.service.findOne(id);
} catch (error) {
throw new HttpException(error.message, 500);
}
}
// ✅ 良い例: 適切な HTTP マッピングを備えたドメイン固有の例外
@Get(':id')
async findOne(@Param('id', ParseUUIDPipe) id: string): Promise<UserResponseDto> {
const user = await this.userService.findOne(id);
if (!user) {
throw new NotFoundException(`User with ID ${id} not found`);
}
return user;
}
例 4: ガード実装のレビュー
// ❌ 悪い例: コントローラーに認可ロジックがある
@Get('admin/dashboard')
async getDashboard(@Req() req: Request) {
if (req.user.role !== 'admin') {
throw new ForbiddenException();
}
return this.dashboardService.getData();
}
// ✅ 良い例: デコレーターを備えたガードベースの認可
@Get('admin/dashboard')
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles(Role.ADMIN)
async getDashboard(): Promise<DashboardDto> {
return this.dashboardService.getData();
}
例 5: モジュール構成のレビュー
// ❌ 悪い例: すべてを含むモノリシックモジュール
@Module({
imports: [TypeOrmModule.forFeature([User, Order, Product, Review])],
controllers: [UserController, OrderController, ProductController],
providers: [UserService, OrderService, ProductService, ReviewService],
})
export class AppModule {}
// ✅ 良い例: 機能ベースのモジュール構成
@Module({
imports: [UserModule, OrderModule, ProductModule],
})
export class AppModule {}
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService, UserRepository],
exports: [UserService],
})
export class UserModule {}
レビュー出力形式
すべてのコードレビュー検出結果を以下のように構造化します:
1. 概要
簡潔な概要、総合品質スコア(1~10)、および主な観察。
2. Critical(必須修正)
セキュリティ脆弱性、データ破損、本番環境の障害を引き起こす可能性がある問題。
3. Warning(修正推奨)
ベストプラクティスに違反し、保守性を低下させ、バグにつながる可能性がある問題。
4. Suggestion(改善検討)
コード可読性、パフォーマンス、開発者体験を向上させるための改善提案。
5. 肯定的な観察
実装の良いパターンと良好なプラクティスの指摘と奨励。
6. 推奨事項
最大の影響を持つ改善に関するコード例を含む優先順位付けされた次のステップ。
ベストプラクティス
- コントローラーは薄くして、すべてのビジネスロジックをサービスに委譲する
- すべてのリクエスト/レスポンスペイロードに対して class-validator を備えた DTO を使用する
- パラメーター検証のために
ParseUUIDPipe、ParseIntPipeなどを適用する HttpExceptionを拡張するドメイン固有の例外クラスを使用する- 明確な境界とエクスポートを備えた機能モジュールにコードを構成する
- コンストラクタインジェクションを推奨し、インジェクタブルサービス用に
newを使用しない - インラインチェックではなく、認証と認可にはガードを適用する
- 横断的関心事(ログ、キャッシュ、変換)にはインターセプターを使用する
- すべてのエンドポイントに OpenAPI デコレーター(
@ApiTags、@ApiOperation、@ApiResponse)を追加する - サービスのユニットテストとコントローラーの統合テストを作成する
制約と警告
- 単一の ORM を強制しないでください。コードベースは TypeORM、Prisma、Drizzle、または MikroORM を使用する場合があります
- NestJS のデフォルトと異なる場合でも、既存のプロジェクト規約を尊重する
- 高信頼度の問題に焦点を当ててください。スタイル設定に関する偽陽性を避ける
- マイクロサービスパターンをレビューする場合、トランスポート層固有の制約を考慮する
- Critical の問題が保証されない限り、アーキテクチャの完全な書き直しを提案しない
参考資料
詳細なレビューチェックリストとパターンドキュメントについては、references/ ディレクトリを参照してください:
references/patterns.md— 例を含む NestJS ベストプラクティスパターンreferences/anti-patterns.md— レビュー中にフラグを立てる一般的な NestJS アンチパターンreferences/checklist.md— 領域別に整理された包括的なレビューチェックリスト
ライセンス: 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を通じてオンチェーン取引とデータ照会を実現します。