こんにちは。高瀬です。
ずっとやろうやろうと思っていたのですが、そろそろ2023年になってしまうので、重い腰を上げて、いい加減にNestJSに入門しようと思います。
公式サイト nestjs.com
NestJSについて
フロントエンドのAngularに大きく影響を受けたバックエンド用Node.js/TypeScriptのフレームワークです。
セットアップ
$ npm i -g @nestjs/cli $ nest new project-name
実行すると、npm/yarn/pnpmが選択できます。
インストールが完了すると、いろいろなファイル群が作成されています。
node_modules/ src/ test/ .eslintrc.js .gitignore .prettierrc nest-cli.json package-lock.json package.json README.md tsconfig.build.json tsconfig.json
srcの中には、以下のファイル群が格納されています。
app.controller.spec.ts app.controller.ts app.module.ts app.service.ts main.ts
それぞれの役割は以下のようです。
- app.controller.spec.ts
- コントローラの単体テスト
- app.controller.ts
- コントローラ
- app.module.ts
- ルートモジュール
- app.service.ts
- サービスクラス
- main.ts
- Nestアプリケーションインスタンスを作成するエントリファイル
main.ts
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } bootstrap();
エントリファイルでNestのアプリケーションインスタンスを作成するには、まずNestFactory.create()
を利用するみたいですね。それで、この関数の利用にはモジュールを引数に渡す必要があるようです。
その後、app.listen()
で、3000ポートをリッスンしています。
main.tsは、srcの中に入れておけば、npm start
とかを実行すれば、main.tsから読み込んでくれそうですね。
それでは、モジュールとはなんでしょうか。
app.module.ts
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [], controllers: [AppController], providers: [AppService], }) export class AppModule {}
モジュールは、クラスのようですね。export class AppModule {}
が本体でしょう。
その上に、@Module()
デコレータがついています。
@Module()
デコレータは、Nestがアプリケーション構造を理解するために使用されるメタデータを提供するようです。
@Module()
デコレータに設定できるもの
- providers
- Nestインジェクタによってインスタンス化され、少なくともこのモジュール全体で共有される可能性があるプロバイダ
- controllers
- インスタンス化する必要がある、このモジュールで定義されたコントローラのセット
- imports
- このモジュールで必要なプロバイダをエクスポートする、インポートされたモジュールのリスト
- exports
- このモジュールによって提供され、このモジュールをインポートする他のモジュールで使用できるプロバイダのサブセットで、プロバイダ自体またはそのトークンのみを使用できる
まとめ
ここまでで、
npm start
でsrc/main.ts
が呼ばれるsrc/main.ts
は、NestFactory.create()
の実行に、モジュール (ルートモジュール)が必要- モジュールは、controllerとserviceを紐づけている
ことがわかりました。
次回は、モジュールをもっと掘り下げようと思います。