初心者のためのNestJS入門
第1話:なぜNestJSを使うのか
(最終更新日:2023.07.17)

(絵が小さい場合はスマホを横に)
「なんでNestJSを使うの?」
Laravel、Ruby on Rails、Djangoとフルスタック、バックエンド、どちらでも使える充実したフレームワークがあるのに
「なんでわざわざNestJSを使うの?」という疑問が浮かぶ人もいるだろう。
NestJSはNode.jsの中では有名なフレームワークだが、バックエンドフレームワークとしてはまだまだマイナーな部類に入る。
まずはその疑問に回答した上で、NestJSがどんなものかを紹介したいと思う。
1.NestJSを使う意義
NestJSを使う意義は、現在主流となっているReactやVue、Svelteと同じTypeScriptで書けるということにある。
バックエンドでもフロントエンドと同じTypeScriptが使えるということが非常に貴重だ。
例えば、人数やサービスの都合でフロントエンドとバックエンド、両方を受け持つメンバーが出たとする。
その際に、フロントエンドはReactのTypeScript、バックエンドはDjangoのPythonと使う言語が異なると、
頭を切り替えて望まなくてはならない。実際、二つを掛け持ってみて、
文法やライブラリ、関数の違いが効き、生産性が落ちるという経験は筆者自身もある。
同じ言語、文法で書けるというのは、両方やる人にとって大きなメリットになることは間違いない。
もしくは、バックエンドのメンバーが足りず、
ReactやSvelteなどでTypeScriptは書けるというメンバーにNestJSを担当してもらうということもできるだろう。
NestJSの大元のNode.jsの中に組み込まれているV8エンジンはC++で書かれていて、サーバー部分は速いと言われている。
しかし、他のスクリプト言語でも一部CやC++の力を借りて高速化の工夫があったりと一概に速いとは言えない。
また、Node.jsは非同期処理、平行処理で速く裁けると言われていたが、他のフレームワークでも平行処理に対応してきている。
例えばDjangoは、ASGIという非同期処理に対応したServer Gateway Interfaceに対応し、速くなってきている。
結局スクリプト言語同士では、原理的には大きな差が生まれない。
処理速度は多少は速いかもしれないが、それで選ぶという訳ではないだろう。
結局のところ、フロントエンドと同じTypeScriptで書けるというのが、NestJSを使う意義と言える。
フロントもバックも両方やる
2.NestJSの始め方、インストール方法
ここでは、仮想環境を使わない方法で記述する。Node.jsはすでにインストールされているものとする。
Windowsならコマンドプロンプト、MacならTerminalで「npm i -g @nestjs/cli」
と命令してインストールする。
無事インストールできたら「nest new プロジェクト名」でプロジェクトを作成できる。
プロジェクトディレクトリに移動して「npm run start」と命令すれば、ローカル上でサーバーが立ち上がる。
localhost:3000にアクセスして、起動を確認しよう。
非常に簡素な「Hello, World!」が見られるはずだ。ReactやDjangoに比べて、デフォルトのスタートアップの簡素さにはビックリするだろう。
これには理由があって、NestJSはバックエンドのAPIとしてのサーバーとして使うことに特化している。
だから、フロントの見た目の部分はこだわっていない。こだわる必要がない。
もちろん、フロント側をNestJSで作ることもできるのだが、フレームワークの特性や時代の流れから考えても、
単純にJSONの送受信を行うAPIサーバーとして使うと考えていいだろう。
Hello Worldが出たら起動成功
3.NestJSの全体像
第1話の最後にNestJSの全体像を示す。
NestJSはAPIサーバーとして機能する。エンドポイントを設定しフロントエンドに必要なデータを送る、
フロントエンドから来た命令をデータベースに反映するというのが大きな役割になる。
下記では、そこはざっくりrequest, responseという表現にしている。
NestJS内部では、まずmainの部分でポートの設定やNestJS本体のimportを行っている。
appモジュールでDBとの接続、各モジュールの取りまとめを行い、
各モジュールではDBとのやり取りのルール、controllerでget, postなどの設定、DBへの命令、
serviceでデータ処理を記述する。
NestJSの機能を大まかに説明するとこんな感じである。
次回からは各モジュールの役割についてもう少し詳しく説明しよう。
NestJSの全体像
▼参考図書、サイト
「NestJS公式ドキュメントver7日本語訳」 Zenn
「Node.jsフレームワーク超入門」 掌田津耶乃 秀和システム
「NestJS入門 TypeScriptではじめるサーバーサイド開発」 Udemy Yu Shinozaki