React Server Component について考え直してみる
しばらく使ってみた結果、設計的なメリットがあるのかどうかわからなくなってきたので整理してみた話。
いままでにこんな記事を書いた。
その当時、とりあえず React Server Component (RSC) を使ってみた結論として、後からこのRSCのコンポーネント設計に変更することはかなり困難を極めるものになりそうという考えだった。その負債を作るくらいであればいまトレンドとしてのNext.jsの波に乗って appDir を最初から選択してしまおうという安易な考え方だった。そして今の結論から言うと、設計の複雑化の片鱗を感じていて懐疑的になっている。リソースから描画までコンポーネント単位に処理を閉じ込めることを達成しつつも、データ取得の最適化層を暗黙に設けなくてはならなくなる点や、Next.jsというフレームワーク自体の成約に対する思想の相違を感じ始めているところがある。
---
ここで少し脱線するが、Next.jsに飛びついてappDirに飛びついた点について、ちょっとメタ的に整理できたことがあったので、少し長くなってしまうが書いておく。本題とは関係ない。
技術はそのメリットデメリットをもってして取捨選択されていく。しかしながら、そのデメリットも技術の進化に伴って薄れる可能性などもあり、動き続けるシステムにとってその一瞬で適切な選択するのは難しい。特に、どの技術が負債化するかどうかというのは非常に難しい問題で、往々にして未来のことを想定しすぎることは報われない。そこで現状でのベストな選択を取り続け、継続的に負債を溜めないよう移行し続けることが大切だと思っている。
ところが、その継続的な移行コストというのは果たして必要な回り道であったのかというのが、常々気になるところではある。現時点で成熟していない技術である場合に時が熟すのを待ってから移行するほう無駄な移行を省けているかもしれないという意見もあると思う。しかしまあ、自分の肌感にはなるが、待つことによる辛さのほうが大きいなという感覚がある。要因はケースバイケースではあるが、移行が大規模化することによってそのリスクは大きくなる点だったり、そもそもの心理的なハードルなどを考えると、小さくこまめに移行にチャレンジし続けることは知見を蓄積することにも繋がって結果として移行を成功させるコストを下げられていると感じる。
自分個人としては技術の細かな実際を知って、感覚を常に更新し続けることが良いものを生み出すと思っている。小さく移行し続けるプロセスはその技術屋としての哲学にマッチしているところもあり好きなのだが、時にはカロリーの高い作業を必要とする判断が必要になることもあり、その度にトレードオフについて悩むのが常である。そしていまがその時な感じだ。
そして、もうこれ以上考える必要はないなと自分なりに納得してしまったカウンターパートについて整理を怠って捨ててしまうというのは、いささか乱暴なところもあったなあと感じたところもあり、こうして文字としてしたためて整理するようにしていきたいと思った次第である。そうしないと当時考えていたことなんてすぐに忘れてしまう性格なので。
---
さて、appDirについて思ったことを書くんだった。
項目を上げるならこんな感じになる。
appDirは "コンポーネントに処理を集約する設計" を可能にしたが、その結果として最適化が難しくなるかもしれない。
RSCによってサーバーとクライアントの境目が連続的になっているように見えるが、それは逆にどちらで処理されるかについて敏感にならざるを得なくなってしまった。
クライアント側の一時的なステートに対して弱い。
1つ目。appDirは "コンポーネントに処理を集約する設計" を可能にしたが、その結果として最適化を難しくしている。
これはRSCによって枝葉のコンポーネントで必要なリソースをリクエストしてレンダリングするという構造が強制されるようになった。
書き途中