Web制作、Web開発の歩き方

初心者のためのNestJS入門

第1話:なぜNestJSを使うのか

(最終更新日:2023.07.17)

NestJSのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「なんで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