2021年に学ぶべきJavaScriptフレームワークは何かね？

# Discussion Threads

[dev.to](https://dev.to/)では[Discussion Threads](https://dev.to/t/discuss)という、議論やコメントが前提の記事を立てることができます。
まあ見てのとおり、大半のスレッドは閑古鳥が鳴いてますが。
最近盛り上がったスレッドとしては[Show off your Workspace](https://dev.to/xenoxdev/show-off-your-workspace-5a95)、日本でいうところの環境晒しスレがあります。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/1b493d96-33f7-62fb-86e2-7a9be433f09e.png)

みんな格好いい環境ばかりで驚きですね。
これはもう私も[自分の環境](https://qiita.com/rana_kualu/items/59ae831ab63a149a601e#%E3%83%87%E3%82%B9%E3%82%AF%E7%92%B0%E5%A2%83%E6%95%B4%E5%82%99%E3%81%8C%E5%BF%85%E8%A6%81)を晒して世界を絶望と混乱の渦に落とし入れなくては。


# 2021年に学ぶべきJavaScriptフレームワークは何かね？

そんなわけで以下は、dev.toに先日投稿されたDiscussion Threadsのひとつ、[Which JavaScript frameworks are worth learning in 2021?](https://dev.to/ben/which-javascript-frameworks-are-worth-learning-in-2021-2h8p)のコメントを軽く抜き出してみたものです。

スレ主も`I am sure there are no right answers`と言っているように、決して正解はありません。
好きなものを好きなように主張する場です。
また定量的な評価ではなく、個人的意見の集合体であることに注意してください。


## Vue

Vueを気に入ってるのは、HTML、CSS、JSへの関心が分離されているところ。

私がVueを始めたのは入門が簡単そうだったからだけど、HTML、CSS、JSがどこにあるのか明確でわかりやすくてよい。

素人が初めて学ぶならVueをお勧め。
JS始めて3か月だったけどVueにはすんなり馴染めた。

元々ReactとNext使ってて非常に便利だったんだけど、ただドキュメントが少ない。
Hooksが出てきたときにComponentとHooksが混ざって現場がとても混乱した。
今はVue + Nuxtだけど、スタイルガイドなんかがしっかりしててわかりやすい。
でもNuxtよりはNextのほうが好き。

Vue3 + JSX + TypeScriptという怪しげなセットアップを愛用してる。
Composition APIは至高。

## React

2021年時点で最大のコミュニティと仕事があるのはReactで間違いない。

Reactの世界にいて、ほとんどのプロジェクトでNext.jsを使ってる。
次のプロジェクトではそろそろ[Blitzjs](https://blitzjs.com/)か[RedwoodJS](https://redwoodjs.com/)試してみたい。

Redwood使ってる。プリレンダも実装されたしいいぞ。

最初Reactが好きになれなかった。
一か月かかってようやく慣れたけど今ではJSXの仕組みが気に入ってる。

## Angular

米国政府で働くつもりなら最初に出てくるのがAngularと.Netだよ。
私は何故かReactのポジションをゲットできたけど。

AngularとReactだけど、エンタープライズレベルのアプリはAngular使ってる。

Reactのほうが人気だって知ってるけど、いまだAngularから抜け出せねえ。

## Svelte

コンパイラなので正確な意味でのフレームワークではないけど、Svelteがいいかんじ。
Gatsbyも好きなんだけどサイズが大きすぎてリッチアプリのためのものになってる。

Svelteは2000年代前半のようなHTMLの世界に戻るように見えて、reactivityやcomponentsといった現代的な要素も取り込んでいる。
始めやすく、簡単で早く、ドキュメントも充実してる。
ただ求人とか少ないんで、遊ぶのにはいいけど求職するならReactやったほうが今のところは安全。

Svelte大好き。
時々出てくる生っぽい部分には気を付けないといけないけど、多くのVirtualDOMよりずっとはやい。

それならRiotJSもチェックしてみよう。
Svelteに大きな影響を与えたフレームワークさ。

SvelteKitできまり！

## Alpine

Laravel開発者としては[Alpine.js](https://github.com/alpinejs/alpine)に一票。

Rails開発者としてはAlpine.jsに一票。

Vueが好きだけど、小規模プロジェクトにはオーバーキルすぎるのでそのときはAlpine使ってる。

大規模プロジェクト作るときはVueだけど、一人で小さなプロジェクトを作るときはTALLスタック(Tailwind・Alpine・Laravel・Livewire)使ってる。
Alpineは昔のjQueryみたいなもんだ。
巨大なシステムを作ると死ねるが、ちょっとしたシンプルなものを作るなら完全無欠。



## その他

マイナーだけど[Solid](https://github.com/solidui/solid)いいよ。
React hooksにインスパイアされたAPI、TypeScriptとJSXをサポート、クレイジーなパフォーマンス。

Web componentsに関して、[LitElement](https://lit-element.polymer-project.org/)は今のところ最高のAPI。
フレームワークに依存しないコントローラレイヤがあり、ReactやVueでも使えるフックのようなものを作ることもできる。

TSXが好きなら[Stencil](https://stenciljs.com/)もいいぞ。

shadow DOMでWeb componentsを作ってCSSを完全に分離できるStencilに注目してる。

主にバックエンド中心なので、読みやすくてちょうどいい[Stimulus](https://stimulus.hotwire.dev/)を愛用してる。

バックエンド担当なんだけどNestJSがとてもよかった。
あとfastify adapterを追加したら3.5倍高速になって幸せ。

VanillaJSこそ至高。


## 人による

どのフレームワークにもメリットはあるから、自分が本当にやりたいコアスキルに必要となるものを選ぶといいよ。
個人的にはVueの参入障壁がとても低いので入りやすかったし、今でもできないことはない。
あとAngularを学ぶときにVueの知識が役立つ。
ReactはJSXを多用しててつらみだけど、多くの企業で採用されてるし、優れたサポートがある。
GraphQLを理解したかったのでGatsbyを学びたい。


# 感想

めいめいが好き勝手に言ってるだけで、全然まとまっていません。
まあ纏めるのが目的ではないから当然ですが。

単語の出てきた回数を拾っただけなので正確なシェアというわけではありませんが、出現回数はReactとVueの2つがそれぞれ50回強です。
次いでAngularとSvelteが10数回、それ以外はほぼ一桁前半と、ほぼ決着がついているレベルの差がありました。
目的があるなら別ですが、2021年にとりあえずJavaScriptを始めてみたい、という段階であれば、ReactかVue以外の選択肢はありません。

そして最近は、これらに匹敵するようなフレームワークも生まれてきていません。
Svelte最近伸びてるじゃんって思うかもしれませんが、いうてもこいつ登場したの2016年ですからね。大昔ですよ。
ReactVueを蹴散らすような新たなトレンドが次に現れるのはいつの日になるでしょうか。