NestJSにざっくり入門してみる
この記事では、
- NestJSでの新規プロジェクトを始め方
- NestJSで開発する際に押さえておきたい基本
について記載しています。
(勉強途中なので徐々に追記していければと思っています。)
この記事は、Udemyの「NestJS入門 TypeScriptではじめるサーバーサイド開発」というコースを受講し、その忘備録として記載したものです。
非常にわかりやすい講座ですので、ぜひ受講してみてください!
NestJSの概要
まずNestJSの概要について記載します。
わかりやすい説明が、下記の記事にあったのでそのまま引用させて頂きます🙇♂️
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?
npm
❯ yarn
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