MRが楽しい

MRやVRについて学習したことを書き残す

AWESOME-COPILOTのドキュメントを読む その95(NestJS Development Best Practices)

本日はAWESOME-COPILOTの技術調査枠です。
AWESOME-COPILOTのドキュメントを読みながら実際に操作を試して記事に残します。
今回はカスタムインストラクションの一つNestJS Development Best Practicesについてです。

NestJS Development Best Practices

NestJS Development Best PracticesはNestJSでスケーラブルかつ保守性の高いバックエンドを構築するための設計・実装ルールです。
Node.js開発を“フレームワーク設計前提”に引き上げるインストラクションです。

以下のページからGenaiscriptのインストールボタンをクリックして取得します。
github.com

インストールボタンを押してNestJS Development Best Practicesをダウンロードします。
すると.github/instructions配下にインストラクションがインストールされます。

インストールしたインストラクションはCopilotの動作に自動的に適用されます。
このインストラクションを読み込むと、CopilotはNestJSのアーキテクチャに従った設計でコードを生成するようになります。

具体的にはCopilotは以下のような行動をとります。

Dependency Injection(DI)前提になる

Copilotは以下を利用して全てをDIで設計します。

  • @Injectable() を使う
  • constructorで依存注入
  • 手動newを禁止

例えば以下のようなコードです。

constructor(private readonly usersService: UsersService) {}

モジュール構造を強制する

Copilotは機能ごとにモジュール分割します。
例えば以下のようにモジュール構成を生成します。

modules/
 ├ users/
 ├ auth/
 └ products/

デコレーター中心設計

CopilotはNestJSの特徴であるデコレーター駆動設計を徹底します。
主なデコレーターは以下の通りです。

  • @Controller()
  • @Get()
  • @Post()
  • @Injectable()

Serviceにビジネスロジック集約する

CopilotはControllerにロジックを書かず、Serviceに委譲します。
例えば以下のようなコードを作成します。

return this.usersService.create(dto);

ロジックはServiceに集中します。
これにより以下のメリットがあります。

  • 単一責任
  • 再利用可能
  • テストしやすい

DTO + Validationを必須化

CopilotはDTOで入力を管理します。

  • @IsEmail()
  • @IsString()

TypeORM前提のDB設計

CopilotはORMとしてTypeORMを使用します。
これは以下の特徴を持ちます。

  • Entity定義
  • Repositoryパターン
  • Migration

認証・認可を標準装備する

Copilotはセキュリティを最初から考慮します。
例えば以下の考慮です。

  • JWT認証
  • Guard
  • RBAC

Guard/Interceptor/Pipeを使い分け

Copilotは横断処理を分離します。

機能 役割
Guard 認証
Interceptor 処理前後
Pipe バリデーション
Filter 例外

エラーハンドリングを標準化する

CopilotはException Filterを使います。
これは以下の特徴を持ちます。

  • 一元管理
  • ログ出力
  • レスポンス統一

ログを適切に出力する

CopilotはLoggerを使います。
以下のログレベルを出力します。

  • error
  • warn
  • log
  • debug

テスト前提を設計する

Copilotはテストしやすいコードを書きます。
以下の種類のテストを設計します。

  • Unitテスト(Jest)
  • Integration
  • E2E

パフォーマンス最適化する

Copilotは性能も考慮します。
例えば以下の要素を最適化します。

  • キャッシュ(Redis)
  • インデックス
  • ページング

セキュリティを強制する

Copilotはセキュリティ対策を組み込みます。
例えば以下のセキュリティ要素を考慮します。

  • 入力検証
  • レート制限
  • CORS
  • XSS対策

アンチパターンを回避する

Copilotは以下のアンチパターンを避けます。

  • Controllerにロジックを記述する
  • DI無視
  • バリデーションなし
  • 同期処理
  • 循環依存