ここ5年くらいプログラマとして仕事をしている。
私が最初にやったjavascriptの仕事はjqueryだった。当時としても少し古臭くなりつつあったが既存製品では広く使われてたため2025年現在でもjqueryが生きてる会社は多いのではないだろうか?手続的で泥臭いコードを書くことになるが、書いた通りに動くという意味では非常にわかりやすかった。ブラックボックスと感じる部分は少なかった。
3年くらい前からReactを業務で触るようになった。データの写像がViewになるという点において素晴らしい発明だと感じました。またJSXにも感動しました。
一方で、当時から挙動が特殊で概念を体得するのが難しいなと感じていました。
・コンポーネント再レンダリングに伴う意図しないコードの実行
・上記を制御するためのuseEffect/useMemo/useCallbackなどhooks
・useState/useContextなどのstate管理
・再レンダリングの効率化のためのkey props
・client/server component
・server functions
データをviewに自動的に反映させる手段として全viewが更新するのが一番簡単な実装になると思うのですが、それだとレンダリングパフォーマンスが悪いのでReactの場合はかなりの最適化を入れてます。それが上述のuseで始まるhooksだったり、key propsだったりします。
ここのペインが無視できないくらい大きいです。年単位でがっつり触っていても今だに意図しない挙動(バグ)を産んでしまうことがありますし、useEffectを使うべきかそれともreact外側にロジックコードを逃して回避すべきか毎度悩みます。私の中での結論は、可能な限りロジックやstateはreactの外に持たせてreactはレンダリングだけやらせる、です。再レンダリングのコストも大きくは見積もらず、よほど遅くない限り大きめのレンダリングが走っても気にしないことにしました。がしかし、これが果たしてReactの流儀に則ったものなのか、世の中で一般的なのかわかりません。なんにせよ私の頭のキャパシティを超えるくらいのことがReactの裏側で実行されているため、全容を理解し切れません。これは単にReactのせいというよりはその周辺ライブラリ群がReactに合わせた実装を行ないつつ内部を隠蔽しているため(ライブラリの在り方としては至極正しい)、ブラックボックスがさらにブラックボックスで覆われているような感じとなり、ライブラリを組み合わせて使えば使うほど私には理解できなくなります。
あえて強い言葉を使うと、Reactが生み出しReactが解決すべき複雑性をユーザ側で尻拭いするように押し付けられているように感じています。hooks用意しといたからこれで自分でやってね!的な。
え?react-compiler?複雑なものを力技で解決するための謎技術なのでさらにブラックボックスが大きくなったようにしか見えず、良い方向に進んでいるようには思えません。
またserver component / server actionに代表されるような複雑性も苦手です。クライアントとサーバーのどちらでレンダリングするのが良いか?は技術の進歩で行ったり来たりしていますが、個人的にはクライアント側に全振りでいいと思っています。これはReactの問題ではありませんが、こういった複雑性を増す方向に進化していることも私を疲弊させます。ぶっちゃけ全部client renderingすれば良くない?onClickとか扱う必要があるからclient側での処理は無くせないし、そもそも現代のcpuスペック的にそれで不足もないだろう。
ということで脱Reactをずっと考えている。solidjsも良さそうだし、最近だとRemix3とか。
コミュニティの充実度の天地の差があるためどうしても実用性ではReactに敵わないが、個人ユースだと必要十分な機能に収まってるものの方が好みだな。
コメント