この広告は、90日以上更新していないブログに表示しています。
変化の大きいフロントエンド周辺。後発のVue.jsも日本では人気ですし、日本では商業本がReactよりVue.jsの方が手厚く出ているという面白い状況になっています。
その一方、ダウンロード数でみると世界レベルで圧倒的に強いのはReact。世界レベルで使われているようなサービス、Facebookにインスタ、ネトフリなどなども軒並みReact。このはてなブログもReactが使われていますね。
さて僕は2017-2018年頃からフロントエンド方面も入門を始めました。半分仕事で調べた結果をフレームワークの比較記事にしたらはてブで突然バズってびっくりしたりしました。
今でも定期的にアクセスがあってありがとうございます……当時はまだまだ入門中だったので、本業のフロントエンドエンジニアの方々ほんまスンマセンという感じです。
現在ここまでReactが強く支持されるにはそれだけ強い理由があるはずなのですが、その理由について自分的にはいまいち納得感をもった理解がしきれていませんでした。最近TypeScriptを学びつつReact周りに再入門してみたので、この記事はその記録です。
TypeScriptに関する商業本としてはオライリー本の『プログラミングTypeScript』が2020年発で最新です。
React本としては技術同人誌界隈で以前から絶大な評判を集めていた『りあクト!』シリーズを読んでいるのですが、噂通りこれはすごい。今後商業本になるとBOOTHのメッセージで聞いたのですが待ちきれずに3.1版をゲットしました。
会社でUdemy for Businessが使えるので、Udemyの講座は以下のあたりを見ました。倍速で見たり実際にコードを書いたり、応用っぽいところは流しちゃったり。終わらなかったものもあります。
Udemyは評価の高いもの、受講者数や評価者数が多いものを選べばまず間違いないですが、上のものでは上の4つ、講師がはむさんのとじゃけぇさんのが特にオススメです。
自分の場合はできたものをGitHubに上げたら、LAPRASが検知して技術力スコアを上げてくださいました。ふふふ、どうぞワタシを優秀でイケてるフロントエンドエンジニアだと誤認してくださるがよいぞ……
ほか、我が家のぬいぐるみ軍団を動的表示するという何の使い道もないかんたんReactアプリを前に作ったのですが、React HooksとTypeScript版で作り直してみたりしました。
ts-node
,ts-node-dev
で小さなコードを逐一実行して結果を確認できるのが分かりやすいです。Eclipse
などでJava
を書いたりVisual Studio
でC#
を書いたりした時、コンパイルエラーを潰して潰して潰して全部なくなってご安全にオッケイ、のあの感覚に似たものを感じました。これからスケールしてコード量が増えていくJavaScript大規模開発でも安心だなというのは何となく分かります。React.FunctionComponent
型にする、props
をtype
かinterface
で定義して中身に補完が利くようにする、useState
などのHooks系も必要に応じジェネリクスで型指定、コンポーネント内の内部関数も必要に応じ引数や戻り値を明記、変数も型を明記……と、使うのはTypeScriptの基本的なところになるかと思います。これだけでも型推論やエラー表示のサポートだけで十分役に立ちますね。JSX.Element
型かReactElement
型でした。(どちらがいいのでしょう)SyntheticEvent
でやるやり方も、React.XxEvent<HTMXxElement>)
で細分化するやり方もありました。any
はダメ……anyを認めたら負けよ……と固い意志を持って潰していきましたwcreate-react-app appname --template typescript
からプロジェクトを作ればJavaScriptほぼと同じ感覚で始められますし、だいぶ敷居も低くなってきたのかなと。function hoge(foo) { ... }
というオールドスタイルが染みついてしまったワタクシはconst fn = (in: string): string => {}
みたいなアロー関数記法がなかなか慣れなかったのですが、Reactだと特にこれを多用しますね。やってくとだんだんこれが自然に思えてくるので、まあこのへんも結局慣れなのかなあと。React界隈のライブラリの変遷なども見てみるとJavaScript自体の高度なパワーをふんだんに使っていて、やっぱりこのへんはJavaScriptに強い人、(良い方の意味での)意識の高いエンジニアに支持されてきた玄人JSer向けのフレームワークなんだなという印象を改めて受けました。
タグに相当する部分を書く時のあのJSX、「JSXキモい」まではいきませんが自分も最初は抵抗を感じました(笑)。
return文を囲う( )
、タグの< >
、この範囲はReact側のJavaScriptの世界であることを示す{ }
、アロー関数の() => {}
なんかが混ざって何やら最初は黒魔術的に見えるんですよね。初心者が挫折しがちというのも分かります。これもいろいろ試行錯誤したりリファクタリングしたり、書いていくうちに体感的にだんだん分かって慣れてくるので、やはり慣れなのかなと。
map
関数の中に書いていくやり方は最初は「ん?」となりがちです。useState
を使うと状態が持てる。たとえばuserId
を持ったクラスコンポーネントだったらthis.state.userId
なのが、関数コンポーネントでconst [userId, setUserId] = useState(null)
を使うとconstな変数に入るからuserId
で済む。this
を見なくてスッキリ、ドットを書かなくてスッキリ、思考がスッキリです。シンプルにstateが入った変数やsetXxx関数が入った変数を子供のコンポーネントに渡していけばいいのでコードも簡潔になります。useEffect
も最初は「副作用」という言葉に戸惑うのですが、コンポーネント読み込み時、更新時、終了時……など時間的なタイミングごとにすべてのデータについて書かなくてよくなり、データの種類ごとにコードを集中させられる……というのが分かってくると確かにこれはコードの見やすさ上も進歩ですね。useReducer
など高度な機能はまだ理解しきれていないのですが、確かにこのHooks周りは大改革だなというのが分かりました。React+Redux
のようにほとんどReact本体同様にセット扱われていた状態管理のライブラリRedux
。よくFluxアーキテクチャの図もネットでは解説されましたし、若干ドヤ気味に紹介されたりもしました。しかしこのReduxも入門する側から見ると「この技術ほんとにいるの?よけいに難しくなってない?」という感じは若干ありました。useState
やuseContext
などを活用していくと状態をコンポーネントの外側で持てるので、あれ、もしかしてReduxは今後いらない子になっていくなるのでは……という気がだんだんしてきます。このへんの話も技術同人誌『りあクト!』の中が面白いのですが、どんどん進化していくのだなあと思いました。Atomic Design
に従って小さなコンポーネントを作っていったりで学ぶことができます。{children}
と書くだけで子要素に適用されたり...。JSXベースでコンポーネントを書いていくReactの思想はやはりしっかりできているのだなあというのがだんだん体感できてきました。Atomic Design
の思想に大まかに基づいたりして、できるだけ粒度を細かく小さくしたコンポーネント構成に向いているのはやはりReact。Vue.jsに向いているコンポーネントの粒度はもう少し大きいのかな……?という気が若干してきました。自分は手軽に使えるVue.jsもけっこう好きなのですが、本格的に始めるにはReact+TypeScriptも熱いですね。
小~中規模で完結する予定で手軽に開始したい、CDN経由やビルドシステム導入しないなどライトな利用、メンバーの学習にコストを掛けられない、HTML/CSSは分かってプログラミングは強くないデザイナー寄りの人と協業が必要……等の場合はVue.js。
一方、最初は小さくスタートでも今後src/components/
配下に粒度の細かいコンポーネントがバンバン増えていきそう、エンジニアの数も増員予定、アプリもスケールしてどんどん大きくなる……などのプロジェクトでは初期コストがかかってもReactを採用。途中でなく最初からTypeScriptを導入してがっちり型でガード。これから新規開発するなら関数コンポーネントとReact Hooks使用で統一。コンポーネント構成や開発ルールも定めつつ品質に目を配りながら、大きく育てていく……
もちろん逆も可だし一概に言えないのですが、大まかにはこういう感じの使い分けなのかなと思います。
いやはや、こういう正解のない世界は面白い。ということでReact力が若干高まった(ような気のするw)最近でした。
引退した元TRPGゲーマー。COBOLでもなくPL/Iの金融系レガシー紙駆動開発から脱出→国産メーカー系総合ITベンダーのITエンジニア。所謂SIerのSEだけど仕事はほぼソフトウェアエンジニア/ソフトウェアアーキテクトとして、Web開発でコードを書いたり技術を追ったり時々イベントに行ったり、楽しいエンジニアリングを目指しています。Views are my own.
お気軽にどうぞ~
リンク集:https://lit.link/iwasiman
AIイラスト関連の活動はこちら↓
https://www.chichi-pui.com/users/iwasiman/
https://pixiv.me/iwasiman
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。