[Twitter] React ユーザーが Vue を選ばない理由
概要
本記事は、 Vue.js
コアチームメンバーである @antfu7
氏の以下ツイートに対する回答を個人的にまとめたものです。
React ユーザーの皆さん、
好奇心で聞くのですが、Vue を使ったり試したりするのを妨げているブロッカーや欠点は何ですか?
注意事項
対立煽りっぽいタイトルにはなっていますが、個人的な好奇心がモチベーションとなっており、特定の技術を贔屓、批判する意図はありません。
私自身は長らく Vue
を愛用しており、業務でも大規模 Vue アプリのメンテに携わっている一方で、React
は小規模プロジェクトや個人開発でしか利用していません。そのため、理解度に差がある状態であるため、改めて Vue
と React
の対比やそれぞれの良さを実感したいと思い、一通りのツイートに目を通した次第です。
また、 Vue.js
の生みの親である Evan You
氏が以下のようにツイートしている通り、回答に含まれる Vue
に対する不満点の多くは Vue 3 及びそのエコシステムで解決されているものを含んでいます。
素晴らしい文化的な議論です。とはいえ、Reactユーザーの中には、Vueを数年前にちょっと試したときの経験に基づく認識がまだ残っている人がたくさんいるような気がします。
私はまだ、「React開発者のためのVue 202x版」ブログ記事を完成させる必要があります。
さらに、いくつかの回答に対しては Vue
ユーザーの方々からのフォローも入っているので、合わせてみてみると Vue
もイケるじゃんともなってくるのでオススメです。
React ユーザーはなぜ Vue を選ばないのか
本題です。すべてのリプライに目を通しつつ、いくつかの観点別に、代表的なツイートを抜き出しています。
エコシステムの成熟具合
Vue
が順当な進化を経て機能上の差異がなくなってきたことにより、これが大きな理由となるケースが多いようです。
React
は Vue
と比べるとフレームワーク (Next.js
) やデータフェッチライブラリ (SWR
, tRPC
) などの成熟スピードに差があり、常に最善の選択ができることが理由としてあげられています。
特に Vue
は Vue 3 への移行がエコシステム全体で追従しきれていないため、依然としてモダンな構成の選択が限られることが問題視されています。 (とはいえ Vue
はコアチームから VueRouter
VueI18n
などの主要なライブラリが出ているのが救いではある)
個人的にも React
のエコシステムに対する安心感を羨ましいと思うことがあり、特に Storybook
のような開発支援系ツールは React
を先行してサポートする傾向がある印象があります。
TypeScript のサポート不足
React
は TypeScript
との相性が非常に良く、複雑なセットアップを行わずともすぐに型安全な開発を行えます。
一方で Vue
は SFC (.vue
の拡張子を持った独自のファイル) を扱う都合に TypeScript
で扱うのが困難です。Vue 3
によって型サポートは大きく向上したものの、 Volar
を主とする IDE とのインテグレーションの手間はまだまだ残っています。
Vue
でも vite
でスキャフォルドするなど、ベストプラクティスに則ったプロジェクト構成を採用すれば基本的には何とかなる印象ではありますが、やはり React
は型安全の面でも先行しているように見えます。
React
は Vanila JS により近いため
多くのユーザーが React
はコンポーネントを第一級オブジェクト(first-class citizens
) であることから、純粋な JavaScript
に近いことを理由にあげています。
対する Vue
が SFC という、独自のコンパイラ (vue-template-compiler
/ @vue/compiler-sfc
) を必要とする構成であることから、前述のエコシステムの成熟のしづらさにもつながっています。
また、JSX
に対する評価が高く、 Vue
の template
が DSL 寄りであるのに対し、 JSX
はレンダー関数の糖衣構文に過ぎないという点が重要なようです。もちろん Vue
でも SFC を使わずに、 JSX
を使ってレンダー関数を定義するという選択肢はありますが、一般的には SFC が使われることが大半で、推奨もされている ことから区別して扱っています。
なお、回答に対する反応として、「JSX
が苦手で使いたくない」というテンプレート派や、「Vue
のテンプレートは HTML 構文にほんの少しのカスタムディレクティブを追加しただけで DSL ではない」という声もありました。
React Native の存在
意外と多かったのがこちらです。 Web 技術を用いてネイティブアプリを開発する上で React Native
を採用することが多いからという理由です。
Vue
でも capacitor
などのクロスプラットフォーム開発ツールを採用することでネイティブアプリを開発を行えますが、 React Native
のシェアはまだまだ無視できないようです。
個人的にはクロスプラットフォーム開発のトレンドは移り変わりが激しいので、 React
そのものを推す理由としては弱いかなと感じました。
好みでなくシェア率の問題
技術に対する大きなこだわりがない場合の最大の理由がこちらでした。
日本国内では Vue
が一定のシェアを持っているため気づきにくいですが、 React
一強となっている英語圏においてはそのシェア率の高さがシェア率をさらに高めているのでしょうか。
感想
ツイートを読みながら思ったこと
-
React
を使うニーズの多くは、Vue 3 でも満たせるようになったから、今後の宣伝次第ではシェアを奪える可能性もある…? - と言いつつ、 Vue 2 から Vue 3 へのマイグレーションの難しさ、未完成のエコシステムが足を引っ張りはするかも
- 第一級オブジェクトであることの重要性はやっぱり高いみたい。コンポーネントを第一級オブジェクトだからこそTSサポートもしやすく、エコシステムが成熟しやすいのかな
- シェア率、既存プロジェクトの数、会社の方針からっていう単純な回答が思ったより多い
- Composition API を評価する声はそこそこあったので、やっぱり
React
ユーザーにも刺さってはいるのか - 双方向バインディングに関する声が少なからずあるけど、あれは糖衣構文で同じことは React でも出来るから論点としてはズレてる気がした
- 「React Hooks がクロージャーであることを理解すればその実態はシンプルだ」って話もあったけど、自分はそこの理解が甘いからまだ難しく感じてるのかも
まとめ
本記事では、React ユーザーが Vue を選ばない理由のツイートについて整理しました。
取り上げたツイートは全体のごく一部ですが、一通りのツイートに目を通した限りは概ね本記事のような傾向だったと思います。
私自身、 React
にあって Vue
に足りないものを改めて実感しながらも、それでも Vue
のここが良いよねというポイントを再認識したり、今後の Vue
の進化にさらなる期待を感じる点もあったので良い機会になりました。
そもそも Vue
と React
は根本の思想が異なる点が多くアプローチも全然違うため、優劣を付けるのではなく、それぞれの強みを伸ばして互いに刺激しあって成長していけば良いなと感じました。
Discussion
自分も antfu のこのスレッドを前に興味深く読んでいたのですが、こうして観点ごとにまとめるられているとすごく読みやすくなりますね。面白い記事をありがとうございました!
ところで、今英語圏で割とバズっている記事があり、内容的には React に対する愛憎という感じで、この記事が面白かった人は同じように楽しめるのでは、と思ったので、Hacker News のリンクと共に紹介しておきます:
コメントありがとうございます!
もう少し React ユーザーの React に対する不満の視点の情報もほしいなと思ってたので拝読致します!
追加ですが、Dan Abramov が上の記事に対して以下のツイートのスレッド内で詳細にコメントしていますので、興味ある方はこちらも必読です(なんか色々とぶら下げてしまってすみません...):
個人的には最後のマーケットシェアが大きいかと思います。ほとんどのエンジニアに技術選択の決定権はなく、また海外ではフリーランスや3年前後で転職することからも、自然とReactを受身的に使用しているのかと。
特に海外では採用試験でまずコーディングテストがありますからReactを継続することになるのかなあと。