[和訳] AngularはReactに負けたのか？フロントエンド開発におけるフレームワークの選定方法

__こちらは2019.05.01にMediumにアップされたAphinya Dechalertさんの[Is Angular dying because of React?](https://itnext.io/is-angular-dying-because-of-react-a8e885f09421)を日本語訳したものです。__

## TL;DR
記事内において、[「結論」](#結論)では一つのフレームワークに固執することの危険性について言及されている一方、技術選定の際にReactとAngularで悩まれた場合に対するアドバイスとして、以下のように述べられています。
> スピードが求められるプロジェクトや予算が厳しいプロジェクトにおいては、おそらく React がハマるだろう。
もし学習コストに変えてでも頑強でがっちりとした構造が欲しいのであれば、Angular が第一候補となる。


以下、日本語訳となります。よろしければ元記事と合わせてご覧ください。Vue.js についても述べられています。

---

# AngularはReactに負けたのか？
Web開発の未来について  

フロントエンド界隈での流行がReactに傾く中で、Angularの今後の需要についてが疑問視されている。
どちらを選ぶべきかという問題について、今まさに悩んでいる方にとってはとても大きな問題だろう。

Facebook が React のライセンスを BSD から MIT に変えたことで、React は世界中の開発者のあらゆる領域に広まった。
しかし、React は小さなアプリを素早くスケールさせることのできるコンポーネントベースのライブラリであって、完璧なフロントエンドシステムというわけではない。このことに多くの起業家やスタートアップは気づいていない。

## React と Angular をめぐる論争

React が優れていることの証明として、 Facebook が典型的な成功例として取り上げられる。
しかし React は数多くある技術のうちの一つでしかなく、あくまでもJavaScript の UI "ライブラリ"の一つでしかないとも言える。

対する Angular に関して言えば、それは個々のユニットが密に連携をした、複数のライブラリの集合体である。

React には存在しない面を Angular が備えている一方で、React の理論的な実装は、Angular よりも優れているとも言える。
一般的に言って開発者は、自分自身が理解している技術に対して過大評価する傾向があり、より適したパラダイムの存在を受け入れることが困難である。こういった考え方は、開発者の思考を制限してしまい、結果的に成長を阻害してしまう。


React が人気であるにも関わらず Angular が強いサポートを保持しているのは、ひとえに Tech Giant である Google の力のおかげだ。これら２つのフロントエンドシステムにおいて、それぞれのカンファレンスや Debeloper Advocates の力 / 規模は、ほぼ同じ大きさであり、拮抗している。ただ、その一方で、Angular と React の間に立つ（現在においては）小人の存在を忘れてはならない…。

## Vue について話そう

Vue は新進気鋭の新人として２つの間に割って入り、React を追い抜こうとしている。
Vue は 軽量であるだけでなく、Angular よりもシンプルであり、React よりも機能性の面において勝る。これらの利点から、コミュニティはまだ小さいにも関わらず支持者を着々と増やしていっている。


思うにVue の製作者は、AngularJS の利点・欠点をしっかり把握した上で、その根本的な主義・思想については Angular よりも React に近い影響を受けているのではないだろうか。

## 採用のし易さと開発者支援について


React は簡単にどう移入することができるし、ReactNative によってモバイルアプリへと変換もできることから、初級開発者の間で人気が高い。


一方Angure は Reactよりも、多少ヘビーであり初期学習コストが高い。Java の思想とコンセプトを持っているし、Google におけるバックエンド技術の思想が、コード全般にわたって散見される。



両者について比較し始めるとキリがないが、大事なことは、React も Angular も強いコミュニティの支えのおかげで、簡単に始められる点だ。
しかしスタートアップにおいては、いかに早く市場へローンチするかという点と、流行や要求に対する即座の対応を鑑みて、React にやや比率が傾いていると言える。


だが、React の低い参入障壁は、ソースコードの品質を落としてしまう可能性があることに気づいていない企業も多い。
開発者がそれぞれ、てんでバラバラに学習を進めてコードを書いてしまった場合、プロダクトの品質は目も当てられないものになってしまう。
この点においてAngular に分があると言いたいわけではないが、Angular にはそれを防ぐStructure が備わっていることは確かだ。


Vue は開発者にとって、これら React と Angular の論争には巻き込まれていないようだ。

## Netflix は何を使っているか

Netflix は主にインフラやバックエンドの領域でReact を使用している。
Netflix の大規模なエコシステムにおいては、フロントエンドの React の比率は少ないと言える。

<!--PayPal uses Angular, as shown in the tell tale signs of ng here and there in the rendered HTML.-->  

一方 PayPal は Angular を使用し HTML をレンダリングしている。

<!--Both Netflix and PayPal are equally gigantic in their own right and both are completely unrelated to Angular and React the way Google and Facebook are.--> 
<!--Both have chosen React and Angular, respectively, as a solution for their front ends.-->  

Netflix と PayPal は、両者とも同じくらいの規模の大企業（サービス）であるが、Netflix は Angular を全く使用していないし、PayPal も React を使用していない。
それぞれ、別のもう一方を採択している。

<!--One could argue legacy code and whatever else, but both companies have more than enough money to hire an excess of developers to deal with their code base in the manner they want it to be dealt with.-->  

それぞれの企業において、コードのレガシー化などの問題はあるものの、問題解決を可能とする新たなエンジニアを採用するだけに十分な資金があるため、コードの運用において問題はないようだ。

<!--On a side note, GitLab uses Vue and has been using it since 2016.-->  

Vue に関しても述べておくと、GitLab において、 2016 年から使用され続けている。


## 問題解決に適したツールを検討すべき

<!--As the debate rages on what which framework or library is better than the other, no one seems to be asking the question -- which is the best solution for what we’re trying to achieve?-->  

どちらのライブラリ / フレームワークが優れているかということばかりが論争の対象となっており、「どちらがプロジェクトにより適しているか」ということについては誰も問おうとしない。

<!--If it’s speed of development on a tight budget then React is probably your best bet.--> 
<!--If you want something meatier and much more robust due to the learning curve required, then Angular is the choice.--> 
<!--Want the best of both worlds? Vue advocates will certainly put their hands up for this category.-->  

スピードが求められるプロジェクトや予算が厳しいプロジェクトにおいては、おそらく React がハマるだろう。
もし学習コストに変えてでも頑強でがっちりとした構造が欲しいのであれば、Angular が第一候補となる。
もし両方欲しいなら....Vue が間違いなく両方を提供してくれる（とVue 信者の方はいうだろう）

<!--Angular is not dying in popularity.--> 
<!--Rather, the attention has just been diverted.--> 
<!--While React might be eating up more of the development ecosystem and demand pie, Angular is still going steady despite React’s rising fame.-->  

Angular はまだまだ人気だ。
React がフロントにおけるエコシステムの覇権に手をかけていく一方で、着々と、地道に人気を獲得していっている。

<!--It is also worthy to note that Angular had to semi rebuild their community from scratch after it’s transformation from AngularJS.--> 
<!--While they had a ready audience, everyone had to relearn everything when Angular 2 came out.-->  

また、これも気に留めておくべき事項ではあるが、Angular は AngularJS から移行する際において、コミュニティ内で大改革が起きた。
沢山の支持者がいたにも関わらず、彼らは再度 Angular 2 を学習し直さなければならなかったのだ…。

<!--If we look at it this way, Angular as we know it today is actually younger than React by a good 3 years.--> 
<!--The original Angular doesn’t really count because of how different it is from Angular 2+.-->  

ただし新しいAngular は既存のものとは全く別物として生まれ変わったため、React よりも いい意味で3歳若いのだ。

## 結論

<!--

- proverbial ことわざ（風）の、ことわざにある、よく知られた、評判の
- versed （経験・研究によって）精通して、熟達して
- hung up -->

<!--If you’re a new developer trying to figure out what to learn -- don’t overthink it too much.--> 
<!--At the end of the day it’s all just JavaScript so it might be better to actually learn how that works first before jumping into the ‘fun’ stuff and make things happen.-->  

どの技術を採用しようか決められないのだとしたら…..あまり考え過ぎないようにしよう。
結局のところ、いずれもJavaScript であることに変わりはないのだから、とにかく手をつけるところから始めてしまおう。

<!--Whatever framework or library you end up with, you’re going to come into contact with transferable paradigms that makes it easier to pick up another framework or library.--> 
<!--The key is to learn your first framework well and go beyond the proverbial ToDo list app.-->  

例えどのフレームワーク / ライブラリを選んだとしても、後に別の技術を利用することになった場合には、先に学んだ技術の考え方がきっと役にたつだろう。

<!--Learn to be a developer that is well versed in programming paradigm and don’t get too hung up or attached to any one thing.--> 
<!--Dig deep into architecture structures, designing and developing components, understanding how data flows through the application and state management, among other things.-->  

__一つの技術に固執し過ぎないこと。様々なシステムについて精通した、いわゆる熟練のプログラマーになるためには、この考え方が大切だ。
アーキテクチャに対する深い理解、コンポーネントのデザイン / 開発、状態管理システムにおけるデータフローの理解….大切なことはたくさんある。__

<!--Being able to recognize and transfer these skills is what separates those who get stuck in the junior and intermediate levels from the real seniors.-->  

これらの技術を深く理解した上で実務へと活かすことができるかどうか、この点が初・中級者とベテランエンジニアの境目と言えるだろう。

---

### 感想と補足(訳者)
急遽Angularを触る機会がありまして、急ぎ情報を集めていた際にこちらの記事に出会いました。

Angularについては、日本国内では採用事例が比較的少ないように感じますが、StackOverflow の[Developer Survey Results2019](https://insights.stackoverflow.com/survey/2019#technology-_-web-frameworks)における[Most Popular Technologies](https://insights.stackoverflow.com/survey/2019#technology-_-web-frameworks)では、TOP3にランクインしています。（1位はjQuery, 2位はReact）

記事内の「結論」にて筆者が述べられていることは、エンジニアとして意識すべき大切なことですが、私はうっかり者ですので、時に忘れてしまいがちです。いつでもこの考え方に戻ってこられるように気を付けようと思い、今回訳させていただきました。

もし元記事の中におかしな点などございましたらご指摘いただけますと幸いです。