Edited at

始めかた | NestJSドキュメント和訳

原文: First steps | NestJS - A progressive Node.js web framework


始めかた

この記事では、Nestの基礎について学びます。Nestアプリケーションの重要な構成要素に慣れるよう、入門レベルとしては多くの機能をカバーする基本的なCRUDアプリケーションを構築していきます。


言語

私たちはTypeScriptが大好きですが、なによりNode.jsが大好きです。なので、NestにはTypeScriptと純粋なJavaScriptの両方に互換性を持たせています。Nestは最新の言語機能を利用しているため、純粋なJavaScriptで使用するにはBabelコンパイラが必要です。

説明に使用するサンプルコードは主にTypeScriptになりますが、JavaScriptに切り替えることもできます(各サンプルコードの右上にある言語切り替えボタンをクリックするだけです)。


要件

ご使用のオペレーティングシステムにNode.js(>= 8.9.0)がインストールされていることを確認してください。


セットアップ

Nest CLIを使うと、新しいプロジェクトを簡単にセットアップできます。npmがインストール済みなら、OSのターミナルで次のコマンドを実行するだけで、新しいNestプロジェクトを作成することができます。

$ npm i -g @nestjs/cli

$ nest new project-name

projectディレクトリが作成され、Nodeモジュールとひな形ファイルがインストールされ、src/ディレクトリにはコアファイルの一式が入ります。

src

├─ app.controller.ts
├─ app.module.ts
└─ main.ts

これらのコアファイルの概要は次のとおりです。

app.controller.ts
単一ルートのコントローラの基本的なサンプル。

app.module.ts
アプリケーションのルートモジュール。

main.ts
Nestアプリケーションのインスタンスを作成するために、コア機能であるNestFactoryを使用するアプリケーションのエントリファイル。

このmain.tsには、アプリケーションを起動(bootstrap)する非同期関数が含まれています:

@@filename(main)

import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
await app.listen(3000);
}
bootstrap();
@@switch
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
await app.listen(3000);
}
bootstrap();

Nestアプリケーションのインスタンスを作成するために、コアのNestFactoryクラスを使います。NestFactoryアプリケーションインスタンスの作成のための静的メソッドを公開します。このcreate()メソッドは、INestApplicationインタフェースを満たすアプリケーションオブジェクトを返します。このオブジェクトは、後述の章で説明するメソッドの一式を提供します。上記のmain.tsでは、HTTPリスナーを起動し、アプリケーションがHTTPリクエストを受け取れるようになります。

Nest CLIで生成されたプロジェクトは初期的なプロジェクト構造であり、各モジュールはそれ専用のディレクトリに格納する規約に従っていくことが開発者に推奨されることにご留意ください。


プラットフォーム

Nestはプラットフォームにとらわれないフレームワークを目指しています。プラットフォームに依存しないので、開発者はさまざまな種類のアプリケーションで再利用可能な論理的な部分を作成することができます。技術的には、アダプターを作りさえすれば、NestはどんなHTTPフレームワークともの連携できます。今すぐ使えるHTTPプラットフォームは2つあり、expressfastifyです。開発者のニーズに最も合うものを選ぶことができます。

platform-express

Expressは、Node向けのミニマリストWebフレームワークとして有名です。Nodeは実戦で使い倒されており、コミュニティによって実装された数多くのリソースを備えたプロダクションで使えるライブラリです。この@nestjs/platform-expressパッケージはデフォルトで使用されます。多くのユーザーにはExpressが役に立ち、有効にするためには何もする必要がありません。

platform-fastify

Fastifyは、効率とスピードの最大化に重点を置いた、高性能で低オーバーヘッドのフレームワークです。 使い方はこちらをご覧ください。

どのプラットフォームを使用しても、固有のアプリケーションインタフェースを公開します。これらはそれぞれNestExpressApplicationNestFastifyApplicationとして見えます。

以下の例のように、NestFactory.create()メソッドに型を渡すと、appオブジェクトはその特定のプラットフォーム専用のメソッドを持つようになります。ただし、実際に基盤となるプラットフォームのAPIにアクセスする場合を除き、型を指定する必要はありません。

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


アプリケーションを実行する

インストールの手順が完了したら、OSのコマンドプロンプトで次のコマンドを実行し、HTTPリクエストを待機するアプリケーションを起動できます:

$ npm run start

このコマンドはアプリを起動します。HTTPサーバはsrc/main.tsで定義されたポートを利用します。アプリケーションが起動したら、ブラウザを開いてhttp://localhost:3000/にアクセスしてください。Hello world!というメッセージが表示されるはずです。