世界を動かす技術を、日本語で。

Reactはデフォルトで勝利し、イノベーションを鈍化させている

概要

  • React は技術的優位性ではなく デフォルト選択 で勝っている現状
  • これが フロントエンドの革新停滞 を招いている問題提起
  • Svelte, Solid, Qwik などの新興フレームワークの技術的利点と採用障壁の解説
  • React依存による技術的負債 やエコシステムの弊害を指摘
  • 多様性ある選択と評価基準の重要性を強調

Reactのデフォルト化がもたらす停滞

  • React はもはや技術的優位性ではなく、 既定路線 として選ばれる状況
  • 新規プロジェクトでは「 Reactを使おう」が前提となり、 要件や最適なツールの議論が省略 されやすい現実
  • この傾向が ネットワーク効果 による自己強化サイクルを生み、技術的適合性よりも知名度がアーキテクチャ選定を左右
  • Svelte (コンパイル時最適化)、 Solid (細粒度リアクティビティ)、 Qwik (Resumability)など、 革新的アプローチ が正当に評価されにくい現象
  • 問題はReact自体ではなく、「 React前提思考」というマインドセット

Reactの技術的限界とイノベーション天井

  • Virtual DOM は2013年当時の課題解決策だったが、 現代のコンパイラ技術では不要なオーバーヘッド となるケースも
  • Hooks はクラスコンポーネントの課題を解決したが、新たな 複雑性 (依存配列・クロージャ・副作用の誤用)を生んでいる
  • Server Components はパフォーマンス向上をもたらすが、 構造の複雑化や新たな障害要因 を追加
  • React Compiler はuseMemo/useCallbackなどのパターンを自動化するが、 根本的な制約を最適化で補っている 現状
  • Svelte 5のRunesSolidの細粒度リアクティビティQwikのResumability のような根本的に異なるモデルとの 発想の天井 の違い

React依存による技術的負債

  • Reactデフォルト選択 は、 ランタイムや再調整コスト を無自覚に受け入れる傾向
  • 再レンダリング管理・副作用依存・ハイドレーション境界など、 開発者の労力が本質的価値創出以外に消耗
  • JavaScriptのクリティカルパスコスト (The Cost of JavaScript)というパフォーマンス研究の教訓
  • Reactパターン」中心の思考が、 Webの基礎知識の移植性やスキルの汎用性を損なう 問題
  • Solid などのベンチマークで、 リアクティビティ重視シナリオで2-3倍高速 な更新性能が示されている事実

革新的フレームワークの特長と採用障壁

  • Svelte

    • コンパイラ型で ランタイム・オーバーヘッドを排除
    • Web標準に近いメンタルモデル で学習コスト低減
    • The Guardian などの採用実績、 バンドルサイズ・ロード時間の大幅削減 事例
    • 「求人が少ない」 という理由で採用が進まない現状
  • Solid

    • JSX互換性と細粒度リアクティビティ による高効率な更新
    • 不要な再描画を最小化 し、状態管理も簡素化
    • 事例は少ないが、初期導入者から高評価
  • Qwik

    • Resumability による 即時起動必要最小限のロード
    • 大規模・長時間利用・低速回線向けに最適
    • 実例は少ないが、導入チームは劇的な起動速度向上を報告
  • いずれも技術的優位性は高いが、 デフォルト選択の壁 で採用が進まない

  • ReactのAPI面積 は大きく、 hooks, context, reducer, memo化 など複雑性が高い

  • 例: Cloudflareの障害 (useEffectの依存配列ミスによるAPI連打)など、 複雑なAPIがバグの温床

  • Svelte, Solid, QwikAPIが小さく、学習・保守コスト低減

ネットワーク効果という牢獄

  • React の支配で「 Reactエンジニア」という職種が生まれ、 スキルの多様性が制限
  • コンポーネントライブラリチームの慣性 による組織的ロックイン
  • リスク回避志向 で「安全策」としてReactが選ばれる傾向
  • 教育機関 も「就職に有利なReact」を重視
  • 技術的優位性ではなく、 エコシステムによる囲い込み が進行

ネットワーク効果からの脱却策

  • 技術リーダー は「慣性」ではなく 要件と技術的適合性で選定
  • 企業イノベーション予算 を活用し、代替技術の試験導入
  • 開発者 は単一フレームワーク思考からの脱却・多様なメンタルモデル習得
  • 教育者フレームワーク非依存の基礎 も指導
  • OSS貢献 で代替エコシステムの成熟促進
  • 自動的な変化は起きない ため、意識的な選択が必要

フレームワーク選定チェックリスト

  • パフォーマンス要件 :起動速度・更新効率・バンドルサイズなどを評価。速度重視ならコンパイル型を優先
  • チームスキルと学習コスト :既存知識を考慮しつつ、移行パスや互換性(例:SolidのJSX)も検討
  • スケーリングと運用コスト :長期的な保守・依存管理・技術的負債も含めて算出。代替案は運用コスト低減例多し
  • エコシステム適合性 :成熟度と革新性のバランス。非ミッションクリティカル領域でパイロット導入推奨

よくある反論と再考

  • 「エコシステムの成熟度」

    • 成熟は価値だが、 慣性や依存リスク も孕む
    • サードパーティ依存による 保守・セキュリティ・バンドル肥大化 リスク
    • AIコーディング支援 で自作ユーティリティの障壁が低下し、汎用ライブラリ依存の必要性減少
  • 「採用が難しい」

    • 需要があれば供給は増加。 非クリティカル領域で試験導入・現場育成 でリスク分散
  • 「コンポーネントライブラリ」

    • フレームワーク非依存のデザインシステムやWeb Components でロックイン回避
  • 「安定性」

    • Reactも クラス→Hooks→Server Components と絶えず変化。 代替案の方がAPI安定性高い例も
  • 「大規模実績」

    • jQuery もかつては大規模実績だったが、 技術進化により役割交代 した歴史

エコシステム単一化の弊害

  • 単一フレームワーク支配 はWeb進化の停滞を招く
  • 人材・投資・教育 が現状維持に流れ、 基礎技術や革新への投資が減少
  • Reactで十分 という思考が プラットフォーム改善の遅延 を招く
  • 多様性の消失はエコシステム全体の損失

多様性ある未来への提言

  • 健全なエコシステム には多様性が不可欠
  • 異なるアプローチの競争・交差受粉 がイノベーションの源泉
  • 複数のメンタルモデル を学ぶことで開発者も成長
  • 一つのモデルに全てを賭けるのはリスク、限界到達時の脆弱性
  • 次のプロジェクトは「デフォルト」ではなく、「要件と技術的適合性」で選択
  • 多様な選択がエコシステム全体の革新力と回復力を高める

React-by-default に安住せず、 多様なフレームワーク評価と採用 を意識的に進めることが、 Webフロントエンドの未来 をより豊かで革新的なものにする鍵

Hackerたちの意見

フックはクラスコンポーネントの問題を解決したけど、新たな複雑さを持ち込んだよね。依存配列や古いクロージャー、誤用されたエフェクトとか。Reactのドキュメントでも「エフェクトは必要ないかもしれない」って控えめに言ってるし。サーバーコンポーネントはファーストバイトまでの時間を改善するけど、アーキテクチャの複雑さや新しい失敗モードを加える。Reactにはたくさんの正当な批判があるけど、これはその一つじゃないと思う。これらの問題はフックが新しく持ち込んだものじゃなくて、クラスコンポーネントAPIにもあった問題なんだ。ひとつずつ見ていくと、依存配列:特定のpropsや状態が変わったときに呼ばれるはずのコードを含むライフサイクルがあって、でもそのうちの一つをチェックするのを完全に忘れちゃったバグの数は数えきれない。古いクロージャー:setStateの第二引数がこのバグを引き起こした。あと、ライフサイクルメソッドの中でメソッドをバインドしちゃう人もいて、同じ結果になる。エフェクトの誤用:クラスコンポーネントはクラスのコンストラクタやライフサイクルメソッド(componentWillMount、componentDidMount、componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、componentDidUpdate、componentWillUnmount)にアクセスできたけど、これらの誤用はめちゃくちゃ一般的だった。「エフェクトは必要ないかもしれない」っていう記事が「ライフサイクルメソッドは必要ないかもしれない」や「setStateの第二引数は必要ないかもしれない」ってタイトルだったら、過去にはすごく役立ったと思う。フックはミスをする機会を減らして、そういう機会を列挙しやすくして、重要なのはそれを検出してユーザーに警告するのを簡単にしたんだ。

fast-checkを使ったプロップテストは、小さな変更があるときにすごく役立つって感じた。

その気持ち、めっちゃわかる!前はフロントエンドの仕事をたくさんやってて、かなり最先端のこともやってた。ブラウザで高性能なユーザー体験を提供するって、以前はネイティブアプリでしかできないと思われてたことだよね。2009年から2015年くらいの話。ウェブ標準の基礎に深く関わっていて、それをほぼ直接活用してた。しばらくバックエンドの仕事に重心を移して、Reactの台頭とともにその成長を疑いの目で見てた。なんか非効率的なやり方に思えたから。それに、JSXの制限で全てが式でなきゃいけないっていうのが、目をえぐりたくなるほどだった。それでも、Reactは状態管理に関する重要なパラダイムシフトの基盤を築いてくれた。古いメンタルモデルから不変データの一方向フローへの道…全く新しいメンタルモデルを再学習するのは痛かったけど、大事なことだった。時には混沌としてたけど、Reactはウェブアプリケーションアーキテクチャを考える上で多くの価値を提供してくれた。でも、今はSolidJSみたいなものと比べると、Solidが基本的に同じ利点を持ちながら、もっとシンプルでパフォーマンスもいいアーキテクチャを提供してるのがはっきりわかる。Reactよりも整理しやすく、考えやすい形で。JSXもサーバーコンポーネントも、リアクティブな状態管理も(実際にはそれにとってはもっと良くてクリーンな基盤)あって、Reactの開発者ならほとんど神経回路を再配線することなくSolidに移行できる。アプリケーションのアーキテクチャや構造について考え方を根本的に変える必要もない。基本的にReactがやってることを、もっと良く、速く、そしてバンドルサイズも劇的に小さくやってるだけ。なのに、業界全体の慣性のせいで、いくつかのコンテキストでは仕方なくReactを使わなきゃいけないのが本当に残念。

使わなくてもいいよ!私の会社(ほぼ私が開発した)でこの10年間に開発したフレームワークについてどう思う?MITライセンスでオープンソースにするよ:https://github.com/Qbix/Q.js

基本的にReactがやってることを、もっと良くやってる。SolidJSにはまだいくつかの大きな痛点があるけど、私が見つけたのは、propがシグナルなのか、シグナルになるべきなのかがわからないこと。型システムがあまり役に立たない。Reactでは、参照が変わったら、その参照をpropとして読むコンポーネントが再レンダリングされるって確信できるけど、Solidでは更新が観察されるかどうかがあまり明確じゃない。

なのに、業界全体の慣性のせいで、いくつかのコンテキストでは仕方なくReactを使わなきゃいけないのが本当に残念。多くの人が仕方なく働いていて、ほんとにそうじゃなければいいのにって思ってると思うよ。それは、彼らが知ってるものを使うことを意味するし、それがReactになる。私もその気持ち、めっちゃわかる。人々は子供や趣味に時間を使いたいし、最悪の場合、年老いた親の世話をしてるかもしれない。

JavaScriptの人たちは数年間、革新をやめるべきだと思う。行き詰まった革新が多すぎる。ウェブのJavaScriptプロジェクトを構築する方法は何通りあるんだ?ブラウザの人たちはもっとしっかりしたコンポーネントを開発するべきだよ。バックエンドをサポートするコンボボックスとか、ブラウザ間で標準化された日付ピッカーとかどう?そうすれば、2025年でもブラウザがまだ持ってない基本的な操作コントロールの状態管理を常に革新する必要がなくなる。

問題の一因は、ブラウザが本来の目的を果たしていないことだと思う。GoogleはChromeを通じてほぼ独占的な立場を持っていて、やりたいことは何でもできるし、やりたくないことはやらなくてもいい。だから、基準がGoogleが開発に時間をかけたいと思うこと以外にはほとんど機能しない。彼らは独占的すぎないから、ブラウザを完全にロックダウンされた製品にすることもできない。SafariやFirefox(この順番で…ちょっと残念だけど)がそれを阻んでいる。だからブラウザはあまり進化せず、ドキュメントビューアからアプリケーションランタイムに変わるという強い技術的な力があるのに、結局あまり動いていない。SilverlightやJavaアプレット/JNLPの夢を実現するチャンスがあるのに、誰もそれをコントロールできないならやりたくないと思っている。FirefoxもOSSの精神で一人で先駆けるだけの開発力はないしね。だから、JSの人たちは、ブラウザやプラットフォームレベルでより良いものを提供されないから、アプリランタイム版のNANDチップで頑張るしかないんだよね。

確かに最近、ブラウザやCSSは通常はJSに頼るような多くのユースケースを解決してきてる。これをさらに進めていくべきだね。

正直、これらのフレームワークがこんなにすごいことを成し遂げてるのは、狂ったプラットフォームで作業してるからだと思う。HTML、CSS、JSは、ウェブが主にテキストと簡単なフォームだった頃には意味があったけど、今はインタラクティブなアプリを作るにはクソみたいな基盤だよ。全部捨てて、再構築する必要がある。

もっと言うと、ブラウザは5つか6つ必要だと思う。ショッピング用、バンキング用、ソーシャル用…こういうプラットフォーム同士はバックエンドで競争して、フロントエンドでは一貫した体験を提供すればいいんだ。そうすれば、私たちのデバイスで動くコードを書いてる人たちがユーザーを裏切るような利害の対立がなくなる。使いやすさも向上するし、一つの銀行の構造や流れ、ホットキーを覚えれば、他の銀行のインターフェースも簡単にナビゲートできるようになる。各ビジネスが別々のフロントエンドを作るのは無駄だよね。結局、競合とほぼ同じものになるんだから。サンドイッチ屋は、アプリを8%の顧客にインストールさせるためにどう動くかで競争するんじゃなくて、より良いサンドイッチを作ることで競争すべきだよ。

これはほとんどReactがどれだけ優れているかへの不満だね。Reactがあまりにも優れているから、代替案の技術的な利点がReactを選ぶ社会的な利点に勝るのが難しい。これはReactの技術的なメリットへの大きな賛辞でもなく、Reactの競合への批判でもないことに注意してほしい。実際、著者の主張のいくつかには同意するし、例えば:> Reactはもはや技術的なメリットで勝っていない。今日ではデフォルトで勝っている。> その反射が自己永続的なサイクルを生み出して、ネットワーク効果が技術的な適合ではなくアーキテクチャを決定する。私も同意する!でも、チームはまだ大半がより良い選択肢を選んでいる。なぜなら、Reactの利点は確かに代替案の利点を上回っているから。著者が見落としているのは、代替案の技術的な利点は狭いユースケースを除いては小さいってことだと思う。そして、ほとんどの有能なチームは実際にその狭いユースケースにいるかどうかを特定して、正しく代替案を選んでいると思う。

Reactは複雑な問題を解決するのが得意だよね。でも、すべての問題が最初から複雑なわけじゃないし、デフォルトで複雑なツールを使うとプロジェクトに複雑さを加えちゃって、迅速に反復する柔軟性も失われる。これは、過去の機能や未来の機能から比較的もろいエコシステムを維持する必要があることに加えて、JavaScriptや他の技術の複数の領域で当てはまることもある。現在のウェブアプリ構築の世代から次のカーブが出てくるのを探してる。

いろんな会社やスタートアップで結構な数の技術スタックの決定に関わってきたけど、Reactのメリットを含む議論を聞いたことがないんだ。決定はいつも、慣れやエンジニアの採用のしやすさ、エコシステムの組み合わせに基づいてたね。

「React最高!」って聞いたことないな。いつも「もっと簡単に人を雇える」って話だよね。残念ながら。

ウェブ開発者が合理的な生き物だと思ってるのは間違いだよ。実際には「社会的証明」や「権威」みたいな人間のバイアスに簡単に引っかかるから。

Reactは本当に優れているから勝ってるんだよね。レンダー時間が数ミリ秒増えたり、フックの依存関係を理解するのに数時間かかるとしても。それに、もしReactが後退し始めたら、それはもう本当に良くないってことだよ。実際、そうなり始めてるのを見てる。NextとVercelがReactの世界を完全に支配していて、彼らはかなりひどいアーキテクチャの決定をしていることが証明されてる。偉大な帝国は内側から崩壊するものだから、VercelがReactをそうする可能性もあると思う。でも、Nextが自滅しても、人々は多分Vite上のReactに戻るだろうし、Remix 3もまだ開発中だと思うけど、もしかしたら大きくなるかもしれないね。

+1 ReactのDXは本当に素晴らしい。最初はすごく良かったけど、変な感じになって膨れ上がった。でも、JSの地獄に対してはまだまだ素晴らしいと思う。ただ、確かに面倒くさくて、必要な悪って感じもある。改善の余地はあるよね。Next.jsは地獄そのもの。皮肉なことに、AIのおかげでかなり耐えられるようになって、実際には結構良い。だけど、それがアーキテクチャデザインにとって良いこととは言えないよね?今は変な時代だ。もちろん、傍観者として批判するのは簡単だよね。私もそうだし。Next.jsは自分たちの独自のやり方でやりすぎてる気がする。use-clientとserverの使い分けは、最初からおかしいよね。でも、実際のところ「アイソモーフィック環境が欲しいなら、他にどうするつもりなの?」って質問があると思う。私の答えは「やりたくない!」だけど、Vercelや権力者たちはプロダクトの人たちの心をつかんでるみたい。少なくとも今はね。

ViteのReactについて言及するなんて面白いね。3年前にウェブアプリをそのセットアップに移行して、もう振り返ることすら考えなかった。Reactはまだ信頼できる作業馬で、物事を進めるのに助けてくれるし、エコシステムも豊かだ(この規模のものに対して質のバラつきは仕方ないと思ってる)。数年前にNextをいじってみたけど、開発を追ってみた結果、自分が必要としていることをやっていないと判断した。アイソメトリックレンダリングは、実際よりもずっと良さそうに聞こえる。痛みはフロントエンドとバックエンドの異なるプログラミング言語から来るんじゃなくて、クライアントの状態、サーバーの状態、セキュリティなどを調整するのが難しいからなんだ。各側に専門的な言語がある方が、どのコードがサーバーで動くべきか、ブラウザで動くべきかを考えなくて済むから、実際には助かると思ってる。

もしかしたらバックエンドの私たちが助けになるかも。フロントエンドをやる必要があるときは、できるだけ少しだけ学ぶようにしてる。Reactがその役割を果たしてくれる。もしAngularが退屈な王座に座っていたら、ただAngularを使えって言ってたかもしれない。世界が使っているものを使えばいいんだよ!

Reactがひどいアーキテクチャの決定で崩壊したら、Viteはフォークすべきだよ。Vueのコミュニティプロジェクトを通じて、最高のReactの開発体験が提供されてるのはおかしい。

もしコストがレンダー時間が数ミリ秒増えることと、開発時間が数時間増えることなら、それはかなり楽観的だね。ほとんどのReactプロジェクトは最適化の段階に到達せず、レンダリングや遷移の遅延が数秒に達してUXに大きな影響を与えることが多い。フックや再レンダリング、互換性の問題に対処するのにかかる時間は、中規模プロジェクトで何百時間、大企業では何千時間にもなるよ。

Reactが余分なレンダー時間や開発時間を追加するなら、何を節約してるんだ?

Reactに対する主な不満は、周辺ライブラリの質がイマイチなことだね。「また新しいリライトとメジャーバージョンアップをやってる」って感じの人たちが多い。APIの安定性を維持するのはそんなに難しくないんだから、もうちょっと頑張ってほしい!

Remix 3はReactをベースにしてないみたいだね。React RouterやRemixの人たちは素晴らしいライブラリを作るけど、問題は次の素晴らしいライブラリを追いかけ続けてることなんだ。彼らの最新作を使う頃には、もう新しいライブラリを作り始めてて、ツイートしてるからね。

すごく鋭い指摘だね。同じ気持ちを言葉にできなかったから、感謝!Nextが自滅しても、人々は多分Vite上のReactに戻るだろうね…この状況については私も同じように感じてる。短期的や中期的にReactの支配に影響を与えるようなことは、悪い選択が積み重なっても難しいと思う。

Reactが今人気なのは、単に人気だからだよね。開発者は企業が使ってるから使ってるし、企業は開発者が使ってるから使ってる。全ての代替案より優れてるから人気なわけじゃなくて、単にクリティカルマスに達しちゃったから「大きすぎて潰せない」状態になってる。Reactの多くの足元をすくうものを避けるには常に努力が必要だよ。支持者はこれを「スキルの問題」って呼ぶけど、たとえそうだとしても、同じことをより少ないコードで、早く、精神的な負担も少なくできるフレームワークの方がいいと思わない?

ウェブコンポーネントがこの罠から抜け出す道だと思う。React以外のすべてのフレームワークは、ウェブコンポーネントを全力でサポートするべきだよ。そうすれば、Reactやそのエコシステムに対抗するために全く新しいものを立ち上げる必要がなく、コンポーネントやユーティリティの実行可能なエコシステムにアクセスできるから。多くの人がウェブコンポーネントをフレームワークの競争相手と見なしているけど、実際にはそうである必要はない。コンポーネントの実装とブラウザの間のインターフェースを定義するだけで、相互運用性と信頼性のある構成を可能にするんだ。その低レベルのAPIの上に、フレームワークは革新やカスタマイズの余地がたくさんある。コンポーネントの作成方法には多様な可能性や意見があるし、ビルドなし、JSX、テンプレートリテラル、カスタム構文やコンパイラ、クラスベース、関数型などがある。コンポーネントをさまざまな方法で結びつける余地もたくさんあるし、カスタムコンポーネントローダー、コンテキストプロトコル、SSR、サスペンスのようなユーティリティ、スタイリングやテーマフレームワークなどがある。状態管理はUIをコンポーネントから独立させていて、革新の余地がたくさんある。『私たちの新しいFlugleフレームワークを使ってみて、他のフレームワークともすごく相性が良くて、素晴らしいスキャフォールディングを追加するよ』って言えるのは、Reactの一強文化に対する良いセールスポイントになると思うし、別の小さなサイロを作るよりもいいよね。

同意だよ、Webコンポーネントはフレームワークを必要としないし、Reactでできることは全部できる(attributeChangedCallbackを通じたリアクティビティも含めて)。ゼロから始める人の視点で見ると、Webコンポーネントの学習曲線は実際にはReactよりもずっと緩やかだよ。さらに、Webコンポーネントは良いパターンを強制する。属性として文字列しか渡せないのは実際に天才的で、シンプルでミニマリストなコンポーネントインターフェースを促進し、Reactコミュニティが防ぐために全く新しいパラダイムを発明しなければならなかった参照渡しの問題を避けることができる。皮肉なことに、今でもReactを推してるトップの人たちの多くは、Facebookの株で裕福になって、もう働かなくてもいい人たちだよ。実際、彼らはこの技術を若い人たちに押し付けていて、彼ら自身はもう使う必要もないし、コーディングもしなくていい。そんな中で、業界を離れたい(または離れた)開発者がたくさんいるのは、状況がひどくて、自分たちが決定できることが少ないから。サイドプロジェクトで使っている良いツールがあるのに、劣悪なツールで働くのは士気が下がるよ…こういう状況を見ると、「会社が自分のツール選びを非効率にさせるなら、他の方法でも非効率でいる権利がある」と思ってしまう。個人的には、もうコーディングはしてない(サイドプロジェクトだけ)。クリーンでミニマリストなコードを書くのが得意なのに、それが残念だ。日常の仕事では、n8nやFlowise(AI用)のドラッグアンドドロップUIプラットフォームを使ってる。コンパイルステップなしで、実際にお金がもらえるプロジェクトでバニラJSを使えるのは爽快だ。これらのUIプラットフォームは、Reactよりもずっと予測可能に扱える。Reactを使ってた頃(ほぼ10年)、奇妙なグリッチや状態管理の問題を常にデバッグしてたけど、Webコンポーネントやn8nのようなプラットフォームではそんなことは一度もなかった。

Reactから完全にビジネスを移したから、Metaの tinkererたちが2年ごとにReactを再発明して、名前を何度も使い回すことを心配しなくて済む。Webコンポーネントは素晴らしい。これが本当の未来だ。

大企業では、内部アプリ用に中央集権的なReactライブラリを使うことが求められてる。だから「デフォルトでReact」じゃなくて、「Reactが唯一の選択肢」って感じ。中央ライブラリをWebコンポーネントとして再実装することで、好きなフレームワークを使えるようにするのが私たちの道だと100%同意するよ。

誰か、ReactのUIライブラリの中でウェブコンポーネントを使って成功したことってある?オリジナルのデザインシステムでコンポーネントライブラリを作るとき、RACみたいなヘッドレスライブラリに頼れるのがすごく嬉しいんだ。基本的なコンポーネントの実装がアクセシブルで、タッチデバイスでもうまく動くからね。理論的にはウェブコンポーネントが補完的なツールになり得ると思うけど、実際にはどこで使うのがベストかは分からないな。

「多くの人がウェブコンポーネントをフレームワークの競合と見なしているけど、実際にはそうである必要はない。ウェブコンポーネントはコンポーネント実装とブラウザの間のインターフェースを定義するだけで、相互運用性と信頼性のある構成を可能にする。」 私はフレームワークを避けてる。プレーンJS、ウェブコンポーネント、いくつかの良いドメイン特化ライブラリがあれば、私のニーズは十分に満たされるよ。

強く反対だね。Web Componentsは、違う服を着たReactに過ぎない。ブラウザ用のアプリを書くのに、コンポーネントベースのフレームワークスタイルのアーキテクチャは必要ないよ。ブラウザ用のアプリを書くのは全然難しくないから。大きなフレームワークや同じようなコンポーネントの狂気は必要ないんだ。

フロントエンドのモノカルチャーについて心配する理由は確かにあるけど、以下のはそのポイントを否定するつもりじゃなくて、興味深い観察だよ。10年前は、モノカルチャーの逆だった。毎週新しいフレームワークがHNのフロントページに載ってたし、Angular 1.xから2.0への移行は大混乱だった。フロントエンド開発者の苦痛を表現するために「JavaScript疲れ」なんて言葉を作る人もいた。やっと落ち着いて、Reactが間違いなく勝った。まだその影響でちょっとぼんやりしてるけど、ウェブコンポーネントを学ぶのはキャリアに悪影響が出るまで避けるつもり。Reactを褒めてるわけじゃないけど(フックが好きじゃないし、私の意見なんて大したことない)、2015年じゃないことには満足してるし、構築に集中できるのが嬉しい。時間が経って、感情が少しずつ変わってきてるのが面白い。

Reactが「勝った」のは、最良だからじゃなくて、安全なデフォルトになったからだよ。みんな知ってるし、雇うのも簡単だし、エコシステムも巨大。安定性にはいいけど、革新にはあまり良くないね。多くのチームはSvelteやSolidみたいな軽量オプションすら見向きもしない。Reactはまだまだ問題なく動くけど、実際のフィットよりも慣れで頼ってる感じだね。

俺は長いことReact開発者やってるけど、ほぼ最初から(13年くらい?)、30以上の大きいプロジェクトや小さいプロジェクトに関わってきたし、ずっと声を上げてきた。最近、ReactをやめてLitとWeb Componentsに切り替えたけど、めっちゃ満足してるよ。

うちのフロントエンドチームは、たった一つのフレームワークにこだわらないんだ。いくつかのフレームワークを同じアプリのコードベースで使ってる。React、AngularJS、Angular、Vue(これ始めたのかな?)に、ちょっとだけjQueryも。これはSPAなの?フレームワークごとにページがSPAになってるよ!古いコードを全部移行する根気もないし、リーダーシップもない。みんなその時々の流行を取り入れて、なんとか動かしてる感じ(まぁ、話す相手によるけど)。