944 words
5 minutes
結局Reactに戻った話

関連記事#


第2話の続き。

Next.jsを触り始めてからしばらく経った。

ルーティング。

ビルド。

デプロイ。

Node。

レンタルサーバー。

localhost問題。

気が付けば、

「カテゴリ画像を早く表示したい」

という話からだいぶ遠くまで来ていた。


ここまで来て思った#

ある時ふと思った。

俺は何を解決したかったんやっけ。


SSR?

違う。

SEO?

別に困ってない。

Node環境が欲しかった?

それも違う。


元々やりたかったのは、

ページを開いた時にカテゴリ画像を最初から表示したい。

ただそれだけだった。


問題が増えている#

この時点で、

最初に抱えていた問題は1個だった。

カテゴリ画像が一瞬表示されない

だけ。


ところが今はどうか。

App Router
Pages Router
SSR
ビルド
Node
レンタルサーバー
fetch
localhost

みたいな話になっている。


気付いた。

問題を解決しようとして、

問題を増やしている。


本当に必要だったこと#

改めて整理してみる。

欲しかったのは、

  • カテゴリ一覧
  • サブカテゴリ一覧
  • カテゴリ画像

この辺の初期データ。


逆に言うと、

これさえ最初から持っていればいい。

ページ全体をSSRする必要はない。

Next.jsである必要もない。


Djangoで渡せばよくない?#

そこで発想を変えた。

どうせDjangoがいる。

だったら、

最初のHTMLを返す時に、

必要なデータも一緒に渡せばいい。


例えば、

<script>
window.initialData = {...}
</script>

みたいな形でもいい。

Contextに流し込んでもいい。

やり方はいくらでもある。


重要なのは、

初回表示時点でデータがあること。

それだけだった。


Reactのまま解決した#

最終的には、

Django側で初期データを持たせて、

React側で利用する形にした。


ざっくり書くと、

Django
初期データ埋め込み
React
各コンポーネントで利用

みたいな構成。


結果として、

最初に気になっていた

画像が一瞬表示されない

問題は解決した。


Next.jsが悪かったわけではない#

一応書いておく。

今回の結論は

Next.jsはダメ

ではない。


むしろ、

最初からNext.js前提で作るなら全然アリやと思う。

実際便利な機能も多い。


ただ今回の自分のケースでは、

  • Reactで既にある程度作っていた
  • Djangoも動いている
  • サーバー構成も決まっている

という状態だった。


そこへSSRのためだけに大規模な変更を入れる必要はなかった。

というだけの話。


当時の自分メモ#

技術選定をしている時、

つい

何を使うか

に意識が向きがちになる。


でも今回振り返ると、

本当に考えるべきだったのは

何を解決したいのか

だった。


あの時一回立ち止まらなかったら、

今も別のエラーと戦っていた気がする。

死にゲーで、 とりあえず行けそうな道を進んでみたら、 正面から行くと絶対やられるボスに突っ込んでたみたいな。

結局引き返すことになった。

でも、足腰は少しムキムキになった。

今回はそんな感じだった。