開発覚書はてな版

個人的な開発関連の備忘録

【NestJS】NestJSで遊んでみる

概要

NestJSで遊んでみたので、遊んでみた感想やメモなどを記載していきます。

nestjs.com

github.com

NestJSとは

  • Node.js サーバーアプリケーション向けのフレームワークである。
  • TypeScriptベース
  • デコレーターベースでのルーティング指定
  • DIやAOP機能がバンドル
  • Angular や JavaJAX-RSの実装に似ている
  • Jestによるユニットテストサンプルがバンドル
  • CLI完備

以下に主観ですが、メリット・デメリットを記載します。

メリット
  • クラスのレイヤーが確立されているので、クラス配置に悩まなくてすむ。
  • TypeScriptベースなので、チーム開発に向いている。
  • DI・AOPがバンドルされていて、実装と設定の分離がしやすい。
  • AngularやJAX-RS経験者なら学習コストが低い。
  • DBアクセス、HTTP通信などもバンドルされているのでライブラリ選択に悩まなくてすむ。
デメリット
  • 日本語情報が少ない。
  • AWS Lambda などのファンクションベースのサーバーレスの場合、高機能になってしまう場合がある。

新規プロジェクト作成方法

CLIをインストール後、CLIコマンドを実行することで新規プロジェクト作成が可能

yarn global add @nestjs/cli
nest new project-name

JSONを返すサンプルを作ってみる

実行環境
  • Node.js - 10.x
  • Yarn - 1.13.x
使用ライブラリ
  • @nestjs/common - 6.0.x
  • @nestjs/core - 6.0.x
  • @nestjs/platform-express - 6.0.x
  • typescript - 3.2.x
src/dto.ts
export interface HogeDto {
  id: string;
  name: string;
}
src/app.controller.ts
import { Controller, Get, Param } from '@nestjs/common';
import { HogeDto } from './dto';

@Controller()
export class AppController {
  @Get('hoge/:id')
  findOne(@Param('id') id: string): HogeDto {
    return {
      id,
      name: 'aaa',
    } as HogeDto;
  }
}
実行

f:id:kakkoya:20190427163608p:plain

実行結果

f:id:kakkoya:20190427163623p:plain

おわりに

  • JSONを戻すAPI作成が簡単に作成できました。
  • Angular や JAX-RSを経験していれば、かなりとっつきやすい構成でした。
  • Expressだとルーティングやフォルダ構成などの自由度が高いため、人によって構成がまちまちでした。構成が決まっているのはかなり楽ですね。
  • GraphQL、DI、AOPユニットテスト、Passport連携、Swagger生成機能などたくさんの機能があるので今後も試していきたいと思います。