🐈

NestJSにざっくり入門してみる

2022/03/21に公開

この記事では、

  • NestJSでの新規プロジェクトを始め方
  • NestJSで開発する際に押さえておきたい基本

について記載しています。
(勉強途中なので徐々に追記していければと思っています。)

この記事は、Udemyの「NestJS入門 TypeScriptではじめるサーバーサイド開発」というコースを受講し、その忘備録として記載したものです。
非常にわかりやすい講座ですので、ぜひ受講してみてください!
https://www.udemy.com/course/nestjs-t/

NestJSの概要

まずNestJSの概要について記載します。
わかりやすい説明が、下記の記事にあったのでそのまま引用させて頂きます🙇‍♂️
https://zenn.dev/kisihara_c/books/nest-officialdoc-jp

Nest (NestJS) は効率的でスケーラブルなNode.jsサーバーサイドアプリケーションを構築する為のフレームワーク。
最新のJavascriptで構築され、Typescriptを完全にサポートしており、にも関わらずピュアJavascriptでコーティング可能。
オブジェクト指向プログラミング、関数プログラミング、リアクティブプログラミングの組み合わせで構成される。

NestJSとは

  • Node.js上で動作するオープンソースのバックエンド開発フレームワーク
  • TypeScriptで作られている
  • Expressをコアにして作られている
  • Angularにインスパイアされている

NestJSのメリット

  • 型の恩恵を得ることができる
  • Expressの機能やライブラリを使うことができる
  • Nest CLIを使ってプロジェクトやファイルのテンプレートを生成できる
  • テストフレームワークが標準で用意されている
  • 拡張性が高い

NestJSのデメリット

  • Rails、Laravel、Djangoなどと比較すると利用ユーザーが少なく、情報が少ない
  • 公式ドキュメントが日本語に未対応
    と思ってたら、日本語翻訳してくれてる神的な人がいた。。🙏
    https://zenn.dev/kisihara_c/books/nest-officialdoc-jp

NestJSプロジェクトの始め方

Nest CLIをインストールする

$ npm i -g @nestjs/cli

Nest CLIインストールの確認

$ which nest

プロジェクトを新規作成

$ nest new project-name

使用するパッケージ管理ツールを聞かれるので選択する。(今回はyarnを選択)

? Which package manager would you ❤️  to use?
  npmyarn
  pnpm

インストールが始まるので、しばらく待ちます。

? Which package manager would you ❤️  to use? yarn
▹▹▹▸▹ Installation in progress... ☕

下記が表示されればインストール完了です。

🚀  Successfully created project project-name
👉  Get started with the following commands:

$ cd project-name
$ yarn run start


                          Thanks for installing Nest 🙏
                 Please consider donating to our open collective
                        to help us maintain this package.


               🍷  Donate: https://opencollective.com/nest

ディレクトリを移動して、yarn startを実行します。

$ cd project-name
$ yarn start

NestJSプロジェクトの基本構造

src/配下のコアファイルは以下の通り。

.
├── app.controller.spec.ts → 単一経路を持つ基本的なコントローラ
├── app.controller.ts → コントローラのユニットテスト
├── app.module.ts → アプリケーションのルートモジュール
├── app.service.ts → 単一のメソッドを持つ基本的なサービス
└── main.ts → プロジェクトのエントリーポイント

NestJSの基本要素

NestJSにおける最もコアとなる要素は下記の3つです。

  • Module
  • Controller
  • Service

→ 原則これら3つの要素を使用して1つの機能を作成します。

Module

  • 関連するContorollerやServiceなどをまとめて、NestJSに登録する
  • NestJSアプリケーションには必ず1つ以上のルートモジュールと、0個以上のFeatureモジュールが必要になる

Controller

  • クライアントからのリクエストを受け付け、クライアントにレスポンスを返す
    ルーティングの機能を担う
  • 特定のパスとControllerが紐付けられる(例:/usersとUsersController)
  • HTTPメソッドとパスを指定したメソッド(ハンドラーとも言われる)を定義する

Service

  • ビジネスロジックを定義する
  • Controllerから呼び出すことで、ユースケースを実現する
    → Controllerにビジネスロジックを書いてもプログラムは動作しますが、Controllerの役割はルーティングです。責務を分割することで、保守性・拡張性などが上がります。

NestJSの開発の流れ

NestJSの基本的な開発の流れとしては、下記のようになります。

  • FeatureサービスとFeatureコントローラを実装する
  • 実装したものをFeatureモジュールに登録する
  • Featureモジュールをルートモジュールに登録する

ルートモジュールは開発した機能を集約してアプリケーションに登録する役割を持ちます。
(つまり、ルートモジュールに登録された機能のみがアプリケーションで使用できます)

図で表すと下記のようなイメージです。

アプリケーションの機能が増えると、赤線で囲っている3つの要素

  • Featureモジュール
  • Featureサービス
  • Featureコントローラ

が複数できることになります。

まとめ

以下の内容について説明しました。

  • NestJSでの新規プロジェクトを始め方
  • NestJSで開発する際に押さえておきたい基本

NestJSの具体的な実装方法については、別の記事でまとめる予定です。
ご覧いただきありがとうございました。

Discussion