僕のフロントエンド技術に対するスタンス

僕は日頃からReact Hooks + TypeScript 最高だの言ってますけど、実のところ、それらを超えるモノが登場したら一瞬で「React Hooksなんて過去の技術だよねー、#にゃーん(社会性フィルター)」とか「TypeScript?へなにそれ?過去の言語ですよね」とかボロクソに言ってる自信があります。

補足: ボロクソにいうとは限りません。その頃に、単に手のひらクルーって返してるだけで、新しい技術を「〇〇+□□最高!」って言ってるだけになるように、人格的に成長してるかもしれませんw

僕にとっては技術はただの道具にすぎません

道具に対して必要以上の思い入れもしなければ、信仰する気持ちもありません。というより今あるクソなモノよりマシなものを求める渇望がここ数十年ずっと続いてる感じです。

そんな僕が判定するフロントエンド技術の数々を書いてみます。ブログなんでぶっちゃけテキトウで率直な感想です。あとエビデンスの類いは特にこの記事では載せないので、信じるも信じないもあなたの自由です。(ただし、調べれば出てくるものばかりです)

React

Reactが、今後10年なくなる事は絶対にありえないでしょう。あのAngularJSですら未だに生き残っててて、おそらく4年後でも、なくなってないだろうなって考えると、確定でしょう。

今のReactは世界シェアで圧倒的なナンバー1です

ほんとかどうかは知りませんが、シリコンバレーのエンジニアも「8割はReactで2割はAngular」って言ってたらしいです。知らんけど。ドイツでも「Vueなんて聞いたことない」とか?知らんけど。

その真偽はさておいても、npm.incやGitHub、そしてその他の各種統計調査を見ても、Reactのシェアがナンバー1であり、圧倒的独占状態が数年続いてる事は調べればすぐ分かるはずです。面倒なのでこの記事では取り上げません。

Reactがなぜここまで支配的な地位にあるか?は「Reactがもたらしたものは概念のリプレイス、パラダイムシフトにこそ価値がある」ということが理由だと考えています。

SPAフレームワークならAngularJSの方が先でしたし、仮想DOMもそんな格別すごい発明ではありません。フロントエンドというコナン・ザ・グレイトの支配していた野蛮な世界に「抽象化・制約」をもたらしたこと自体が功績です。

その観点でいうと、いまReactをリプレイスできそうな「新しいパラダイム」はまだ観測されていません。VueもAngularも他にあるライブラリ・フレームワークも、ベターReactを目指してはいても、決してゲームチェンジングをもたらすものではないからです。

Reactを置き換えるものは、Reactに対してゲームチェンジングをもたらすものでないと無理でしょう。現時点でシェアが支配的であること、開発リソースが潤沢にあり、資産も豊富なためです。ちょっとやそっとのベターReact程度のものに乗り換えるメリットはありません。

Reactの次は、ゲームチェンジングをもたらすものが、世の中に観測されてからがスタート地点となります。

React Hooks

React Hooks は、React 自身が出した旧来の React に対するゲームチェンジングです。React -> React + FLUX -> React + Redux -> React + Redux + redux middleware -> React SFC + Redux + redux middleware + HoC という、やけくそに変異しまくったややこしいクソみたいな歴史にいったん終止符を打つのが React Hooksです。

難点はReact Hooks 自体は基礎の仕組みでありカスタムフック関数を主軸に新世界秩序がもたらされるため、細かいライブラリ選定はまだ戦国時代であるという点は無視できません。その時々でベストかベターを選ぶしかありません。

ただ、React Hooksは間違いなくReactにおける主流です。

React登場以後、ウェブもモバイルも、UIライブラリ・フレームワークは、React的なものになりました(VueもAngularもReact的なものです。細かい差異は誤差に過ぎません)。

同様にReact Hooksも、その概念は、ウェブ・モバイル問わずGUI開発全域に伝搬していくと予想できます。

TypeScript

TypeScriptは、スクリプト言語であるECMAScriptそのものでありつつも、現実的なバランスで、最良の静的型付けを提供する、とても現実的なプログラミング言語です。(TypeScriptが他の静的型付け言語よりも優れているという主張ではありません。その手の議論は犬でも食わせておけ)

Reactが世界シェアを握ってるのと同じようにTypeScriptも世界シェアの過半数を握っています。

React自体はFlowによって記述されていますが、互換性の高さによりTypeScriptフレンドリーであり、FB社以外では実質、ReactはFlowではなくTypeScriptとセットで使われています。

今の所、TypeScript以外の選択肢は考慮する価値がありません。

React Hooks + TypeScript は現在選びうる唯一の現実的な選択肢です。

ただし、ECMAScript2015+ も TypeScript も、決して最良・最高・最善の言語仕様とは程遠いでしょう。他の言語に比べて明確に劣る点は、ほんとんどないですが、決して理想の言語ではありません。

筆者はIF式とパターンマッチとエラー周りの改善は最低限導入して欲しいと考えていますし、他の人も何かしら欲しいものがあると思ってるでしょう。

言語が登場しシェアを握るまでの時間を考えると、少なくとも業務において、5年単位のスパンではTypeScript以外を考慮することはないはずです。

Vue

日本や中国など、地域レベルで見ればある程度のシェアを持つライブラリ・フレームワークです。世界シェアで見たときはAngularJS+Angularよりもシェアが劣ります

TypeScript対応に時間がかかりすぎているため、スタート地点に立つことが厳しいというのが筆者の個人的な認識です。

Vueは細かな違いはありますがReact的なものです。パラダイムシフトをもたらすほどの大きな違いはありません。VueをやっていればReactもできるはずですし、逆もまた真です。

世界的には興味関心を引いているものであり、シェアが伸びる可能性自体は示唆されています。

AngularJS

2014年に登場し、未だにしぶとく生き残って、世界中のレガシー担当エンジニアから憎しみを集め続けているフレームワークです。バージョン2以後はAngularという名前に変わりました。

2021年6月には完全にサポートが終了する予定ですが、おそらくそれ以後もしぶとく一定のシェアを保つでしょう。間違いありません。簡単には滅ぼせないんです、ヤツは。

それは、AngularJSの持つ充実しすぎたフレームワークっぷりが主原因です。AngularJSをAngularなりReactなりにリプレイスするのはとても致命的な痛みを伴います。巨大かつ無秩序すぎて、移行はとても大変です(筆者も常々大きな憎しみを現在進行系で抱え続けています)

Angular

正直、AngularJSの資産や名前を捨てて、完全に新しいモノとして生まれ変わればよかったのにとは思います。不遇と言えば不遇なのでしょう。可哀想ですが自業自得です。

エンタープライズ方面では人気があるようです。知らんけど。

単体ではVueの方がシェアが大きいという資料もありますが、少なくともAngularJSと合わせるとReactに次ぐ世界シェアを持っています。

とは言え、Reactと比べると圧倒的に数字の差はありますし、AngularもReactに対してパラダイムシフトをもたらすほどの優位点はありません。

結論として、React/Vue/Angularはどれを選んでも、極端な差があるわけではなく、現行シェアや資産、洗練度合いの違いしかありません。Angularを覚えてからReactに移行することもできるでしょう。逆をやりたいエンジニアはあまりいないかもしれませんが、可能か不可能か?だけを言えば十分に可能なはずです。

現行のAngular開発だけでいうとゲームチェンジングの兆候は見られません。

Node.js

なんやかんや問題を抱えつつも、バックエンドJavaScript処理系としては欠かせない存在です。

最近のNode.jsはメジャーバージョンが変わっても、それほど大きなブレイキングチェンジはありません。ECMAScriptの新仕様に追従すること、セキュリティアップデートなどが主眼点でしょう。

ときどき古いネイティブモジュールがv10系じゃないと動かない!とか色々あって、v10固定をすることもあるでしょうが、基本的には常に最新LTSを選んでおけば大丈夫なはずです。v10がまだ捨てられませんが(個人的恨み)

NPM

存続が危ぶまれていたnpm.incも無事GitHubに買収されたことで、安定した基盤を確保できることが確定したnpmです。

まだ一部のユーザーにはyarnの方が機能面で人気がありますが、以前ほど逼迫した選択理由はなくなったと考えてもいいでしょう。npmとyarnで切磋琢磨を繰り広げてくれればとは思います。

Deno

最近無事v1がリリースされたDenoで、今後は伸びる可能性も十分あるでしょう。おそらく2〜4年くらいで、十分選択を考慮できる存在になっているのではないでしょうか?

鍵は、フロントエンドエコシステムがDenoで動くようになっているか?と、snowpack のような思想のバンドラの成長次第です。

今のNode.jsの強みはnpm資産の豊富さです。Node.jsの持つ負債でもありますが、負債も資産には違いありません。

今後のフロントエンドエコシステムがDenoに移植され、snowpack が十分に育って、何かしらのDeno対応レジストラが育てば、Denoを実用できるようになるはずです。

テンプレート vs JSX

テンプレートの方がデザイナーが触りやすいという言い方をされることがあります。JSXはデザイナーがいじるべきものではないと。

ですがそれは本当でしょうか?

・ デザイナー向けにJSXファイル(コンポーネント)を分離する
・ そもそもデザイナーが直接コードをいじる時代ではない(特にウェブアプリケーション開発において)

という2点に帰結するのではないか?と思ってます。ごく個人的な感想ですが。

CSS

手書きをするのはバカバカしいですが、かと言ってSCSSだのは仰々しすぎるため、現実的な落とし所は CSS in JS だと筆者は考えています。

これは先程のテンプレート vs JSX 議論に通じますが、ウェブアプリケーション開発でいえば、デザイナーが直接コードをいじるような時代ではないと思っています。

デザイナーも、インフラエンジニアのように、プログラマ寄りにシフトするか、デザイン専業にして、プログラマが使いやすいデータを吐き出すという方向性のどちらかに二極化するのではないでしょうか。

HTML

どのライブラリ・フレームワークを採用するにせよ、コンポーネント志向になることは間違いなくて、divタグのネストみたいな原始的な時代はもう捨てるべきです。

テスト/設計論

フロントエンドで弱い部分はここだと思っていて、もっとテストや設計論の話が盛り上がるべきです。

生粋のフロントエンドエンジニアは苦手なジャンルなため、バックエンド出身でフロントエンドにシフトしてるタイプのエンジニアが無双することになるでしょう。

フロントエンドエンジニアも、身の振り方はちゃんと考えるべきです。

モバイル

一時期は脱PC論みたいなのがあったものの、さすがにそれは立ち行かないことは、最近の外出禁止・自粛状態で全人類が悟ったところでしょう。

モバイル市場は、伝染病問題で一番影響を受けるものであり、様々な予測が無駄になる気がしています。知らんけど


この記事が気に入ったらサポートをしてみませんか?