Expressでのチーム開発が辛いあなたのためのNestJS
この記事は mohikanz Advent Calendar 2019の3日目です
昨日は gimKondo さんによる全人類が読むべき ITエンジニアの雑談Slack発 オンライン読書会 でした。
僕の記事は読まなくてもまっとうに生きていけますが、読んでくれると嬉しいです、
今年の2月に現職に転職し、プロジェクトの立ち上げ以来お世話になっている Framework: NestJS についてのご紹介
転職についてはこちらをどうぞ ↓
背景
- わたし
- チーム
- 開発者 3人のうち2人がひよこ(私を含む)
- 途中で、フロントエンド寄りのスキルのメンバーがジョイン
- プロダクト
- 新規Webサービス
- フロントエンドは Vue.js + TypeScript
NestJSとは
- TypeScript で記述された Node.js サーバーサイドアプリケーションのための フレームワーク
- DI(依存性注入) の思想から、オブジェクト同士の依存あとからを解決するため、オブジェクト間を疎結合にし、テストに優れる
- 実装内部のCoreな部分は Express であり、Express に明確な指針を与えてくれる
よく Angular ライクなと紹介されますが(Angularに強い影響を受けている)、 当方 Angular わからないマンでもなんとか使えてるので、Angular好きな人のためのフレームワークってわけでもないです。(DIを強烈に信奉しているわけでもない)
NestJSの選定理由
- インターフェースの型をフロントエンドとある程度合わせたい
- サーバーサイド及びフロントエンドのコードを互いに流用できる(と思った)
- 開発経験豊富なベテランやExpressの開発になれた人はおらず、強烈な指針がないとすぐに負債化するのは目に見えていた
- 流行りそう
実際にNestJSを使ってみて何がよかったか
選定理由の3番目について一番利点を感じていて、開発経験が浅く、秀でたベテランエンジニアがいないチームでもある程度秩序をもった状態を維持できていることはとてもありがたく思ってます。
NestJSでは、Postされる値のバリデーションやレスポンスの整形などプレゼンテーション層は Controller
に、ユースケースは Service
に、にとそれぞれの責務がはっきりとしているため、一つ見本的なコードがあれば、触ったことがない人でも割と簡単に新しいエンドポイントを実装する事ができます。実際に、途中で加わったメンバーも(それなりの力量はあったものの)かなり早い段階でサーバーサイドの実装ができるようになっていました。
また、Expressに秩序を与えるのと同時に、サーバーサイドフレームワークとして本質的ではないもの(DBへの接続など)に関してコアな部分は依存を持たないため、使用するライブラリーをかなり自由に選ぶことが可能です。
よくなかったこと
- TypeORMに深く入りすぎて死
DIに対する理解が浅かったためですが、、、絶賛依存関係を解決しながら実装を薄くするリファクタを敢行中。
上記にもありますが、NestJS にとって選択肢の一つではあるけども必ずしも使わないといけないわけでもないので、程よいお付き合いの仕方を考えたいです…
TypeORM の Repository を直で使うと死ぬ #nestjs_meetup
— たすく@なんでもするフロントエンドより (@TaskKAWAHARA) 2019年11月29日
あと人類に DI コンテナは早すぎるかもしれない
Why I Don't Use a DI Container | Node.js w/ TypeScript | Khalil Stemmler
もっとちゃんと知りたい人へ
つらつら書いてきたけど、下記の @potato4d さんのスライドがとてもわかり易く素敵すぎです。
これ読めば上のやつ読む必要ないです。
NestJS meetup Tokyo Opening Talk / What is NestJS? #nestjs_meetup - Speaker Deck @potato4d さん
他にも機能はいろいろありますが、フロントエンド−バックエンドを TypeScript で開発するメリットがあり、なおかつ指針を示してくれる NestJS が、 日本でもよりユーザーが増えていけばいいなと思います。
明日は異世界転生者のもーりーさんです