2022年4月11日月曜日

Next.js,、Nuxt.jsが次世代のRailsになるという話についてどう思いますか?

 



まず2020年の今後のサーバーサイド側がどうなるのか説明させてください。

今まではRuby on RailsやDjangoやLaravelなどのフルスタックフレームワークで構築するのが流行りでした。そのため、ORMなどの標準のライブラリや「設定よりも規約」に従うことで技術者のレベルと設計レベルの統一するメリットがありました。

しかし、Railsの人気に陰りが出てきたように時代が少しづつフルスタックよりもマイクロフレームワークに押されるようになりました。

理由としてインフラAPI化があります。例えば、認証にしてもAWSとGCPに認証基盤のサービスが存在して、さらにCloud FirestoreのようにNOSQLベースのアプリケーションが出てきています。今まではRailsのレールに乗って進めていくという開発スタイルがインフラのマネージドサービスを利用して高速に開発するスタイルに急激に切り替わっています。

そうなってくるとフルスタックフレームワーク機能では不要な機能がどんどん出てきます。また一つの重厚なフレームワークを選択してしまうと、学習コストがそれなりに高くなるのでインフラコストよりも人件費と時間がもったいなくなります。そのためフルスタックよりも学習コストが低いマイクロフレームワークの方にメリットが上がってきます。

次にフロントエンド側に業務ロジックが移ってきています。例えば、加工済みのデータをサーバサイドからフロントエンドに渡していましたが最近これは微妙だなと思いました。フロントでどのような情報を加工して使いたいかはフロントが知っていることなのでいちいち遠いサーバサイドでやるとコミュニケーションコストがかかります。RESTではデータを加工することに意味はありましたが、GraphQLのクエリーで取得する場合は加工されていない方がフロントでは便利です。

やっとここで本題のNext.jsやNuxt.jsの話になります。

これらのフレームワークはSPAが非常に強いマイクロフレームワークです。SPAは流行というレベルを超えて定着しました。今までフルスタックフレームワークとSPAの組み合わせはクライアントレンダリングがどうのこうのやSEOなどで事情で結構めんどくさかった領域です。ここを最初からNext.jsやNuxt.jsを使用することでその手間を省けます。またNext.jsやNuxt.jsからもSQLを発行することが出来ます。

(とはいえActiveRecordなどの優れたORMがないので、その辺がNode.js系の弱点になっています。JavaScript自体がオブジェクト指向で書くのに優れていないので、別の解決策が必要かもしれません。)

つまりサービス初期はNext.jsとマネージドサービスの組み合わせで頑張り、サービスがスケールするタイミングで例えば決済や広告配信などのシステムをGoなどで作っていくと疎結合なサービスが作られていきます。

まとめるとSPAで構築していくなら最初からNext.jsやNuxt.jsで構築していったほうが、後から導入するよりも楽なので一部のサービスでは置き換わっていくと思います。ただし、フレームワークだけの事情だけを考えるのではなく、IaaSのマネージドサービスをかけ合わせると真価を発揮するでしょう。

0 コメント:

コメントを投稿