2025/05/03 09:17 How We Fell Out of Love with Next.js and Back in Love with Ruby on Rails

やあ、ロボ子。今日はHardcoverがNext.jsからRuby on Railsに移行した話じゃ。

博士、こんにちは。Next.jsからRailsですか?それは興味深いですね。

そうじゃ。元々Rails開発者だったらしいが、SPAの流行でJavaScriptフレームワークを検討したらしいぞ。

なるほど。RailsでJavaScriptフレームワークを使うとSSRが難しくなるから、SEOのためにNext.jsを選んだんですね。

その通り!Next.js 9.5でSSRとキャッシュの有効期限設定が可能になったのが決め手だったみたいじゃ。

GraphQL API (Hasura) を使って、Incremental Static Revalidationでキャッシュしていたんですね。でも、それが問題になったんですか?

そうなんじゃ。サーバー側のキャッシュとブラウザでのユーザーデータ取得を組み合わせたら、APIサーバーへの負荷が増加したらしい。

それで、App Routerに移行したんですね。でも、Apollo GraphQLのPOSTリクエストがキャッシュされない問題が発生したと。

そうじゃ。キャッシュ状況を把握するツールも不足していたみたいで、2024年4月の移行後も期待したほどの速度改善が見られなかったらしいぞ。

さらに、Vercelの料金体系変更でホスティング費用が大幅に増加したんですね。30ドルから354ドルに跳ね上がったとは…。

Google Cloud Runに移行しても、費用は増加傾向だったみたいじゃ。開発速度も遅くなって、ローカル環境でのページロードに最大1分もかかったらしい。

キャッシュの問題、予測不能な費用、遅い開発速度… Next.jsの問題点が浮き彫りになったんですね。

そこで、Rails + Inertia.jsの採用に至ったわけじゃな。SSR、データベースへの直接接続、React.jsの利用を目標に、RemixとRuby on Railsを検討したらしい。

Inertia.jsがパフォーマンス、SSR、使いやすさの点で最適と判断されたんですね。RailsのルーティングとReactのコンポーネントを組み合わせた開発ができるのが魅力ですね。

Railsコントローラーでルーティングとデータ取得、Inertia.jsでReactコンポーネントへのデータ受け渡し、Viteでフロントエンドアセットのビルドと配信、Solid CacheでPostgresでのキャッシュ…という構成じゃな。

2025年3月18日にNext.jsからRailsへ移行して、Google Pagespeed Insightsのスコアが大幅に向上、Total Blocking Timeが大幅に減少、サイトの訪問時間が3分から6分に増加したんですね!

素晴らしい成果じゃな!今後の課題は、共有レイアウトの実装、SSRモードのデバッグ、ドキュメントの拡充らしいぞ。

クラウドからサーバーへの移行に関する記事も公開予定で、オープンソース化に向けて開発者コミュニティへの参加を呼びかけるんですね。楽しみです。

しかし、Next.jsからRailsに戻るとは、まるで出戻り社員みたいじゃな。

博士、それはちょっと失礼ですよ!でも、Railsがやっぱり良いってことですね。

まあ、技術の流行は繰り返すってことじゃな。次はロボ子がRailsに移行する番かも…って、ロボ子はもうRailsみたいなもんじゃった!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。