🐸

NestJSに入門してみた

に公開

はじめに

NestJSとは

  • Node.js上で動作するバックエンドフレームワーク
  • TypeScriptで作られている
  • Express(Node.jsのフレームワーク)をコアに作られている

NestJSを使用するメリット

  • TypeScriptを使用している為、型の恩恵を受けられる
  • Expressの機能やライブラリを使用する事ができる
  • Nest CLIでコマンドを入力して操作が可能

NestJSを使用するデメリット

  • 他のバックエンドフレームワークに比べるとユーザーが少ない為、情報量が少ない
  • 公式ドキュメントが日本語に非対応

Nest CLIについて

NestJSのCLI(コマンドラインインターフェース)は、NestJSアプリケーションの開発を効率化するための強力なツールです。
CLIを使用することで、新しいプロジェクトの作成、コードの自動生成、アプリケーションのビルドや実行、テストの実行など、多くのタスクを簡単に行うことができます。

Nest CLI install

公式ドキュメント参照
https://docs.nestjs.com/

npm i -g @nestjs/cli
nest new project-name

導入できているかバージョンを確認します

nest -v
11.0.7

プロジェクトの新規作成

プロジェクトの作成したい場所に移動し、NestCLIでプロジェクトを作成します

nest new nest-sample(お好きなプロジェクト名)

パッケージマネージャーを選択

 nest new nest-sample
✨  We will scaffold your app in a few seconds..

? Which package manager would you ❤️  to use? (Use arrow keys)
❯ npm
  yarn
  pnpm

少し待つと、プロジェクトが作成されます。

srcディレクトリ配下を確認してみます

app.controller.spec.ts

  • テストファイル
  • 動作が正しいかをテストするためのファイルです。
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});

app.controller.ts

  • ルーティングの処理(URLと処理の対応)を担当するファイル
  • クライアントからのリクエストを受け取って、サービスの処理などを呼び出します。
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

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 {}

app.service.ts

  • ビジネスロジックを記述するためのファイル
  • コントローラーから呼び出されて、処理結果を返します
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

main.ts

  • エントリーポイント(最初に実行されるファイル)
  • NestJS アプリを起動するための処理が書かれています。
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

npm run startで起動し、
http://localhost:3000/にアクセスしてみます。

Hello World!と表示されました!🎊

おわりに

はじめてNestJSに入門してみました。
これから色々試してどんどん理解を深めていきたいと思っています。
今後はCRUD機能の実装や、モジュールの分割などにもチャレンジしていく予定です。

Discussion