NestJS入門してみた
おはようございます、こんにちは、こんばんは。
スペースマーケットでWebエンジニアをしています、s0arです。
私事で恐縮ですが、クリスマスに酒を飲んでいたら2日後にスニーカーが3足届きました。
さんたです。よろしくおねがいします。
さんたはいます。
NestJSに入門したきっかけ
弊社では現在RailsからNestJSへAPIリプレイスを進めています。
自分は直接関わってはいないものの、近い将来触ることになる…というか触りたくて触りたくて震えるので触りました。
この記事 is 何
浅瀬でちゃぷちゃぷしただけなので深くは語れませんが、自分がグレートだと思った点をまとめます。
注:
割と「そら(今どきのフレームワークだったら)そう(当たり前)よ」っていうことを書いていますが、何卒ご容赦いただけますとハッピースマイル
あと、なにかとRailsを引き合いに出している節がありますが、直近触っているのがRailsなので引き合いに出しやすいというだけで、他意はありません。他意はありませんが好みの問題ではあると思います。
ちなみにメモをスクラップに残しています。
こちらは今後さらに学習を進めていく際に随時更新していく所存です。
良いと思ったところ
ドキュメントがしっかりしてる
公式ドキュメントがしっかりしていてとりあえずこれ読んどきゃ計算通り、完璧〜って感じでよかったです。
公式ドキュメントは英語なのですが、英語ってだけでIQが-530000ぐらいまで下がる自分にも読めたのでマジで誇張なしに誰でも読めます。
セットアップ楽ちん
コマンド一発ッターン!でセットアップ終わり。
そらそうやろ…それRailsでもできるでとか言われたらそうなんですけどね
自分はそもそもNestJSのファイル構成とか概念的な部分がわからない状態なので、nest g res hoge
とかで一式作ってみて、そのファイルを眺めながら↓と照らし合わせて、何がどういうファイルなのか把握しました。
GraphQLのセットアップとかもちゃんとドキュメントがあって簡単。
だと思ったんですが、最新のNestJS v9でFastifyを選択するとうまく動作しませんでした。
(apollo-server-fastify
が対応していない模様)
最新バージョンにこだわる必要はなかったのでひとまずv8にして逃げました。
今調べてみたら↓こういうのが出てきたので手順踏めばv9でも動くのかもしれませんね。
気が向いたらやってみます。(本筋じゃないので今回はパス)あと、ちょっとだけ思うことがあって、
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点だけ、設定でsynchronize
をtrue
にするとEntityを書き換えるたびにマイグレーションが走ってふぇぇ…ってなりました。(使い方によるのでtrue
のほうがいい場合もあるかもです)
そのうちPrismaもちゃんと触ってみたいですね。
まとめ
いかがでしたか?(常套句)
NestJSに浅く浸かった人間が感じたNestJSの良いところでした。
ちょっと触っただけでも自分はNestJS好きになりました。モチベ上がります。NestJS王におれはなる
なんか新しいこと覚えたいな〜武器増やしたいな〜と考えているエンジニアの皆さんにおすすめです。
魅力が少しでも伝わっていれば幸いです。
おわりに
弊社では一緒にサービスを盛り上げていく仲間を募集中です。
少しでも「気になる!」と思ったあなた、カジュアルにお話しませんか?
スペースを簡単に貸し借りできるサービス「スペースマーケット」のエンジニアによる公式ブログです。 弊社採用技術スタックはこちら -> whatweuse.dev/company/spacemarket
Discussion