Reactを本当に好きな人なんているのか?
(jsx.lol)- React と React 系ツールに関する 批判的な文章を集めてキュレーションした資料集 で、さまざまな開発者・ブロガーの記事を引用形式で整理
- 性能低下、複雑性の増大、ハイドレーションの問題 など、React が抱える構造的な限界を指摘する文章を多数収録
- React 中心の技術選定 は技術的適合性よりも慣性やネットワーク効果によって固定化されており、「誰もが React を知っている」という前提がアーキテクチャの判断より先行しているとの批判を受けている
- React Server Components と Next.js をめぐるセキュリティ・ガバナンス上の懸念が強まり、CVE-2025-55182 は 認証不要のリモートコード実行脆弱性として CVSS 10.0 で公開された
- React エコシステムの API 設計の混乱 と 品質危機、複雑性は長期保守と学習を困難にし、Hooks・モダン UI 機能・リリースの流れに至るまで React の方向性をめぐる論争へとつながっている
サイト概要
- "Does anybody actually like React?" という挑発的な問いを掲げたキュレーションサイト
- React および React に影響を受けたツールに関する批判記事を集めた cherry-picked コレクション
- RSS 購読機能を提供
React 自体への根本的な批判
-
The End
- React はほとんど常に誤った解決策であり、あらゆるものを釘に見せてしまうハンマー になってしまった
- React をうまく使うことは可能だが、実際にうまく使われているケースはほとんどない
-
JS-heavy approaches are not compatible with long-term performance goals
- ある程度の規模を超えた JS 中心のプロジェクトは、宣伝されているより遅く、時間が経つほどさらに遅くなる
- 開発と保守により多くの労力がかかり、他のアプローチと同程度にバグも多い
-
React Still Feels Insane And No One Is Talking About It
- React は「単純におかしい」と断じるのは簡単だが、理性的に理解しようとする試みが必要だ
-
Stop Using and Recommending React
- 長年 React を使ってきた経験から、使う理由はなく、反対する理由は多い
-
Please don't use React
- React の利用はやめるべきであり、そもそも最初から使うべきではなかったという主張
-
Tech Founder? Entrepreneur? This is why you should avoid React.js in your app
- React は単に遅いだけでなく、技術的負債が DNA に刻み込まれた肥大化したエコシステム だ
- それでも選ばれ続ける現実への疑問を提起
セキュリティおよびガバナンスの問題
-
Critical Security Vulnerability in React Server Components
- 11 月 29 日に Lachlan Davidson が 認証されていないリモートコード実行(RCE) 脆弱性を報告
- CVE-2025-55182 として公開され、CVSS 10.0 評価
-
You should know this before choosing Next.js
- Vercel が Next.js の重大なセキュリティ脆弱性を公開
- 問題そのものは正常なものだが、Vercel の対応は不十分で無責任だった
- プロジェクトのガバナンスに対する懸念を深めた
-
Next.js 15.1+ is unusable outside of Vercel
- Next.js はオープンソースフレームワークを装った Vercel のベンダーロックイン の形になってしまった
API 設計と学習コストの問題
-
Is it Time to Regulate React?
- React の中核的な失敗は 混乱を招く API 設計 によってさらに悪化している
- ドキュメントは煮え切らず、正しい使い方をめぐる議論が延々と続く
-
I don't have time to learn React
- React がモダン UI を教えてくれるという主張とは異なり、実際にはモダン UI をほとんど扱えていない
- autofocus が壊れており、custom elements は実験版を除いて動作しない
- dialog や popover などのモダン機能を使うには useEffect が必要
- synthetic event システムのせいで、実際の DOM の挙動をほとんど学べない
- モダン UI ではなく 2013 年水準の UI だ
-
The React Blog Post: Reflections and Reactions
- すべての問題を「skill issue」で片付け、外部ライブラリで解決できると言う態度はおかしい
- 3 年ぶりに戻ってきても作業できるべき技術だが、フロントエンド、とくに React はそうではない
-
React, where are you going?
- 今日の React を以前ほど楽しめなくしている 2 つの問題は ownership と complexity だ
- 新しい開発者が React に萎縮してしまうのではないかという懸念
性能とユーザー体験の問題
-
Why use React?
- 基本的に悪名高い ハイドレーションのパターン に閉じ込められる
- サーバーで JS によってすべての計算を行い、HTML を即座に送り、その後まったく同じ JS をクライアントにも送る構造
-
How React 19 (Almost) Made the Internet Slower
- 公然たる反発と激しい論争の末、React チームは変更を保留した
-
An even faster Microsoft Edge
- React から モダンな Web Components + HTML-first アーキテクチャ へ移行
- とくに低性能ハードウェアのユーザーに大きな恩恵
-
Switching costs
- クライアントサイド React が強いる ひどいユーザー体験 への不満がもっと増えてほしい
- しかし実際の不満はほとんど 開発者体験 に集中している
-
Pivoting From React to Native DOM APIs: A Real World Example
- ある開発チームが React の「圧倒的な VDOM」からモダンな DOM API へ移行
- 速度とインタラクションの改善 をすぐに実感
モバイルおよびプラットフォームの問題
-
I Built the Same App 10 Times: Evaluating Frameworks for Mobile Performance
- Reactのモバイル戦略は、本質的にチームを**プラットフォーム依存(platform capture)**へと追い込む
- Webは、ゲートキーパーやプラットフォーム手数料なしで直接配布できる代替手段を提供する
エコシステムとコミュニティの問題
-
React Won by Default – And It's Killing Frontend Innovation
- 新しいフロントエンドが必要になったとき、「制約条件は何で、どのツールが適しているか」ではなく、**「Reactを使おう、みんな知ってるから」**から始まる
- 技術的適合性ではなく、ネットワーク効果がアーキテクチャを決める自己強化サイクル
-
Conferences, Clarity, and Smokescreens
- コンサルティング業務と業界データによれば、Reactコミュニティは深刻で測定可能な品質危機に陥っている
- React Summitの参加者はこの事実を知らされていない
-
Why Silicon Valley CTOs Are Secretly Moving Away from React
- React開発者は多いが、深いパターンを理解する真の熟練者はますます希少かつ高額になっている
- 最も経験豊富なエンジニアたちは複雑さに疲れ、別の技術スタックへ転職しつつある
-
Increasingly miffed about the state of React releases
- 最後のReactリリースから1年半が経過しており、これまでのどのリリース周期よりも長い
React Server Componentsへの批判
-
React Server Components: the Good, the Bad, and the Ugly
- Reactはクライアントサイドの改善をほとんど放棄していた(2019年に実験を中止して以降)
- Facebook規模の問題をFacebook規模のリソースで解決するために作られたレガシーフレームワークであり、ほとんどのユースケースには不向き
-
React Server Components are a bad choice (for shipping)
- 迅速にリリースしたいなら、React Server Componentsは使うべきではない
- 学習・実験・コンテンツ制作の目的であれば使用可能
基本への回帰と代替手段の強調
-
HTML is better than React!?
- **HTMLベースのプログレッシブエンハンスメント(progressive enhancement)**の利点
- ユーザーに、より早く使える体験を提供できる
- 接続が遅くてもサイトがひどく見えない
- 問題が起きてもユーザーはサイトを使い続けられる
- **HTMLベースのプログレッシブエンハンスメント(progressive enhancement)**の利点
-
How to build a counter component using the HTML Framework in just 1 line of code
- 「
node_modulesフォルダを探してゴミ箱にドラッグしろ」という皮肉めいた勧告
- 「
-
Liskov's Gun: The parallel evolution of React and Web Components
- Reactは偽りの約束と誤解を招く主張、終わりのない下位互換レイヤーで肥大化した残骸になってしまった
- アップデート時にも、しばしばコードを壊す
-
Removing React is just weakness leaving your codebase
- Reactのような重いフレームワークから離れ、Webの基本に集中することで、キャリアとコードベースの将来性を確保する
-
Concatenating text
- 画面更新が必要なとき、なぜ誰もがReactから連想するのか
- フロントエンドとバックエンドの関心事をひとまとめにしようとする傾向への疑問
マイグレーションと移行事例
-
We Rewrote our React App in Svelte in Three Weeks
- Svelteが「最も愛される」フレームワークだという見出しを無視してきたが、今ではSvelte陣営に加わった
-
Moving on from React
- 2023年にReactで誤ったスタートを切った後、顧客ドメインにより適した技術スタックへ移行
-
Moving on from React, a Year Later
- 「fat client」時代のJS-heavyなフロントエンドは消えつつある
- エッジアプリケーションをめぐる誇大宣伝は、さまざまなビジネス構築には不要
-
Replacing React: How Liveview solved our performance problems
- React SPAの性能問題をきっかけにLiveViewを調査
- 2日間の検証後に確信し、数週間でReact SPAをLiveViewへ置き換えた
全体的な流れと今後の見通し
-
The Neverending Story
- Applets、ActiveX、Flash、Flex、Silverlight、Angular、Reactへと続く流れ
- 大きな全体像を見られなかった企業の反復的な失敗
-
If Not React, Then What?
- Frameworkismは、より多くの(あるいは別の)フレームワークツールの採用を、ユーザー体験改善策として説く
- エンジニアリングのように見えるが、実際にはそうではない活動に没頭させる
-
Reckoning: Part 4 — The Way Out
- YAJSD(Yet Another JavaScript Disaster)を構築する計画に同調してはならない
- Reactリライトの提案が出たとき、シニアエンジニアは沈黙してはならない
-
After a Decade of React, Is Frontend a Post-React World Now?
- 新規のWeb開発者は、Reactを最初から避ける選択肢も真剣に検討できる
- 短期的な就職可能性は下がるかもしれないが、先進的な雇用主とのマッチングの可能性がある
-
React, Electron, and LLMs have a common purpose: the labour arbitrage theory of dev tool popularity
- Web向けソフトウェアを作る大半の組織において、Reactは客観的に見て多くの代替案より劣っている
-
It feels like React is getting a bit of a kicking recently
- コミュニティにおけるReactへの態度の変化と、プロジェクトの意思決定に関する提言
-
Kind of annoyed at React
- 複雑なものを作るときでもやはりReactを選ぶが、その選択をもっと喜べるものであってほしいというもどかしさ
-
Am I the only one that thinks that the direction of React is wrong?
- Reactが独自のルールで自分だけのゲームをしているような印象
-
Client-side JavaScript and React criticism: What comes next?
- JavaScript利用の改善、プログレッシブエンハンスメント教育、コミュニティの和解策についての議論
-
A Historical Reference of React Criticism
- 長年にわたりReactプロジェクトに向けられてきた批判の歴史的整理
- 一部は解決され、一部は依然として未解決のまま
Hooks と代替パラダイム
-
Why Signals Are Better Than React Hooks
- ReactのHooksは正しく使うだけでも難しく、高性能に使うのはさらに難しい
- 多くのアプリケーションでコード品質と性能低下の原因
比喩的な批判
-
What Is React.js?
- 支持者たちの奇妙さ、過剰な自己真面目さ、終わりのないドキュメントをキリスト教になぞらえた動画
3件のコメント
Reactはただの信仰です(カルト)
Ant Millみたいなものですね //
Hacker Newsの意見
Reactには気に入らない点がいくつかある。Reactは画面にインタラクティブなHTMLを描画するためのフレームワークであって、ものすごく複雑なプログラミングをさせるためのものではない。
第一に、複雑な概念や用語に頼りすぎている。Vueと比べると、
useEffectはwatch、useMemoはcomputedに相当する。第二に、こうした無駄に「賢い」やり方が用語を超えてエコシステムにも染み込んでいる。昔のReduxは数字を1つ増やすだけでも複数のファイルに大量のコードを書く必要があり、作者が賢そうなコンピュータサイエンスの概念を好んでいたからに見えた。同じ時期のVueXなら、その数字をただ増やせばよかった。幸い、最近のReactエコシステムにはまともな状態管理が増えている。
第三に、ReactはCSS作業用のツールを標準では提供していない。
第四に、Reactは最適化を自動でやってくれない。
useEffectやuseMemoをいつどう使うべきか、あるいは使うべきでないかを理解していなければならず、React最適化に関する口伝も多い。再レンダリングが中核的な目的なのにこうなっているのが問題だ。Vueではフレームワークが自分の道具を使わせ、その中で大半を最適化してくれるので、Vueアプリを手動で最適化しようと考えたことはない。第五に、その口伝自体が問題だ。React APIと「正しいReactの書き方」があまりに何度も大きく変わってきたため、今でも正しい話とそうでない話を見分けるのがとても難しい。
結局のところ、Reactはアイデア、コンピュータサイエンス、高水準の抽象化に過度に集中していて、実際にインタラクティブなHTMLを簡単に描画できるようにすることにはあまり集中していない、と要約できる。
React、Vue、Svelteをどれもかなり使っているが、Reactを使うときはVueやSvelteならすでに処理してくれていたことをずっと気にし続けなければならない。性能面では3つとも似たようなものだ。
以前、関連する文章も書いた: https://www.brachkow.com/notes/what-i-like-in-vue/
この約16年間でJavaScriptの主な流れを一通り経験してきた立場からすると、ある意味ではReactが好きだ。
Reactは、これまで試してきた他のすべてを除けば最悪のJavaScriptフレームワークだ。
Angular 1時代と比べるなら、いつでもReactを選ぶ。Backboneのように毎回ゼロから自分で組み立てるやり方よりはAngular 1の重たいMVCを選ぶし、古典的なjQueryスープ構造よりはBackboneの最低限のMVC構造の方がましだった。あの時代のネイティブAPIよりは、jQueryのDOM操作と標準ライブラリ強化を即座に選んでいただろう。
Reactにもトレードオフはあるが、動かなかった数多くの代替案を長く経験した末にここへたどり着いたのだ。
もちろんReactを好きな人はいる。JavaScriptのように事実上強制されるものでもないし、Reactや他のWebフレームワークを強制されるわけでもないのにReactが勝った。少なくとも、ほとんどの他のフレームワークより十分に好まれている証拠と見ていい。
2010年代後半まで、Web開発についてよくある不満は変化が速すぎて新しく学ぶことが次々に出てくることだったし、その不満はもっともだった。ところがReactという単一文化が頂点に立つと、今度はそれが嫌だとみんなが不満を言う。本当に勝ちようがない。
Reactが勝ったのは、デフォルトの選択肢になったことと、人は自分が慣れたものを好むからだ。
別のものを使いたければ、統合を自分で実装するか、すでにやってあるオープンソースのプロジェクトを探すか、AIに聞くしかない。
趣味のプロジェクトなら可能でも、業務環境では想像しにくい。
React は好き。HTMX/Hotwire 系も真面目に使ってみたことがある
受信トレイから来た場合はブラウザ API で戻る動作を行い、そうでなければスクロール位置を保持するために受信トレイへのリンクへ送る「戻る」ボタンを作りたかった。HTML で動作を結び付けて戻る関数を呼び出し、コントローラで前のページを判定したうえで、JavaScript が有効な戻るボタンかハードリンクを返す必要があった。ロジックが 3つのファイル に散らばっていた
React ではコンポーネント内の JavaScript が前のページが受信トレイかどうかを判断し、その値に応じて戻るボタンの JSX やリンクを表示できる。すべて 1つのファイル の中で完結する。自分としては 1 つの概念的エンティティをモデリングすればよいが、別のやり方では 3 つのエンティティに機能を無理やり押し込まなければならなかった
遅いかと言われれば、たしかに遅い。それでも自分を幸せにしてくれる。会社の汚い React コードベースで苦しんでいるなら、同僚を責めるべきだ。React がなければ、きっともっとひどかったはずだ
たまにフォーム強化程度ならともかく、基本的には常に htmx/サーバーレンダリングとネイティブ動作のほうを好む
推奨される htmx のやり方なら、
onclickボタンをインライン JavaScript に結び付けるか、それが嫌ならgoBackOrInboxのような関数を呼べばよいfunction goBackOrInbox() { if (document.referrer) { const path = new URL(document.referrer).pathname; if (path.startsWith('/inbox')) { history.back(); return; } } window.location.href = '/inbox'; }こういうパターンを多用するなら、移動先のパスを引数に取るようにパラメータ化すればよい
React コードを長く書いてきて、今は会社で大規模な Vue プロジェクトをやっている。以前はみんな Vue のほうが両者の中でより簡単で取っつきやすい選択肢だと言っていたが、今では違って見え始めている
React はエレガントで、コンポーネントが本質的にただの関数であるだけで、それ以外はあまりない。Next.js のエコシステムはひとまず脇に置くとして、フロントエンド開発で見てきたものの中で最もエレガントだ
一方で Vue は混ざりもののように感じる。JavaScript をきちんと学びたくなかったバックエンド開発者たちが受け入れて称賛した痕跡が見え、その結果はきれいに噛み合わないぎこちない混合物のように思える
主要なフレームワークは全部使ったことがあり、今は大規模な Angular の Web アプリを作っている。Angular ではコンポーネントはクラスとテンプレート、スタイルで表現される。イベントリスナーはたいていクラスのメソッドを呼び、状態はクラスのプロパティのように単純にできる。ずっと自然で、落とし穴もずっと少ない。もちろんゼロではないが
使い心地は少し違う。React のほうが簡単なこともあれば Vue のほうが簡単なこともあるが、Vue が シグナル を使っている点は自分にとって大きな利点だ
Reactそのものより、一般的にコードでUIを最もうまく記述する方法という問いのほうに関心がある。
Reactのファンで、作るほぼすべてのWebアプリケーションにReactを使っているが、最大かつ最も明確な問題は、ReactでUIを書くことが、Goでコマンドラインツールを書くことやElixirでリアルタイムアプリを書くことほど自然には感じられない点だ。
ある種の言語は特定の作業に対して驚くほど自然で摩擦がない。しかしUIについては、まだ誰も本当に征服できていない。Swift、JSX/HTML、Svelte、その手の人気フレームワークが何であれ、どれもある程度は問題を回避しているように感じる。言語やフレームワークの設計者が、どこかの時点で要件を満たすために、汚かったり奇妙だったり苦しかったりする構文を妥協してねじ込んだように見える。
UIの自然なインターフェースは視覚的なものなので、Figmaのようなツールが解決策の重要な一部になり得る。それでも何かが欠けている感じがする。視覚的なものをコードで表現する、もっと直感的な方法があるはずだ。今の解決策はうまく説明しにくいが、いつもどこかであと一歩足りない
今でもSvelte、Vue、Solidを含むほぼすべてのものよりReactを好んでいる。とはいえ最近はCrank(https://crank.js.org/)を使い始めていて、自分が行きたい方向にもう一歩近いように見える。ただ、今のところはおもちゃのプロジェクトでしか使っていないので、性能面と開発者体験の両方でどれだけうまくスケールするかは何とも言えない
これまで見た中で最良の分析は、Chattyの「Programs = Data + Algorithms + Architecture: consequences for interactive software engineering」[2]にある。少し読みにくいが、十分に読む価値がある。
短く要約すると、問題はアーキテクチャ、より具体的には言語とアーキテクチャの不一致だ。「汎用」プログラミング言語が導く呼び出し/返却アーキテクチャのスタイルは、ユーザーインターフェースに必要なアーキテクチャと合わず、むしろ衝突している。
このテーマについては「Can Programmers Escape the Gentle Tyranny of call/return?」にも書いた。
現在のアプローチは、代替アーキテクチャスタイルを容易に表現できるプログラミング言語であるObjective-Smalltalk[4]をまず作ることだ。
それで今、interscriptというUIフレームワークを作っていて、HTMXNativeやいくつかの付随要素も含まれる。
かなりうまくいっているようだ。
[1] 例: Myersら「Languages for developing user interfaces」 https://api.taylorfrancis.com/content/books/mono/download?id...
[2] https://opendl.ifip-tc6.org/db/conf/ehci/ehci2007/Chatty07.p...
[3] https://2020.programming-conference.org/details/salon-2020-p...
[4] https://objective.st
しかし時間がたつにつれて、より理想主義的でない答えを受け入れるようになる。もしかすると、そうした解決策は存在しないのかもしれない。問題空間があまりにも複雑で、あらゆる形態を包摂する人間的に実行可能な一般解など存在しないのかもしれない。それが当てはまる分野があるとすれば、おそらくUIだろう
その通り。Reactは宣言的スタイルと命令的スタイルをうまく結びつけた、群を抜いて最も直感的なインターフェースだ。あらゆる言語のUIフレームワークを見渡しても、JSXに近いものはないと思う
Svelteが本当に好きで、より複雑なアプリにはSvelteKitを使っている。
以前ならReactを使っていただろう多くのケースで、はるかに良い改善だと感じた。
Svelteは、Web開発、HTML、CSS、JavaScriptの基本を知っている人にとって、ずっと学びやすく見える。ところが最近はWeb開発をReactから始める人をよく見かけるが、順序が少し逆な感じがする。
個人的にはSvelteKit + Capacitorでモバイルアプリを作っていて、設定はここに書いた: https://bryanhogan.com/blog/web-to-app-sveltekit-capacitor
シンプルなランディングページにはAstroを好む
最近の人たちがReactでWeb開発を始めるのは順序が逆だという点に同意する。SvelteはHTMLを母語のように扱うので、この問題をうまく防いでくれる。Svelte(Kit)でWeb開発を始めれば、Reactで始めるよりも基礎を多く学べる可能性が高い
私はReactを可能にした人たちの一部だったのでバイアスはあるが、Reactが本当に好きだ。それ以前は、フロントエンドで直面する問題を直すためにあらゆることを試していた。しかしReactが登場してからは、そうする必要がなくなり、ただ作ることに集中できるようになった
とても良かった発表の一つが https://www.youtube.com/watch?v=h9SDuTSy7ps。私の経験では、React のアーキテクチャは本当に優れていて、大規模なアプリケーションを作るのにかなり向いている
残念ながら React の最大の問題は、JS/TS エコシステムに入ることを強制される点。私にとって JavaScript/TypeScript は、疑いなく直接扱いたいシステムというよりコンパイル対象に近い
Elm には満足している。コミュニティは本当に小さく、ときにはライブラリを自分で作らなければならない。TEA は React から来た立場だと時々不自然だが、
useEffectのような暗黙的で予期しない状態を心配しなくていいので、Elm で作業しているときはいつも楽しいしかも Claude は、少なくとも大きくて厄介なコードベースの中では、React より Elm のほうでよりうまく持ちこたえるように見える
状態は大きなタブーのように見えるので、少し衝突しているようにも思える。結局のところ、すべての Elm アプリは副作用のないグローバル Redux + React アプリになるということなのかも気になる。Elm の何が楽しいのか、どんなふうに作業するのかをもっと詳しく知りたい。リンクも歓迎