header background image

GatsbyJSで作ったホームページをNext.jsへ書き換えた

2022年11月5日☕️☕️ 6 min read

感想

3年半前、Next.jsのメンテナはあまりコミュニティのフィードバックを受け入れず、親切ではありませんでした。ドキュメントも充実ではなく、問題があったらソースコードを読む必要がありました。その上、Next.jsがデフォルトでSSR(サーバーサイドレンダリング)しているので、サポートしていないライブラリが多く、FOUC(Flash of unstyled content)問題が深刻でした。例えば有名なmaterial-uiも開発者が簡単にNext.jsと一緒にうまく使えず、自分がNext.jsとmaterial-uiをSSRできるように、ライブラリも作りました。 https://github.com/thundermiracle/next-mui-helper

その時、GatsbyJSに出会いました。Jamstack、GraphQL、綺麗なドキュメントサイト、大量なStarterプロジェクト、すごく書きやすい導入しやすいプラグインエコシステム、レスポンシブのイメージの処理まで自動でやってくれるGatsbyJSがとても魅力的でした。React.jsのドキュメントサイト、Redux作者のDanさんのブログもGatsbyJSを採用しました。

しかし、時代は時代、Next.jsのパクりが多いと言われながら、今もうNext.jsが方が圧倒的に人気で使いやすいです。残念ですが、これからReact領域に入りたい方にGatsbyJSの勉強をあまりお勧めできません。

自分のホームページもGatsbyJSからNext.jsに移行しました。GatsbyJSが元々Next.jsとやや互角だったが、昔と今を比較してみようと思います。

3年半前の比較

GatsbyJSNext.jsGatsbyJSの説明Next.jsの説明
ブログ、ドキュメントサイトの作りやすさ×そもそもStaticサイトのために誕生されたフレームワークgetInitialPropsしかなく、Jamstackに相性が悪い
i18n(多言語サポート)×コミュニティのプラグインで簡単に作れるpathベースの多言語をサポートしていなく、 react-intlを使えば一応作れる
イメージの自動処理×オフィシャルのプラグインでレスポンシブまで自動対応方法がない
サイトのスピードStatic Htmlなので早いのが当然next exportがあるが基本的にSSRが必要
デプロイしやすさStatic Htmlなのでどこでも簡単でできるSSRなので、now(今のVercel)以外は難あり
入門難易度GraphQLに詳しくない人にとって多少難しいわかりやすいがSSRの対応が地獄
コミュニティへの親切さ×親切、質問でもちゃんと答えてくれる未回答でただclosedになっているissueが目立つ
ドキュメントのわかりやすさ×ドキュメントサイトが綺麗にメンテされているREADME.mdしかない(一応learn nextのサイトがあるが)

今の比較

GatsbyJSNext.jsGatsbyJSの説明Next.jsの説明
ブログ、ドキュメントサイトの作りやすさstaticの部分は前と変わらないが、ページが増えれば増えるほど、ビルド時間が長くなるgetStaticPathsgetStaticPropsがあり、on-demand ISRもあるのでとても使いやすい
i18n(多言語サポート)コミュニティのプラグインで簡単に作れるオフィシャルサポート
イメージの自動処理相変わらず自動対応だが、増えれば増えるほど、ビルド時間が長くなるnext/imageが優秀
サイトのスピードStatic Htmlなので早いのが当然SSRだが、かなり改善されてきた
デプロイしやすさStatic Htmlなのでどこでも簡単でできるEdge FunctionとServerless Functionの普及でデプロイしやすくなってきた
入門難易度GraphQLに詳しくない人にとって多少難しいSSRのサンプルが多く、もう難しくない
コミュニティへの親切さコミュニティのStarterをドキュメントサイトから除外する決定は本当にダメだったVercelのプロジェクトになったためやはり変わった
ドキュメントのわかりやすさドキュメントサイトが綺麗にメンテされているドキュメントサイトが綺麗、何よりサンプルが多くてキャッチアップしやすい
pnpmのサポートコミュニティ制のよく動かないプラグインがあるオフィシャルサポート

結論

それ以外、Next.jsがRemixからLayouts RFCをパクリ、買収したTurborepoを加えて、Webpackと対応するバンドルツールTurbopackまで手を伸ばしています。元々のNext.js, GatsbyJS, create-react-appの互いに張り合っている時代が過ぎ去り、今後Next.js一強になることが避けられないかもしれません。

ThunderMiracle

Blog part of ThunderMiracle.com

コメントは表示領域に入ると読み込みます