AWS移行に向けての技術選択(Node.js/NestJS編)

Happy Christmas,Merry Christmas。
こんにちは、okashitayです。
2021年12月25日アイスタイル Advent Calendar 2021を担当させていただきます。

はじめに

現在オンプレで稼働しているアプリケーションのクラウド化を試みています。
古いバージョンの言語で動いていたり、ミドルウェアのサポートが切れている、実装コードが複雑化、ブラックボックス、形骸化されていく…進化していくテクノロジーの恩恵を受け入れることのない状態、そしてビジネスサイドの期待も答えられないまま、前に進むことができなく足踏みしている方々も多いのではないのでしょうか。

今回はAPIを一新してクラウド移行を検討していく途中で得た知見などを記載していきます。

AWS移行に向けて

まずAPIをクラウド移行していく上で、コンテナ環境で開発したアプリケーションをLambdaかFargate(ECS/EKS)へ移行して運用していくと思います。

ベースはLambdaで動く言語を選択し、予算などの状況によりFargate(ESC)もしくはオンプレにのせていく方針で進めます。選択言語はJava,Go,Rust,Python,Node.js,Ruby…

以下の資料をみると利用率の高いPython,Node.jsにするか、処理性能が高いGo,Rustと悩みどころです。

サービス要件を満たせるか、チームの技術スタック、選択された言語の開発者を集めることができるか、将来負債になるリスクはないか、常に技術を追いかけてくれるエンジニアがチームいるかによって選択肢は変わっていきます。

今回はNode.jsに不向きな処理、CPUの負荷が高くなる処理はAPIの処理には含まれないためNode.jsを選択することを検討しています。個人的にはTypeScriptを用いることで、今後フロントエンドとサーバーサイドを効率的に開発運用できる未来が魅力的かなと。

Node.jsを選択した企業の例

・Netflix(2015)

Java(Tomcat),Struts/TilesによるSSRからNode.js(React)に移行、Universal JavaScriptのアーキテクチャを改善し、表示パフォオーマンスの向上と非常に効率的に開発を進めることが出来た点などが上がっています。

・PayPal(2013)

Java(Spring framework)からNode.jsに移行し、少人数でも2倍の速さで構築、30%少ないコードにて記述、40%少ないファイルで構成、アプリケーションパフォーマンスの向上

当時のJavaと現在のJavaとはパフォーマンスは異なりますが、上記2社のTech Blogを見るとNode.jsは、開発速度が上がる、少ないコード量でプロダクトを構築できる点はコードの可読性があがり、バグの混入をできるだけ防ぐことができ、よりよいUXに向かって進むことができます。

フレームワークの選択肢

全てのフレームワークを試せることは難しく、各フレームワークの特徴やGitHubのスター数で判断していきます。

実装するAPIエンドポイントが数本程度ならExpress、APIエンドポイントが多くなりそうでしたらNestJSを選択、今回のAWS移行をしようとしているAPIはエンドポイント数も多くNestJSを導入する方向で検討を進めます。

NestJSについて

スケーラブルなサーバーサイドを構築するためのフレームワーク
・ルーティングが分かりやすく設定できる
・Open API(Swagger)生成
・疎結合に構築、テストコードが実装しやすい
・規模が大きいAPI開発に柔軟に対応できる
・パフォーマンスを求める場合はFastifyへ切り替え
などが特徴としてあげられます。

NestJSトライアル リポジトリ

資料だけを読むより、実際に手を動かして実装を進められるようGitHubにサンプルプロジェクトを用意しました。

Dockerにて簡易にAPI開発環境を構築できるようにしていますので、動かしながら実装していくことができます。

NestJS公式ドキュメントを見つつ、一つ一つ吟味してノウハウやメリット・デメリット気づいた点教えてください。みなさまのより良い技術選定の足がかりになれば幸いです。最後まで見ていただきありがとうございました。それでは、よいお年を〜。

シンプルに闇の戦士です。