第02章 基本構造
NestJS アプリは以下の 3 つを中心に構成されます。
- モジュール(Modules) → アプリのまとまり
- コントローラー(Controllers) → HTTP リクエストの入口
- プロバイダー(Providers) → ビジネスロジックを実装するサービス層
さらに、これらを結びつけるのが 依存性注入(Dependency Injection, DI) です。
2.1 モジュール(Modules)
- NestJS アプリはすべて モジュール単位で構成される。
@Module()デコレーターを使い、以下を定義する:imports: 他モジュールの読み込みcontrollers: このモジュールが管理するコントローラーproviders: このモジュールで使うサービス(プロバイダー)exports: 他モジュールから利用可能にするプロバイダー
📌 例:AppModule
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
2.2 コントローラー(Controllers)
- 役割:HTTP リクエストを受け取り、レスポンスを返す
- デコレーター:
@Controller('path')→ エンドポイントを定義@Get(),@Post(),@Put(),@Delete()→ HTTP メソッドに対応
- コントローラーは サービス層(プロバイダー)を呼び出すだけにするのがベストプラクティス。
📌 例:
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller('hello')
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
➡️ http://localhost:3000/hello にアクセスすると "Hello World!" が返る。
2.3 プロバイダー(Providers)
- 役割:ビジネスロジックやデータ操作を担当
@Injectable()デコレーターで宣言。- コントローラーや他のサービスに