🏃

Next.jsを採用するのをやめた理由・背景

に公開

少し前にReact2ShellというReactのRCEの脆弱性によって、Next.jsを使っているアプリケーションが影響を受けましたが、実はそれ以前から自分は何かウェブアプリケーションを開発するときにNext.jsを採用するのをやめています。

Next.jsを採用するのをやめたのには、ちょっと微妙な理由がいくつかあったので特に何か書く事はしなかったんですが、興味ある人もいるかもしれないので書いておこうと思います。簡単に書くと以下の三つの事柄があってNext.jsを採用するのをやめました。

  • ViteやVite系のフレームワークの方がDXがよかった
  • Next.jsの作者のGuillermo Rauchの倫理観が心配になった
  • RSCのコトがよく理解できなかったし、好みから外れていた

ViteやVite系のフレームワークの方がDXがよかった

技術的な理由では一番これが大きかったんですが、Vite(やVite系のフレームワーク)とNext.jsを比べるとViteの方がDX(開発者体験)が明らかに優れているなという印象がありました。というのもViteの場合は開発時はネイティブESMを使って高速に開発サーバを立ち上げられるのに対して、Next.jsはコード変更するたびにバンドルしなおしています。プロジェクトのコードの量が多くなるとVite系のフレームワークを使った方が明らかにDXが良いし開発効率も良いと結論づけました。

Viteは既存のプロジェクト内で間接的に導入している事も多くて、テストライブラリに関してもJestだとESMサポートが薄いので、代わりにテスト系のライブラリは内部でViteを使っているVitestをすでに導入している事が多かったのでViteにはすでに親近感がありました。

当時はRemixがViteをサポートし始めたので、もしかしてNext.jsも将来的にViteに乗っかるという可能性もあるんではないかと思ったんですが、調べた所どうやらそれは無さそうだというのもあります。

Guillermo Rauchの倫理観が心配になった

Next.jsのオリジナルの作者は、VercelのCEOでもあるGuillermo Rauchです。ある時この方のXの発言を見て自分がそれに引いてしまったというのがあります。

このツイートは普通に批判されまくってるんですが、興味ある方は調べてみてください。

RSCのコトがよく理解できなかったし、好みから外れていた

これは、言うのが微妙に憚られる消極的な事柄になります。Next.jsがReactのRSC(React Server Component)やServer Actionを非常に早い時期にサポートしはじめたころに、詳細を理解しようと思って調べていたりしたんですが、概念レベルの話はわかったんですが技術的な詳細はあまりよくわかりませんでした。

React2Shellが発覚した後になってRSC Explorerという、どういうペイロードがサーバに飛ぶのかを細かく教えてくれるツールが公開されたりもしたんですが、Next.jsがRSCをサポートし始めた頃はなく、ReactチームはRSCで使われるFlightプロトコルに関する技術的な詳細をドキュメントにあまり公開していなかったように思います。

また、RSCやServer Actionsを導入するときに使われるバンドラ周りの処理が魔術的に見えて自分の好みから外れていたので「なんかやだな〜」ぐらいの感覚があったという背景もあります。ただこれは採用するのをやめた理由というよりかは、RSCやServer Actionsにあまり魅力を感じなかったのでそれをサポートしているNext.jsを採用しなくても別にいいやという気分になった背景になります。

終わりに

Next.jsを採用するのをやめた背景は以上になります。

じゃあNext.jsの代わりに何を使うのかというと、とりあえず今のところは、普通のSPAならVite+React、SSRが必要な場合はVite+React Routerを使うことにしています。これ以外にも2026年はReactを捨てたRemix3も出るのでその辺りの動きも気になりますね。そんじゃーね!

Discussion