First steps | NestJS 【翻訳】

## NestJS公式ドキュメント翻訳

[NestJS公式ドキュメント翻訳](https://qiita.com/mana-vv/items/a658051a5183183c3e50)

## 原文

[First steps | NestJS - A progressive Node.js web framework](https://docs.nestjs.com/first-steps)

## First steps

これからNestの**基礎**を学びます。Nestアプリケーションの重要な構成要素を理解するために、入門レベルで多くの範囲をカバーする基本的なCRUDアプリケーションを構築します。

### 言語

私たちは[TypeScript](http://www.typescriptlang.org/)が大好きですが、何よりも[Node.js](https://nodejs.org/ja/)が大好きです。NestはTypeScriptと**純粋なJavaScript**の両方と互換性があります。 Nestは最新の言語機能を利用しているため、普通のJavaScriptで使用するには[Babel](https://babeljs.io/)コンパイラが必要です。

### 前提

[Node.js](https://nodejs.org/ja/)(> = 8.9.0)がOSにインストールされていることを確認してください。

### セットアップ

[Nest CLI](https://docs.nestjs.com/cli/overview)を使用すると、新しいプロジェクトを簡単に作成することができます。[npm](https://www.npmjs.com/)をインストールすると、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`    | コア関数`NestFactory`を使用してNestアプリケーションインスタンスを作成するアプリケーションのエントリファイル。|

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

```typescript
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()`メソッドは`INestApplication`インターフェイスを満たすアプリケーションオブジェクトを返します。このオブジェクトは、今後の章で説明する一連のメソッドを提供します。上の`main.ts`の例では、HTTPリスナーを起動するだけでアプリケーションがHTTPリクエストを受け取れるようにします。

Nest CLIでスキャフォールドされたプロジェクトは、初期的なプロジェクト構造で構成され、開発者は各モジュールを専用ディレクトリに保持するという規則を守ることが推奨されます。

### プラットフォーム

Nestはプラットフォームに依存しないフレームワークを目指しています。プラットフォームに依存しないため、開発者は複数の異なるタイプのアプリケーションで利用できる再利用可能な論理パーツを作成することができます。技術的にはアダプターを作成すれば、Nestは任意のNode HTTPフレームワークを利用できます。デフォルトでサポートされているHTTPプラットフォームは、`express`と`fastify`の2つです。ニーズに最適なものを選択できます。

| | |
|-----------|:-------------|
| `platform-express`      | Expressは[Node](https://expressjs.com/)用の有名なミニマムなWebフレームワークです。コミュニティによって実装された多くのリソースを備えた、実際によく使われる成熟したライブラリです。`@nestjs/platform-express`パッケージはデフォルトで使用されます。多くのユーザーにとってExpressは十分であり、それを有効にするために何もする必要はありません。 |
| `platform-fastify`    | [Fastify](https://www.fastify.io/)は最大の効率と速度を提供することに重点を置いた高性能で低オーバーヘッドのフレームワークです。使用方法は[こちら](https://docs.nestjs.com/techniques/performance)をご覧ください。|

どのプラットフォームを使用する場合でも、独自のアプリケーションインターフェイスを公開します。これらは、それぞれ`NestExpressApplication`および`NestFastifyApplication`として表示されます。

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

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

### アプリケーションの実行

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

```
$ npm run start
```

このコマンドでアプリが起動し、HTTPサーバは`src/main.ts`ファイルで定義されたポートで待機します。アプリケーションが実行されたら、ブラウザを開いて`http://localhost:3000/`に移動してください。`Hello World！`のメッセージが表示されるはずです。