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
:このモジュールに属するプロバイダー(サービス、リポジトリ、ヘルパーなど)のリストを定義します。
モジュールのインポート
作成したモジュールをアプリケーション全体で使用するために、ルートモジュールでインポートします。以下は AppModule
で CatsModule
をインポートする例です:
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
配列に追加します。例えば、CatsService
を DogsModule
で使用する場合、DogsModule
で CatsModule
をインポートします。
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,
},
],
};
}
}
これで、モジュールの作成と構成について理解できました。次のセクションでは、ミドルウェアの役割と使用方法について説明します。