はじめに
仕事でちょくよく使ってたNestJS。
上の人が書いたコードを使ってなんとなく使ってた。
実際中身がなんのこっちゃってなっててなんも理解できて無かった。
最近始まった別のプロジェクトでも使うことになってこのままじゃいかんと勉強始めた。
NestJSとは
公式では
効率的で信頼性が高く、拡張性の高いサーバーサイドアプリケーションを構築するための革新的なNode.jsフレームワークです。
と説明されています。
特徴として
- typescriptとの親和性が高い
- メンテナンス性が高い
- OpenAPIのモジュールを提供
- passportとかTypeORMとか使える
- 公式ドキュメントが割と親切(但し英語)(と先輩が言ってた)
等があげられます。
まぁ僕はクソザコイングリッシュなので公式読めないんですけどね。
なのでちょっとずつ訳したり、いろんな人の記事見ながら少しづつ進めていこうかなと思います。
公式introduction&philosophyざっくり日本語訳
introduction
NestJSは効率的で拡張性の高いNode.jsのサーバーサイドアプリケーションを構築するためのフレームワーク。
typescriptを完全サポート。
OOP(オブジェクト指向プログラミング)とFP(関数型プログラミング)とFRP(関数型リアクティブプログラミング)の組み合わせで構成されている。
Expressのような堅牢なHTTPサーバーフレームワークを使用している。
オプションでFastifyも使用できるように設定されている。
Nestは、これらの一般的なNode.jsフレームワーク(Express/Fastify)の上に抽象化レベルを提供していますが、同時にそれらのAPIを開発者に直接公開しています。これにより、開発者は基盤となるプラットフォームで利用可能な無数のサードパーティモジュールを自由に使用することができます。
philosophy
近年、Node.jsのおかげで、JavaScriptはフロントエンドとバックエンドの両方のアプリケーションにおいて、ウェブの「共通語」となりました。
これにより、Angular、React、Vueなどの素晴らしいプロジェクトが生まれ、開発者の生産性を向上させ、高速でテスト可能かつ拡張可能なフロントエンドアプリケーションの作成を可能にしています。しかし、多くの優れたライブラリ、ヘルパー、ツールがNode(とサーバーサイドJavaScript)のために存在する一方で、肝心なアーキテクチャの問題を効果的に解決する物は見当たらない。
Nestは、開発者やチームが高度にテスト可能で、スケーラブルで、疎結合で、メンテナンスが容易なアプリケーションを作成することを可能にする、すぐに使えるアプリケーションアーキテクチャを提供します。
このアーキテクチャはAngularに大きく影響を受けている。
Overview解説
- Controllers
- Providers
- Modules
- Middleware
- Exception filters
- Pipes
- Guards
- Interceptors
- Custom decorators
公式のドキュメントでは上記の各概念の説明がある。
ざっくり説明すると
Controllers、Providers、Modulesは、クライアントからのリクエストに対するルーティングやビジネスロジック、それらをまとめる機能。主な軸はこの三つ。
残りの五つの概念(Middleware、Exception filters、Pipes、Guards、Interceptors)は、リクエストとレスポンスの経路上で様々な役割。
Custom decoratorsは独自のカスタムデコレータを作成に関して。
一個づつ学んでいこー
各項詳細
Controllers
Providers
Modules
NestJsのアーキテクチャ
一旦主な軸のControllers、Providers、Modulesの各解説が済んだので。
これら関係についてざっくりまとめる。
フロントから投げられたリクエストに対する処理をcontrollerに記述。
具体的な処理をproviderに落とし込む。
moduleは、それらの依存関係を取りまとめるイメージ
Middleware
まだ
Exception filters
まだ
Pipes
まだ
Guards
まだ
Interceptors
まだ
Custom decorators
まだ