これは Architectural Decision Record ( ADR) の下書きです。Official ではありません。
そして、NestJS 以外に他 1 つは実装を確認したい。念のために。
Status
- 提案済み
- 承認済み
- 破棄
Context
- 私たちは Product の構築を進めている。このドキュメントでは、私たちが選択した最終的な Framework とその背後にある理由を説明することを目的としている。
- 技術選定の前提条件は以下の通りである。
- 少人数で適切なスピード感で開発できる必要がある。
- メンバーの共通の技術スタックである必要がある。
- (1)(2)を満たしつつ、アプリケーションの複雑さを将来に持ち込まない構成である必要がある。
- (1) は Framework で解決できる。(2) は TypeScript になる。(3) はドメイン駆動設計で進めており、必要に応じて各ドメインを module として分割できる構成が必要になる。
- (1)(2)(3) を満たす TypeScript の Framework を選定する。以下が 2024/05/02 時点での候補である。
No. | Framework | Description | GitHub Star | Boilerplate | Case Study |
---|---|---|---|---|---|
1 | NestJS | Node.jsのためのフル機能のフレームワークです。Angularの影響を受けており、Angularのような構造化されたアーキテクチャ、依存性注入、およびTypescriptを使用しています。NestJSは、大規模なエンタープライズアプリケーションを構築するためのツールとして設計されており、拡張性とテスタビリティを重視しています。 | 64,500 | yes - REST - GraphQL |
- Ubie - KAKEHASHI |
2 | FeatherJS | リアルタイムWebアプリケーションを構築するためのツールキットです。 | 14,900 | no | N/A |
3 | LoopbackJS | Node.jsで構築されたオープンソースのフレームワークで、APIを素早く構築し、サービスとして公開するためのツールです。LoopBackは、RESTful APIを簡単に作成するための強力な機能を提供し、データベースや外部サービスとの連携も容易に行えます。 | 4,800 |
yes controller only |
N/A |
4 | AdonisJS | Node.jsでWebアプリケーションを構築するためのMVC(Model-View-Controller)フレームワークです。AdonisJSは、Express.jsにインスパイアされており、豊富な機能セットや強力なORM(Object-Relational Mapping)であるLucid ORMを提供しています。 | 15,500 | no | N/A |
5 | Ts.ED | Ts.ED は、Express/Koa.js の上にある Node.js および TypeScript フレームワークです。 Ts.ED は、TypeScript (または ES6) でアプリケーションを作成するための Express/Koa の上にあるフレームワークです。コードを読みやすくし、エラーを少なくするための多くのデコレータとガイドラインが提供されます。 | 2,700 | no | N/A |
6 | ExpressoTS | 保守性の高いサーバー側アプリケーションを作成するための、開発者に優しい Node.js フレームワークです。 | 1,600 | yes | N/A |
Decision
- NestJS を利用する。
- 要件 (1)(2)(3) に合致する。日本国内での活用事例も多く、ナレッジとして利用できる。
Consequences
- 学習曲線。NestJS を習得し実装するまでの学習曲線が必要になる。これは個人に依存する。しかし、より軽量な Framework に比べると、機能も多く学ぶべきことが多い。
- 複雑さ。Boilerplate を使用した場合、Layered Architecture となるため、構造的な複雑さを持ち込むことになる。
Compliance
- NestJS CLI を使用して Boilerplate を活用しているか Code Review で確認する。
Notes
- Author: @danny-yamamoto