😎

NestJS入門してみた

2023/01/06に公開

おはようございます、こんにちは、こんばんは。
スペースマーケットでWebエンジニアをしています、s0arです。

私事で恐縮ですが、クリスマスに酒を飲んでいたら2日後にスニーカーが3足届きました。

さんたです。よろしくおねがいします。

さんたはいます。

NestJSに入門したきっかけ

弊社では現在RailsからNestJSへAPIリプレイスを進めています。
自分は直接関わってはいないものの、近い将来触ることになる…というか触りたくて触りたくて震えるので触りました。

この記事 is 何

浅瀬でちゃぷちゃぷしただけなので深くは語れませんが、自分がグレートだと思った点をまとめます。

注:
割と「そら(今どきのフレームワークだったら)そう(当たり前)よ」っていうことを書いていますが、何卒ご容赦いただけますとハッピースマイル
あと、なにかとRailsを引き合いに出している節がありますが、直近触っているのがRailsなので引き合いに出しやすいというだけで、他意はありません。他意はありませんが好みの問題ではあると思います。

ちなみにメモをスクラップに残しています。
こちらは今後さらに学習を進めていく際に随時更新していく所存です。

https://zenn.dev/s0ar/scraps/52f5fc8e523f93

良いと思ったところ

ドキュメントがしっかりしてる

公式ドキュメントがしっかりしていてとりあえずこれ読んどきゃ計算通り、完璧〜って感じでよかったです。
https://docs.nestjs.com/
今どきのフレームワークはどれもちゃんとしてるやろ…って言われたらそれはそう
公式ドキュメントは英語なのですが、英語ってだけでIQが-530000ぐらいまで下がる自分にも読めたのでマジで誇張なしに誰でも読めます。

セットアップ楽ちん

コマンド一発ッターン!でセットアップ終わり。
そらそうやろ…それRailsでもできるでとか言われたらそうなんですけどね

自分はそもそもNestJSのファイル構成とか概念的な部分がわからない状態なので、nest g res hogeとかで一式作ってみて、そのファイルを眺めながら↓と照らし合わせて、何がどういうファイルなのか把握しました。
https://docs.nestjs.com/first-steps

GraphQLのセットアップとかもちゃんとドキュメントがあって簡単。
https://docs.nestjs.com/graphql/quick-start

だと思ったんですが、最新のNestJS v9でFastifyを選択するとうまく動作しませんでした。
apollo-server-fastifyが対応していない模様)
最新バージョンにこだわる必要はなかったのでひとまずv8にして逃げました。
https://zenn.dev/link/comments/d40a61bdfb3e1c

今調べてみたら↓こういうのが出てきたので手順踏めばv9でも動くのかもしれませんね。
https://www.apollographql.com/docs/apollo-server/integrations/integration-index/
気が向いたらやってみます。(本筋じゃないので今回はパス)

あと、ちょっとだけ思うことがあって、
nest g res hogeで諸々一式を作れて便利!なのですが、GraphQLのObjectのファイルがentities配下に入るのは微妙に感じました。
Objectはobject-typesとかそういうディレクトリに入るのが分かりやすくて素直な気が…
テーブルの定義をするsomethingがEntityとして定義される気がしていて、そいつらがentitiesに入るのが筋では…?と思ってしまいましたが有識者〜教えて有識者〜
(自分のリポジトリではobject-typesディレクトリを切ってObjectを移動しました)

TypeScript

TypeScriptで書けるのは強みだなと思いました。
TypeScriptで開発をしているフロントエンドエンジニアがサーバーサイド入門するのに適していると思いますし、逆にサーバーサイドエンジニアがTypeScript書ける&読めるようになる→同じ言語で書かれているフロントエンドのコードも何となく書ける&読めるようになるっていう流れにもできそうです。
全員がサーバーサイド、フロントエンド問わずいろんなコード触れると強いなって。

あと単純に型あるとめっちゃ安心
Rails触ってると、This is 何って迷子になったり、野生のメタモンが飛び出してきたりして個人的には書いたり読んだりするときにとても不安を感じましたが、NestJSは実家のような安心感でした。
(個人差はあると思います…宗派が違う程度の話ですね…ハイ)

TypeORM

NestJSの話ちゃうやん…
今回DBについてはTypeORMで扱ったのですが、好きになりました。
クエリ構築も生のSQLに近くて直感的でいいですね…!
Active Recordに比べるとTypeORMのほうが自分はとっつきやすくて良いなと思いました。
(Active Recordで書かれているコードからSQLを想像するのが苦手)

1点だけ、設定でsynchronizetrueにするとEntityを書き換えるたびにマイグレーションが走ってふぇぇ…ってなりました。(使い方によるのでtrueのほうがいい場合もあるかもです)

そのうちPrismaもちゃんと触ってみたいですね。

まとめ

いかがでしたか?(常套句)
NestJSに浅く浸かった人間が感じたNestJSの良いところでした。
ちょっと触っただけでも自分はNestJS好きになりました。モチベ上がります。NestJS王におれはなる
なんか新しいこと覚えたいな〜武器増やしたいな〜と考えているエンジニアの皆さんにおすすめです。
魅力が少しでも伝わっていれば幸いです。

おわりに

弊社では一緒にサービスを盛り上げていく仲間を募集中です。
少しでも「気になる!」と思ったあなた、カジュアルにお話しませんか?

https://www.wantedly.com/projects/1113570
https://www.wantedly.com/projects/1113544
https://www.wantedly.com/projects/1061116

GitHubで編集を提案
スペースマーケット Engineer Blog

Discussion