本記事ではエンジニアにとってJavaScriptが必須のスキルである2021年の最新動向をまとめました。

プログラミング言語の中でも特にトレンドの変化が激しいJavaScriptですが、これからJavaScriptを学ぶ方々にとっては「現在流行っている技術は知りたい!」しかし、「すぐに廃れては困る。」と、お困りではないかと存じます。

そこで、本記事では現在のトレンドを抑えたうえで、弊社での導入事例や、なぜその技術が流行っているのかについて筆者の視点で考察していきます。今回はその第一弾としてフロントエンドで使われるJavaScriptについてまとめました。


【この記事で分かること】

  • 2021年におけるJavaScriptフロントエンド最新動向
  • フロントエンドで使われるJavaScriptのフレームワーク/ライブラリ6選の特徴
  • 今後利用率の増加が望まれるJavaScriptのフレームワーク/ライブラリ


【ターゲット】

  • JavaScriptの最新技術を習得していきたいエンジニアの方
  • JavaScriptで何ができるか、JavaScriptのトレンドについて学びたいIT関連職の方
  • JavaScriptに苦手意識をお持ちの初学者の方


【本記事のアジェンダ】


フロントエンドで使われるJavaScript6選

2020年Google検索ワード上位5位

上の画像は2020年にgoogleで検索されたワードの数を比較したものです。ここからわかることは2018年頃からフロンドエンドで使われるJavaScriptで最も多く検索されているのがreactというライブラリであることがわかります。続いて検索されているのはvueというライブラリなのですが、これら2つともSPA(シングルページアプリケーション)での開発を得意としています。そこから導き出せる2020年時点での世界的なトレンドは「SPAでの開発」ということが言えます。
逆に検索件数が減少傾向にあるのはangularです。こちらは(後述で詳しく説明いたします)フルスタックなライブラリでのMPA(マルチページアプリケーション)での開発が可能です。にもかかわらず減少傾向にあるというのはなぜなのかフロントエンドで人気な6選のフレームワーク、ライブラリの【最新動向】と【特徴】を見ながら見極めていきたいと思います。

日本語文献としてよく使われるサイトの記事数比較

 Quiitaの記事数stackoverflow(日本語版)の記事・質問数※参考stackoverflow(グローバル版)の記事・質問数
React.js18330255319,877
Vue.js1576525881,151
Angular6353252257,761
Ember.js248223,766
Preact.js1170365
Svelte.js26011,964

React.js
JSの利用率を示す調査では、ここ数年の間は常に1位となっており、2020年は80%を占めている。ただし、日本においての普及率はそれほど高くなく、その理由としては日本語版の公式ドキュメントがここ最近になるまでなかったことに起因して日本語の参考サイトがVueやAngularに比べてかなり少ない事が挙げられます。

◦Vue.js
2020年の利用率ではReactには及ばないものの49%を占めており、第3位に位置している。アジアでの人気が高く、特に開発者のEvan Youが台湾出身のためか中国で人気であると言われています。また特筆すべきは日本人にとってReactのようにドキュメントが少ないということもなく、学習コストに関してもReactやAngularに比べ低いため、普及率は高いと言える。 

◦Angular
2020年の利用率は56%とReact、Vueと並んでJavaScriptトップ3の一角であり、直近5年間は常に2位の座を占めています。 一方で以前と比べると人気は下火であり、他のフレームワーク、ライブラリに比べて動作が遅いことやフルスタックであることから学習コストが少々高いという特徴が難点となってしまっている。

◦Ember.js
2020年時点では利用率11%となっているが、2で016年の16%から年々減少しており、目的意識がはっきりしているReact、Vue、Angularと比べると中途半端感が否めず、利用率に関しても上記3者に押しやられてしまっている格好となっています。

画像に alt 属性が指定されていません。ファイル名: image-5-edited.png

◦Preact.js
2020年の利用率は5位の13%であるが、Reactの普及とともにPereactの普及率も徐々に高まっている様子。完全なる上位互換とまでは言えないが、早さとデザイン性の高さからReactを超える存在として注目されている。しかしながら、やはり日本語でのドキュメント数が少なく、利用者の少なさは否めない。

◦Svelte.js
2020年の利用率は15%とまだまだ高くはないが、2019年の8%から比べるとかなりの上昇率であり、今後もこの増加傾向は続くと思われる。利用率上位3者を超える高速さと、学習コストの低さから注目度は高いものの、日本語文献の少なさから日本での爆発力はまだまだこれからなのではないかと予想される。

◦React.js 

「Reactを使用しているサービス・企業」 
Facebook, Airbnb, DropBox, Github, Instagram, NetFlix, PayPal, セールスフォース, Shopify, Slack,スナップチャット, テスラ, Twitter, Uber, Udemy, WhatsApp 

「Reactとは?」 
Reactは2013年にオープンソース化されたUIを構築するためのライブラリです。ReactはFacebookの開発チームによって作成され、主にSPA(シングルページアプリケーション)やモバイルアプリケーションの開発におけるベースとして使用することができます。FacebookのUIを想像すればわかる通り、現在の時流に沿ったUIを構築することができます。

「Reactを一言で表すと…」
高速で動き、デザイン性抜群のライブラリ

「長所」 
Reactは主に以下3つの長所を有しています。 
Declarative-宣言的 
宣言的なプログラミングとはSQLのように方法ベースでプログラムを記述するのではなく、目的ベースで記述するものを総称したのが宣言的なプログラミングです。熟練のエンジニアであればここまでの説明で分かる方も多いかと思いますが、筆者含め初学者からすると何のことだかさっぱりわからないと思われます。なのでさらに具体的に言うと、宣言的でないプログラミングとはfor文やif文をはじめ、様々な選択肢を駆使しながら、どのように最終的目標となる結果を取得するかを考え、構築していくのがJavaなどの多くの言語でよくあるプログラミングのことです。一方で、宣言的であるReactはSQL文で記述するように、このデータが欲しい、この結果が欲しいというように、あくまで方法は考えずに、構築していくプログラミングのことです。このように宣言的なプログラミングを用いてアプリケーションを構築することは、可読性を高め保守しやすいというようなメリットがあります。またその結果、デバッグが容易になることや、プログラムのテストがしやすくなり、人を選ばないシステムを構築することができます。 
Component Based-コンポーネントベース 
コンポーネントベースとは細かい部品をつなぎ合わせ、組み立てていくようなプログラミングの方法のことです。機能ごとに分割した部品で管理をするため、コードの可読性や、拡張性の高いシステムを構築することができます。 
・Learn Once,Write AnyWhere-一度学習すればどこでも使える 
一度Reactを学習すれば、Webアプリケーションだけでなく、スマートフォンのアプリなどその他のあらゆる分野にも適応することができます。例えばReactがベースとなったReact Nativeというフレームワークを使用することで、AndroidやiOSのようなネイティブアプリ開発を行えたり、React VRというフレームワークを使用することによって、VRの開発も行うことができます。 
以上3つの特徴を持ったReactによって可読性を高めることができ、大規模開発になればなるほどReactの恩恵を受けることができます。 

「短所」 
Reactの短所としては「利用状況」でも述べた通り、比較的新しい言語であることから日本語でのドキュメントが少ないことに加え、開発環境を導入する手間がかかることなど、学習コストが高いというデメリットがあります。また、React自体の追加機能など、アップデート機会が多いため、エンジニアにもその都度、技術的なアップデートを必要とされます。  

◦Vue.js

「Vue.jsを使用しているサービス・企業」 
Xiaomi,Alibaba,Nintendo,DeNA,LINEなど 

「Vueとは?」 
Vue.jsは、2014年2月にリリースされたJavaScriptフレームワークです。公式サイトのガイドではUI(ユーザーインターフェース)構築のためのプログレッシブフレームワークです。

「Vueを一言で表すと…」
初学者にも簡単で、日本語文献の充実した小規模開発を得意とするフレームワーク

「長所」 
・Easy to learn 
ReactはJavaScriptの拡張言語であるJSXという言語で記述することが標準となっています。またAngularはJSX同様にJavaScriptの拡張言語であるTypeScriptで記述されることが標準となっており、純粋なJavaScriptとは記述方法が異なるため、初学者にとっての参入障壁は少々高くなってしまいます。しかしながらVueはそのような参入障壁はなく、純粋なJavaScriptを使ってプログラミングすることが可能なため学習コストという面では、相対的に低いと言うことができます。 
・two way―双方向のデータバインディング 
ReactではデータからHTMLへの片方のみでしかデータバインディングができない。一方でVueは画面に入力すればデータにも反映されるように、双方向にデータバインディングができるという特徴を持っている。片方=単方向のデータバインディングでは、テキストボックスに文字を入力しても更新処理がされない限りデータに反映されないため、手間が増える(例えば更新するタイミングをイベントハンドラで設定する処理を記述する手間など)ということを意味しています。 

「短所」 
UIの開発に特化しているため、Vueというフレームワークに搭載されている機能は限られています。またSPA(シングルページアプリケーション)での開発を前提としているため、ページ数などの観点から大規模な開発を行うには向かないことが多いです。 

◦Angular

「Angularを使用しているサービス・企業」 
AWS(コンソールログイン画面など)、Microsoftアカウント、Upworkなど 

「Angularとは?」 
「Google」が提供しているオープンソースのクライアントサイド向けフレームワークで、2012年にリリースされた歴史の古いフレームワークながら、現在でも数多くのシステム開発に使用されています。ただし、Angularを扱う際に「AngularJS」または「Angular1」と「Angular」または「Angular2」には互換性がないため、技術調査の際は注意が必要となります。 

「Angularを一言で表すと…」
全てがそろってる、大規模開発向けフレームワーク

「長所」 
・フルスタック 
フルスタック=全機能なフレームワークを指向しており、Web アプリケーション開発に必要な機能のほぼ全てを搭載しています。そのため、複数のライブラリを組み合わせる必要がなく、SPAだけにとらわれない開発を行うことができます。 
・two way―双方向のデータバインディング 
Vue同様に双方向のデータバインドなため、記述量的には手間のかからない実装が可能です。 
・信頼性 
Angularを管理開発しているのがGoogleであるため、アップデート等の安心感という意味では他の追随を許さないかもしれません。 

「短所」  
まず第一に「AngularJS」と「Angular」は互いに互換性がないため非常にややこしいです。「AngularJS」とはバージョン1.x系統のことで、「AngularJS」というプロダクト名で開発されていましたが、バージョン2.x系統にアップデートされた際、アーキテクチャの抜本的な見直しが図られ、名前も「Angular」に改められました。 
AngularJS では JavaScript をベースとしたフレームワークでしたが、Angular では TypeScript ベースに改められ、文法も刷新されたため、AngularJS と Angular には互換性がないのです。 
またフルスタックであることは主に3つの点でデメリットにもなりえます。1点目はできる選択肢が多く、一つの結果を得る際も開発者によって変わるため、自由に開発できることでプロジェクトに混乱をもたらし兼ねないという危険性をはらんでいます。2点目としては初学者にとっては学習コスト的にはその分高くなることを意味してしまいます。そして最後3点目、ページ更新など、動作全体の動きが遅くなってしまうことです。SPAで開発することで多少軽くすることは可能ではありますが、それでもやはりほかの2者と比較すると重いという印象を持ってしまうかもしれません。以上の理由から近年の利用率が下がってきていることが伺えます。 

Ember.js 

「Ember.jsを使用しているサービス・企業」 
株式会社スクエア,ディスコース,LinkedIn,Netflix,Twich  

「Emberとは?」 
2013年5月正式リリースされたJavaScriptのオープンソースのフレームワークです。上記3者同様にSPAでの開発を主眼としています。JavaScriptのフレームワークの中では歴史のあるフレームワークとなっています。 

「Emberを一言で表すと…」
VueとAngularの間、Vueよりも機能が豊富でAngularよりも早いフレームワーク

「長所」 
・two way―双方向のデータバインディング 
Vue、Angular同様に双方向のデータバインドなため、記述量的には手間のかからない実装が可能です。 
・フルスタック 
Angularほどの機能は持ち合わせていないが、機能的に軽量のReactやVueとは異なり、リッチなフレームワークとなっています。 

「短所」 
Angular同様にフルスタックを目指すフレームワークのため、学習コストが高いてしまいます。また世界的な普及とともに日本語ドキュメント増えてきているReactとは異なり、Emberの日本語ドキュメントは未だに少ないのが現状です。世界的に見てもEmberのアクティブユーザー(現在も使用している開発者)は3%程度であり、この問題が解決されることは困難を極める可能性が高いです。 

◦Preact.js

「Preact.jsを使用しているサービス・企業」 
テンセント、ウーバー、Lyft  

「Preactとは?」 
PereactはReactサブライブラリであり、Reactよりも軽量で高速であることが特徴です。そのため、Reactとも互換性があり、開発中はReactで開発し、本番環境ではPreactを使用することが往々にしてあります。 

「Preactを一言で表すと…」
Reactをさらに高速化させたUI抜群のライブラリ

「長所」 
基本的にはReactとの互換性もあり、機能的に劣るということはない。むしろページ読み込みなどのロード時間はReactよりも速く、クライアントには良いユーザー体験を提供できるかもしれません。 

「短所」 
短所もReact同様日本語ドキュメントが少ないために、技術調査が困難になる可能性が高いことが挙げられます。 

◦Svelte.js 

「Svelte.jsを使用しているサービス・企業」 
楽天,New York Times  

「Svelteとは?」 
2016年にリリースされたJavaScriptのオープンソースのフレームワークです。特徴としてはReactやVueに比べて非常に高速で動き、とても軽いことです。JavaScriptのフレームワークの中では後発組であり、発展途上ながらもReactやVueの欠点を解消するように開発されたので、機能的も目劣りするということは全くありません。また、仮想DOMを利用していないためビルド時にコンパイルを必要とします。 

「Svelteを一言で表すと…」
React、Vueを超える速さで、学習コストが低く、汎用性の高い次世代のフレームワーク

「長所」 
・high performance 
先述した通り、Svelteはコンパイルを必要とするため、ほかのどのJavaScriptのフレームワークよりも迅速に動くことが特徴です。 
ReactやVueに比べ、コードの記述量も少なくなるよう設計されており、平均してReactの2倍~3倍、Vueの1.5倍~2倍少なく記述できます。記述量が少ない=善であることが必ずしも適当であるとは言えませんが、開発スピードが向上する可能性があるという意味では、記述量が少ないことはエンジニアにとってとてもありがたい性能ではないかと考えられます。 

「短所」 
Reactと同様に現状日本語のドキュメントが少ないこと、英語ドキュメントに絞っても後発組のフレームワークであるため、技術調査に時間がかかる可能性があります。またTypeScriptを使用することが前提のため、Vueに比べると学習コストがその分かかることが予想されます。加えて管理開発が個人に依存しているという意味ではバグやセキュリティ的な問題が発生している場合のアップデートが必ず行われるかについてはFacebookのReactやGoogleのAngular、コミュニティで管理されているVueに比べると、不安が残るかもしれません。 

以上6つのJavaScriptのフレームワーク、ライブラリを比較しフロントエンドにおける時代の潮流は何なのかを改めてまとめます。
まず第1に動作が高速であるかどうかが人気を左右していると言えます。どんな時代であれ動作が早いことで生まれるデメリットはなく、UX(ユーザーエクスペリエンス、ユーザーの使いやすさ)視点で見ても動作が早いということだけで評価の高いアプリケーションが構築できます。
2つ目に学習コストが高いか低いかという点です。単に純粋なJavaScriptで記述できるかどうかだけでなく各国それぞれの言語の文献が豊富かどうかという点で学習コストの高い低いが評価されています。とりわけ日本で言えば世界で人気であるはずのReactがVueに比べて利用率が高くないのは日本語の文献が豊富かどうかが大きく起因していると推測できます。
時代の潮流3つ目はフレームワーク/ライブラリに実装されている機能が汎用性の高いものかどうかです。3つ目に関しては逆説的ではありますが、機能が充実している、汎用性が高いことが人気を左右しているとは言えない、時代の潮流ではないという理由で機能の充実さを3つ目としました。機能の充実さが時代の潮流ではないと言える理由は様々考えられますが、私の考えでは主に2点あります。まず、機能の充実さによって動作が遅くなるのであれば、動作の早い方を選択しているという理由です。AngularとVueを比較すれば一目瞭然ですが、機能の充実さのあるAngularの人気が下火であるのに比べ、高速さが売りのVueの人気は上昇しています。また機能が充実しているということは、搭載されている機能全て扱えるようになるまでのには想像よりもはるかに時間がかかり、2つ目で紹介した学習コストが高くなると言わざるを得なくなるためです。その他にも今求められている機能はフルスタックでなくても賄えるようになっていることや、マイクロ開発によって機能ごとにフレームワーク、ライブラリを選択できるようになり、1つに絞る必要がなくなったという点も挙げられます。
以上のことから私の考えるJavaScriptのフレームワーク、ライブラリをを選択する時代の潮流は1:高速かどうか、2:学習コストが低いこと、3:フレームワーク/ライブラリに実装されている機能は汎用性の高いものでなくてもよいの3つとなります。そのうえで今後より人気になる、利用率が増えそうなものはSvelteです。日本語文献が少なく、2つ目の学習コストが高くなってしまうことと矛盾しているようにも思えますが、言語対応はReactを見ればわかる通り必要とされれば各国の言語に翻訳され、年々記事の数も増えています。また、Google翻訳機能を使えば6割~7割程度の内容は元々が英語の記事であっても何を言っているのかは理解できます。そのため、今後利用率が増加しそうなフレームワーク、ライブラリを1つ挙げるとすると筆者はSvelteを選びます。