メインコンテンツまでスキップ

5. Modules

モジュールの概念

モジュールは、関連する機能をカプセル化し、アプリケーションの構造を整理するための単位です。Nest.jsのアプリケーションは、複数のモジュールで構成されており、各モジュールは特定の機能やドメインに対応しています。

モジュールの作成と構成

新しいモジュールを作成するには、以下のコマンドを使用します:

nest generate module cats

このコマンドは、cats という名前のモジュールを作成し、プロジェクトの src ディレクトリに追加します。

src/
└── cats/
├── cats.module.ts
├── cats.controller.ts
└── cats.service.ts

基本的なモジュールの例

以下は基本的なモジュールの例です:

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
imports: [],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}

@Moduleデコレーター

  • imports:他のモジュールをインポートします。モジュールは、アプリケーションの依存関係を管理するためにインポートされます。
  • controllers:このモジュールに属するコントローラーのリストを定義します。
  • providers:このモジュールに属するプロバイダー(サービス、リポジトリ、ヘルパーなど)のリストを定義します。

モジュールのインポート

作成したモジュールをアプリケーション全体で使用するために、ルートモジュールでインポートします。以下は AppModuleCatsModule をインポートする例です:

import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';

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

サブモジュールの使用

モジュールは他のモジュールをインポートして使用することができます。これにより、アプリケーションの機能をモジュールごとに分割し、再利用可能なコンポーネントを構築できます。

import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
import { DogsModule } from './dogs/dogs.module';

@Module({
imports: [CatsModule, DogsModule],
controllers: [],
providers: [],
})
export class AppModule {}

モジュール間の依存関係

モジュール間で依存関係がある場合、必要なモジュールを imports 配列に追加します。例えば、CatsServiceDogsModule で使用する場合、DogsModuleCatsModule をインポートします。

import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
import { DogsController } from './dogs.controller';
import { DogsService } from './dogs.service';

@Module({
imports: [CatsModule],
controllers: [DogsController],
providers: [DogsService],
})
export class DogsModule {}

グローバルモジュール

特定のプロバイダーをアプリケーション全体で共有したい場合は、グローバルモジュールとして定義します。以下は CommonModule をグローバルモジュールとして設定する例です:

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

@Global()
@Module({
providers: [CommonService],
exports: [CommonService],
})
export class CommonModule {}

グローバルモジュールは、一度インポートされると、アプリケーション全体で使用可能になります。

モジュールの動的インポート

Nest.jsは動的モジュールのインポートもサポートしています。動的モジュールを使用すると、モジュールの設定をランタイムに変更できます。以下は動的モジュールの例です:

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

@Module({})
export class ConfigModule {
static forRoot(options: ConfigModuleOptions): DynamicModule {
return {
module: ConfigModule,
providers: [
{
provide: 'CONFIG_OPTIONS',
useValue: options,
},
],
};
}
}

これで、モジュールの作成と構成について理解できました。次のセクションでは、ミドルウェアの役割と使用方法について説明します。