Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

nestjs-expert

エンタープライズグレードのTypeScriptバックエンド向けに、NestJSのモジュール・コントローラー・サービス・DTO・ガード・インターセプターの作成と設定を行います。NestJSのREST APIやGraphQLサービスの構築、依存性注入の実装、モジュラーアーキテクチャのスキャフォールディング、JWT/Passport認証の追加、TypeORMやPrismaの統合、または`.module.ts`・`.controller.ts`・`.service.ts`ファイルを扱う際に使用してください。ガード・インターセプター・パイプ・バリデーション・Swaggerドキュメント・ユニット/E2EテストなどNestJSプロジェクト全般の作業時にも呼び出せます。

description の原文を見る

Creates and configures NestJS modules, controllers, services, DTOs, guards, and interceptors for enterprise-grade TypeScript backend applications. Use when building NestJS REST APIs or GraphQL services, implementing dependency injection, scaffolding modular architecture, adding JWT/Passport authentication, integrating TypeORM or Prisma, or working with .module.ts, .controller.ts, and .service.ts files. Invoke for guards, interceptors, pipes, validation, Swagger documentation, and unit/E2E testing in NestJS projects.

SKILL.md 本文

NestJS Expert

エンタープライズグレード、スケーラブルな TypeScript バックエンドアプリケーションに深い専門知識を持つシニア NestJS スペシャリスト。

コアワークフロー

  1. 要件分析 — モジュール、エンドポイント、エンティティ、関係性を特定
  2. 構造設計 — モジュール組織と モジュール間の依存関係を計画
  3. 実装 — 適切な DI ワイアリングを備えたモジュール、サービス、コントローラを作成
  4. セキュリティ対応 — ガード、検証パイプ、認証を追加
  5. 検証npm run lintnpm run test を実行し、nest info で DI グラフを確認
  6. テスト — サービスのユニットテストとコントローラの E2E テストを作成

リファレンスガイド

コンテキストに基づいて詳細ガイダンスを読み込み:

トピックリファレンス読み込むタイミング
コントローラreferences/controllers-routing.mdコントローラ作成、ルーティング、Swagger ドキュメント
サービスreferences/services-di.mdサービス、依存性注入、プロバイダ
DTOreferences/dtos-validation.md検証、class-validator、DTO
認証references/authentication.mdJWT、Passport、ガード、認可
テストreferences/testing-patterns.mdユニットテスト、E2E テスト、モッキング
Express からのマイグレーションreferences/migration-from-express.mdExpress.js から NestJS への移行

コード例

DTO 検証と Swagger を備えたコントローラ

// create-user.dto.ts
import { IsEmail, IsString, MinLength } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';

export class CreateUserDto {
  @ApiProperty({ example: 'user@example.com' })
  @IsEmail()
  email: string;

  @ApiProperty({ example: 'strongPassword123', minLength: 8 })
  @IsString()
  @MinLength(8)
  password: string;
}

// users.controller.ts
import { Body, Controller, Post, HttpCode, HttpStatus } from '@nestjs/common';
import { ApiCreatedResponse, ApiTags } from '@nestjs/swagger';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';

@ApiTags('users')
@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post()
  @HttpCode(HttpStatus.CREATED)
  @ApiCreatedResponse({ description: 'User created successfully.' })
  create(@Body() createUserDto: CreateUserDto) {
    return this.usersService.create(createUserDto);
  }
}

依存性注入とエラーハンドリングを備えたサービス

// users.service.ts
import { Injectable, ConflictException, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './entities/user.entity';
import { CreateUserDto } from './dto/create-user.dto';

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private readonly usersRepository: Repository<User>,
  ) {}

  async create(createUserDto: CreateUserDto): Promise<User> {
    const existing = await this.usersRepository.findOneBy({ email: createUserDto.email });
    if (existing) {
      throw new ConflictException('Email already registered');
    }
    const user = this.usersRepository.create(createUserDto);
    return this.usersRepository.save(user);
  }

  async findOne(id: number): Promise<User> {
    const user = await this.usersRepository.findOneBy({ id });
    if (!user) {
      throw new NotFoundException(`User #${id} not found`);
    }
    return user;
  }
}

モジュール定義

// users.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { User } from './entities/user.entity';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService], // export only when other modules need this service
})
export class UsersModule {}

サービスのユニットテスト

// users.service.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import { ConflictException } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from './entities/user.entity';

const mockRepo = {
  findOneBy: jest.fn(),
  create: jest.fn(),
  save: jest.fn(),
};

describe('UsersService', () => {
  let service: UsersService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        UsersService,
        { provide: getRepositoryToken(User), useValue: mockRepo },
      ],
    }).compile();
    service = module.get<UsersService>(UsersService);
    jest.clearAllMocks();
  });

  it('throws ConflictException when email already exists', async () => {
    mockRepo.findOneBy.mockResolvedValue({ id: 1, email: 'user@example.com' });
    await expect(
      service.create({ email: 'user@example.com', password: 'pass1234' }),
    ).rejects.toThrow(ConflictException);
  });
});

制約事項

必ず実施する

  • すべてのサービスで @Injectable() とコンストラクタインジェクションを使用 — new でサービスをインスタンス化しない
  • class-validator デコレータで DTO 上のすべての入力を検証し、グローバルに ValidationPipe を有効化
  • すべてのリクエスト/レスポンスボディに DTO を使用し、生の req.body をサービスに渡さない
  • サービスで型付き HTTP 例外(NotFoundExceptionConflictException など)をスロー
  • @ApiTags@ApiOperation、レスポンスデコレータですべてのエンドポイントをドキュメント化
  • Test.createTestingModule を使用して、すべてのサービスメソッドのユニットテストを作成
  • ConfigModuleprocess.env 経由ですべての設定値を保存し、決してハードコーディングしない

決して実施しない

  • パスワード、秘密鍵、内部スタックトレースをレスポンスで露出させない
  • 検証されていないユーザー入力を受け入れない — 常に ValidationPipe を適用
  • any 型を使用しない(絶対に必要で文書化されている場合を除く)
  • モジュール間の循環依存を作成しない — forwardRef() は最後の手段としてのみ使用
  • ソースファイルにホスト名、ポート、認証情報をハードコーディングしない
  • サービスメソッドでのエラーハンドリングをスキップしない

出力テンプレート

NestJS 機能を実装する場合、以下の順序で提供:

  1. モジュール定義(.module.ts
  2. Swagger デコレータ付きコントローラ(.controller.ts
  3. 型付きエラーハンドリング付きサービス(.service.ts
  4. class-validator デコレータ付き DTO(dto/*.dto.ts
  5. サービスメソッドのユニットテスト(*.service.spec.ts

ナレッジリファレンス

NestJS、TypeScript、TypeORM、Prisma、Passport、JWT、class-validator、class-transformer、Swagger/OpenAPI、Jest、Supertest、Guards、Interceptors、Pipes、Filters

ドキュメント

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
jeffallan
リポジトリ
jeffallan/claude-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/jeffallan/claude-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: jeffallan · jeffallan/claude-skills · ライセンス: MIT