■ 1. 記事の背景と概要
- anatooによる2026年1月8日公開の記事である
- 少し前にReact2ShellというReactのRCEの脆弱性によってNext.jsを使っているアプリケーションが影響を受けた
- 実はそれ以前から自分は何かウェブアプリケーションを開発するときにNext.jsを採用するのをやめている
- Next.jsを採用するのをやめたのにはちょっと微妙な理由がいくつかあったので特に何か書く事はしなかった
- 興味ある人もいるかもしれないので書いておこうと思う
- 簡単に書くと以下の三つの事柄があってNext.jsを採用するのをやめた
■ 2. 理由1: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に乗っかるという可能性もあるんではないかと思った
- 調べた所どうやらそれは無さそうだというのもある
■ 3. 理由2:Guillermo Rauchの倫理観が心配になった
- Next.jsのオリジナルの作者はVercelのCEOでもあるGuillermo Rauchである
- ある時この方のXの発言を見て自分がそれに引いてしまったというのがある
- このツイートは普通に批判されまくっている
- 興味ある方は調べてみてください
■ 4. 理由3: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を採用しなくても別にいいやという気分になった背景になる
■ 5. 結論と代替案
- Next.jsを採用するのをやめた背景は以上になる
- じゃあNext.jsの代わりに何を使うのかというととりあえず今のところは普通のSPAならVite+Reactを使う
- SSRが必要な場合はReact Routerを使うことにしている
- これ以外にも2026年はReactを捨てたRemix3も出るのでその辺りの動きも気になる