私が React を好きな理由
何かを好きになるのに、理由なんているかい?
~セ・ヤ (B.C.2525)~
出会い
あれはおよそ4年前のことでした。
2016年の冬、寒さに震えていた私はフロント未経験の身でありながらフロントの技術選定をしなければならなかったのです。
その頃のフロント界は混迷を極め、 React もまだ枯れておらず、Angular は2系が1系と大きく違うことから叩かれ、Vue が名乗りを上げようとしていました。「フロント界隈は動きが速い」というフレーズも流行語大賞になりそうな勢いでした。
そんな中選択肢・考えることの多さに絶望していた私は React を試しに触ってみました。
そして「思ったより覚えることないし、独自文法とかも少ないからミスってもリカバリー効きそうだな」と直感的に思いました。
はっきり言ってしまえば雰囲気で選んだのですが、今ならこの時の直感は間違っていなかったと自信を持って言えます。
なぜそう思うのか、もっと個人的な話、なぜ好きなのかを語っていこうかと思います。
なぜ好きなのか - シンプルであること
思うに、React の強みはそのシンプルさから来ているのではないかと思います。
「シンプルである」こととして「JS を JSのままで書ける」という特徴が大きい要因としてあるのではないかと思っています。
「JS を JSのままで書ける」とは
React のコンポーネントは次のように書きます。
const Component: React.VFC<Props> = (props) => {
return (
<p>JSXだよー</p>
)
}
これは普通の JS 関数となんら変わりなく props
という名前の状態を引数に JSX という JS オブジェクトを返す関数です。
あとは状態を扱うための hooks とそれのルールを覚える必要がありますが、基本的にはそれらを組み合わせるだけでフロントエンドを構築していくことができます。
「JS を JSのままで書ける」と何が嬉しいの?
JS を知っていれば大体書ける
React は基本的なところは JSX の書き方と hooks の使い方くらい知っておけば、大体のことはかけると思います。(これプラス色々周辺ライブラリの知識が必要なんですが、そこは他のソリューションでも同じでしょう)
個人的にはフレームワークが足枷のようになっている感覚が嫌いなので、この手のストレスがないのは好きポイント高いです。
ソリューションの多様化
先日こんなツイートをしました。
書き手の人口の話もあるかもしれませんが、React はライブラリの種類が比較的豊富な印象を受けます。また、JS の力をフルに活かせるからこそ「俺の思い描く最強の CSS の書き方」「俺の最強のルーティングライブラリ」などなどが開発しやすいのでしょう。
今でも日々多様な問題に対して多様な解決策が提案されているので、より品質の高い解決策に出会える可能性が高まっています。
確かにキャッチアップし続けたり、良し悪しを見極めるのは大変なところもあるかと思いますが、逆にそういった "より良い解決策" を自分で考えるのが好きな人にはベストな環境でしょう。
型との親和性
React では型をあてるのにトラブルがほとんどないのに対し、他のソリューションでは独自のテンプレート記法などを採用しているせいかテンプレート部分に型があたらないという残念な場面がよく見られます。
特に無理なく型の恩恵を受けられるのは一つ大きい強みなのではないかと思います。
なぜ好きなのか - hooks という神 API
hooks は本当にすごくて、HoC とか Render Props で頑張って切り出してたものがすごくシンプルに切り離せて「こいつは革命だ…」と思いましたね。hooks が出る前は HoC とか作るのがめんどくさくてロジック切り出すのが躊躇われていた部分もあると思うんですよ正直。まあ私が怠惰だけだったって話かもしれませんけどね。ただ、これがもうすごく楽にかけちゃうもんだから全然抵抗なく、むしろ切り出す方がスッキリして気持ちいいみたいな感覚に変わったんです。"シンプルに書ける"っていうのはすごい価値なんだなと思いましたね。いやはやあの API 設計を思いついた人(Sebastian Markbåge さん?)は天才ですわ。
...もう少し真面目に述べると、基本的に useState
という状態とその状態を更新するための関数、 useEffect
という状態の更新に応じて処理を行う関数という必要最小限のもので状態を扱えるのは素晴らしいの一言です。
なぜ好きなのか - React コアチームの先見性
React のコアチームががロードマップとして提案してきた API は他の宣言的 UI の書き方に取り込まれることが多く(hooks とか筆頭に)、時代の先を切り開く API を追加していっていると感じます。
このチームの人たちであれば余計な機能には時間を費やさず、本質的な機能を追加していってくれるのだろうという信頼感も、ある意味 React が好きな理由の一つにあるのではないかと思います。
(あとなんかみんなかっこいいよね。)
おわりに
React は私の職業人生を支えてくれたと共に、プログラミングにおける "シンプルさ" の価値を教えてくれました。
仮に将来 React より素晴らしいソリューションが現れたとしても、 React を通して学んだことは私の中で生き、支え続けてくれることでしょう。
ありがとう React、 Forever React。
Discussion