Dev Study
NestJS コース

7. プロバイダとサービス

プロバイダは DIコンテナに登録してアプリ内で注入できるようにしたクラスの総称で、その代表がビジネスロジックを担う「サービス」です。クラスに @Injectable() を付けると注入可能になり、利用側はコンストラクタの引数に型を書くだけで受け取れます。

実務ではコントローラに処理を直接書かず、ロジックはサービスへ寄せるのが定石です。こうするとコントローラは「URL の対応表」、サービスは「業務処理」と役割が分かれ、同じ処理を複数のコントローラから再利用できます。

前のレッスンで作ったコンテナへの register に相当する作業を、NestJS では @Injectable() と次レッスンで学ぶ登録設定が肩代わりします。コンストラクタに型を書くだけで自分では一度も new しない、というのが DI に慣れる第一歩です。

サンプルコード(フレームワーク環境が必要なため表示のみ)

import { Injectable, Controller, Get } from "@nestjs/common";

@Injectable() // DIコンテナに注入可能だと宣言
export class UsersService {
  private users = ["Alice", "Bob"];

  findAll(): string[] {
    return this.users;
  }
}

@Controller("users")
export class UsersController {
  // コンストラクタに型を書くだけで注入される
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll() {
    return this.usersService.findAll();
  }
}
公式ドキュメントで詳しく ↗