リリース・改善中
Framework · 2017年公開
NestJSはモジュールと依存性注入で構造化されたNode.jsサーバーをTypeScriptで作るフレームワークで、軽量なWebフレームワークExpressの上で動きます。
ExpressはNode.jsで最も広く使われているWebフレームワークです。ルーティングとミドルウェアという小さな核だけを提供し、アプリケーションの構造は開発者に任せます。NestJSは2017年に公開されたサーバーフレームワークで、TypeScriptとデコレーターを土台に、モジュール、コントローラー、プロバイダー、依存性注入といった構造を提供します。NestはHTTP処理をプラットフォームアダプターに任せており、既定はExpressです。そのためNestアプリケーションは内部ではExpressサーバーとして動き、Expressのミドルウェアもそのまま使えます。
Expressは小さなAPIやプロトタイプ、構造を自分で設計したいプロジェクトに向いています。NestJSは、長く保守されるREST・GraphQL API、マイクロサービス、リアルタイムサーバーのように、コードとチームが大きくなるほど真価を発揮します。パイプで入力を検証し、ガードで権限を確認でき、Jestベースのテストや、TypeORM・PrismaといったORMとも自然に連携します。
Node.jsをインストールしたら、Expressはnpm install expressと数行のコードですぐに始められます。NestJSはNest CLIでプロジェクトを作り、公式ドキュメントのFirst stepsから順に読むのがおすすめです。先にExpressのリクエスト・レスポンスとミドルウェアを理解しておくと、Nestがその上に何を加えているのかが分かりやすくなります。
機能をモジュールに分け、サービスなどのプロバイダーをコンストラクターで受け取ることで、結合を減らしテストを容易にします。
@Controller、@Get、@Bodyなどのデコレーターでルートと入力を宣言し、パイプ・ガード・インターセプターで共通処理を加えます。
既定のHTTPプラットフォームがExpressなので、そのミドルウェア資産をそのまま使え、必要ならFastifyに切り替えられます。
Express単体では、ルーティングとミドルウェアという小さな核で、好きな構造のサーバーをすばやく作れます。
NestJSもExpressもNode.js上で動きます。nodejs.orgからLTS版をインストールし、nodeとnpmのバージョンが表示されることを確認します。
node --version && npm --versionプロジェクト作成とコード生成を担う公式コマンドラインツールをグローバルにインストールします。Expressだけを使う場合はこの手順の代わりに、プロジェクトフォルダーでnpm install expressを実行します。
npm i -g @nestjs/cli新しいプロジェクトを作成し、ウォッチモードで開発サーバーを起動します。途中でパッケージマネージャーを尋ねられ、完了するとhttp://localhost:3000 で応答を確認できます。
nest new hello-nest && cd hello-nest && npm run start:devnest newで作ったプロジェクトにはこのコントローラーが含まれています。@Controller()がクラスをコントローラーとして登録し、@Get()がルートパスへのGETリクエストをgetHelloメソッドに結び付けます。AppServiceはコンストラクター経由で注入され、src/main.tsがAppModuleからアプリケーションを作成してポート3000で待ち受けます。
src/app.controller.ts
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();
}
}
npm run start:devインストールから NestJS · Express の中心となる考え方まで、6 章で順を追って学びます。
NestJS · Express について質問し、経験を共有し、意見を交わす場所です。
まだディスカッションはありません。最初の話題を始めましょう。
コメント 0件
ログイン · ログインするとコメントできます。
最初のコメントを書いてみましょう。