未経験からのNestJS入門|モジュール

概要

コントローラーやサービスはそれぞれ役割を持っており、数が増えてくると構造が複雑化してしまいます。

それを解決するためにモジュール化という概念があります。

Nest.js アプリケーションには、ルートモジュールが必ず含まれており、それに紐づく形で、モジュールが作成されます。

モジュールの作成方法

モジュールを作成する最も簡単な方法は、Nest CLI を使うことです。

以下コマンドでモジュールディレクトリに user.module.ts を作成し、
ルートモジュールに、user.module.ts を追加してくれます。

nest generate module users
// /src/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersController } from './users/users.controller';
import { UsersService } from './users/users.service';
import { UsersModule } from './users/users.module';  ← CLI 実行時に自動追加

@Module({
  imports: [UsersModule], ← CLI 実行時に自動追加
  controllers: [AppController, UsersController],
  providers: [AppService, UsersService],
})
export class AppModule {}
// /src/users/users.module.ts

import { Module } from '@nestjs/common';

@Module({})
export class UsersModule {}

モジュールの設定

前回、『未経験からの NestJS 入門|コントローラー』『未経験からの NestJS 入門|サービス』で users コントローラーと users サービスを作成し、 さらに今回、user モジュールを作成した結果、app.module.ts が以下のようになっています。

// /src/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserController } from './controller/user/user.controller';
import { UserService } from './service/user/user.service';
import { UserModule } from './module/user/user.module';

@Module({
  imports: [UserModule],
  controllers: [AppController, UserController],
  providers: [AppService, UserService],
})
export class AppModule {}

このままではルートモジュールにユーザーサービスとユーザーコントロールが存在していて見通しが悪いため、この設定をユーザーモジュールに移動させます。

// /src/users/users.module.ts

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  imports: [],
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}
// /src/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersModule } from "./users/users.module";

@Module({
  imports: [UsersModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

このようにモジュールを利用すると、必要な機能をひとまとめにすることができソース管理が煩雑にならずに済みます。

終わりに

次に NestJS の便利な機能であるミドルウェアについて解説します。 こちらを参考にしてください。

未経験からの NestJS 入門|ミドルウェア