Chapter 02

overview-firststeps

kisihara.c
kisihara.c
2021.01.25に更新

First steps

このチャプターでは、Nestの最も重要な基礎を学ぶ。入門レベルの機能をカバーしたシンプルなCRUDアプリケーションの作成により、Nestアプリケーションの本質的な構成に慣れ親しむ。

言語

当フレームワークはTypeScriptへの恋に落ちている。しかしそれにもましてNode.jsも愛している。よってNestはTypeScriptとJavaScriptを両立させている。Nestは言語の最新機能に強みを持つ。そのため、バニラJavaScriptで動かすにはBabel compilerを用いる必要がある。
サンプルコードはTypeScript製だが、公式のドキュメントでは右上のボタンを押せばどのサンプルもバニラJavaScriptのコードに変換可能。

必要条件

Node.js(10.13.0以上)のインストールが必要。

導入

セットアップは簡単で、「NestCLI」を使う。npmがあれば、ターミナルから以下のコマンドでインストールする。

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

projectディレクトリ、nodeモジュールといくつかのボイラープレートファイル、基本ファイル数点の入ったsrc/ディレクトリが作成される。

src
 app.controller.ts
 app.controller.spec.ts
 app.module.ts
 app.service.ts
 main.ts

コアファイルの概要は以下の通り。

app.controller.ts 簡便なシングルルート用コントローラ
app.controller.spec.ts ユニットテスト用コントローラ
app.module.ts アプリケーションのルートモジュール
app.service.ts シングルメソッドの簡便なサービス
main.ts NestFactory機能を使いNest アプリケーションインスタンスを作る為のファイル

main.tsはasync関数を持ち、独力(靴紐を持つように)で動く。

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クラスを使う。その際NestFactoryクラスではいくつかの静的関数が利用可能。create()メソッドはアプリケーションオブジェクトを返し、INestApllicationインターフェイスを持つ。此のオブジェクトは次回以降説明する関数のセットを提供する。上記のmain.tsのコードでは、HTTPリクエストを待つ簡単なHTTPリスナーを作っている。
NestCLIで組み立てられたプロジェクトは、自身のプロジェクトのそれぞれのモジュールを維持しやすいような初期構造になっている。

プラットフォーム

Nestはplatform-agnostic(プラットフォーム不可知)なフレームワークを目指している。プラットフォームの独立性は使い回しやすいロジックに繋がり、開発者は複数のアプリケーションを横断してその利点を享受できる。技術的には、Nestは一度作られたどんなNodeのHTTPフレームワークとも動く。特にexpress・fastifyは基本セットとして準備済みで、必要に応じて使い分ける事ができる。

platform-express Expressはよく知られたNodeのマイクロフレームワーク。 多くの実戦をくぐり抜け、コミュニティと潤沢なリソースによって、すぐにでも使える沢山のライブラリがある。Nestのデフォルト設定では@nestjs/platform-express が使用される。多くのユーザはExpressを使用するし、その為の手間は不要である。
platform-fastify Fastifyはハイパフォーマンスでオーバーヘッドの少ない最高効率と最高速度を提供するフレームワーク。使い方はこちら
---- ----

どのプラットフォームと使われても、nestはそれ自体がアプリケーションインターフェイスを持つ。上記の例だと、NestExpressApplicationNestFastifyApplicationとなる。
以下の例のように、NestFactory.create()メソッドに型を渡すと、appオブジェクトは特定のプラットフォーム専用のメソッドを手に入れる。ただし、実際に基礎となるプラットフォームAPIにアクセスしたい場合を除き、型を指定する必要はない。

const app = await NestFactory.create<NestExpressApplication>(AppModule);

アプリケーションを起動する

インストールが完了すれば、以下のコマンドでHTTPリクエストを待つアプリケーションを起動できる。

$ npm run start

このコマンドを使用すれば、src/main.tsで定義されたポートで待つHTTPサーバーアプリケーションが起動する。ブラウザが開きhttp://localhost:3000/を表示する。Hello worldが見えるはずだ。