フレーム ワーク ライブラリ 違い。 機械学習ライブラリ・ディープラーニングフレームワークおすすめ15選:特徴・便利な点・利用方法など

Webアプリケーションフレームワーク

フレーム ワーク ライブラリ 違い

Javaでシステム開発するにあたり、フレームワーク選びは重要なポイントです。 Javaフレームワークの種類が多く存在する現在、どのフレームワークを使用するのが良いのか、どのフレームワークを学習するべきなのか、フリーランスエンジニアの方は迷ってしまうと思います。 特にフリーランスエンジニアの方は求人・案件を探す際に、特定のフレームワーク経験を求められることが多いです。 今回は、フリーランスエンジニアの方に向けてフレームワークの概要から、おすすめのJavaフレームワークについてお話していこうと思います。 フリーランスエンジニアとしてご活躍している方はもちろんのこと、今後フリーランスとしてご活躍するエンジニアの方にオススメの記事です。 <目次> ・作業効率の改善 ・コードの統一性を保持 ・バグの減少 ・ある程度の学習時間が必要 ・費用がかかるフレームワークがある ・Javaフレームワークの脆弱性 Javaフレームワークとは、Javaを使用してシステムやアプリケーション開発する際の土台として機能するソフトウェアのことを指します。 つまり、共通するコード(それぞれのプログラミング言語)に機能性を加えて形成された骨組み、枠組みです。 特に大規模なシステムやWebアプリケーションなどを開発する際、膨大な量のプログラムを書かなくてはなりません。 しかし、フレームワークを使用することで、プログラムの記述量を大幅に削減し、工数をさげる事が可能です。 経験が浅いエンジニアでもセキュリティが担保されたプログラムを作成する事ができます。 フレームワークとライブラリの簡単に違いについてお伝え致します。 ・フレームワーク フレームワークは、プログラミングにおいて、特定のオペレーティングシステムのためのアプリケーションの標準構造を実装するのに使われるクラスやライブラリの集まりを指します。 つまり、汎用的に必要なものをまとめている枠組みや骨組みのことです。 ・ライブラリ ライブラリは、汎用性の高い複数のプログラムを一つにまとめたもののことを指します。 つまり、クラスや関数といったパーツのまとまりで提供されるソースコードの部品のことです。 Javaフレームワークを利用するメリット・デメリットについてお伝えいたします。 ・作業効率の改善 フレームワークを使用して開発をすることは作業効率の向上に繋がります。 フレームワークは、原形で利用できるテンプレート、再利用可能なクラス、ライブラリ、API等で構成されています。 多くの人が利用して信頼できるフレームワークを導入することで、大部分のコーディングは用意する必要がなくなる為、作業効率の改善に繋がります。 さらに機能やデザインのカスタマイズも簡単に出来るため、短時間で高品質なアプリケーションを開発することが可能です。 ・コードの統一性を保持 チームで開発を行う際、フレームワークを使用するとコードの統一性を保持出来るというメリットがあります。 特にコーディングなどの技術力はフリーランスエンジニア毎で異なるため、コードに統一性が無くなり、結果として作業効率や開発スピードは落ちることが多いです。 フレームワークという共通ルールを使うことにより、フリーランスエンジニア毎のコーディングの違いを減らします。 ・バグの減少 フレームワークなしでコーディングをすると多くの箇所でバグが発生する可能性が高まります。 これは単純に開発の力量が足りなかったこともあり得ますが、フレークワークを使用することで自力で書く際よりもバグが出にくくなる傾向にあります。 ・ある程度の学習時間が必要 Java自体の学習の他にJavaフレームワークの学習にも時間を使わなければいけないことが挙げられます。 知識の素早いキャッチアップが必要になります。 また、ドキュメントは英語で作成されていることや市場規模が小さいJavaフレームワークは情報があまりないことなども有り得ます。 ・費用がかかるフレームワークがある Javaフレームワークには無料で利用できるものもありますが、費用がかかるものもあります。 事前にしっかりと調べてから、Javaフレームワーク学習をしましょう。 ・Javaフレームワークの脆弱性 Javaフレームワークの中には脆弱性が報告されるものもあります。 脆弱性があると、開発したソフトウェアにはセキュリティの問題があるということになるので、利用者の数も減少する恐れがあります。 そのため、事前にしっかりと調査した上で、Javaフレームワームの学習に取り組むことをおすすめします。 Javaは技術としても安定しており、年々開発エンジニア人口が増加しているため、開発言語同様Javaフレームワークのニーズも高まっていくでしょう。 Javaフレームワークでも、Spring FrameworkやPlay Frameworkは圧倒的にエンジニアやクライアント企業から支持されています。 Javaは多くのサービスで使われており、一部例をあげるとDMM. com、楽天市場、グノシー、kintone、LINE、SmartNewsなどの人気サービスのWeb開発で使用しています。 そのため、Javaを使ったWeb開発は今後拡大する可能性が高いでしょう。 ただ、フレームワークは流行り廃りがあり、現在も新しいものがどんどん開発されています。 そのため、常に最新の市場動向を確認して、知識をアップデートし続けましょう。 Javaは開発エンジニア人口が多く、求人・案件も他の開発言語と比較して、圧倒的に多いです。 そのため、機能が豊富なフレームワークから軽量化を目指したフレームワークまで、様々なものが使われています。 この章では、Java開発の際によく使用されるJavaフレームワーク8選をご紹介します。 フリーランスエンジニアの方は、ぜひ興味のあるJavaフレームワークを見てみてください。 Spring Frameworkは、JavaのWebフレームワークでWebアプリ開発の際に使用されます。 従来のWebアプリケーションにおける様々な問題を解決しており、非常に有力なフレームワークとして、長い間注目されてます。 特に下記2点の特長を持っています。 -DI(Dependency Injection:依存性注入)機能を備えたフレームワークとして定評があります。 依存性注入は、オブジェクトの成立に必要なコードを分離し、プログラム実行時に注入することです。 依存性のあるプログラムは外部から取り入れることが出来るため、個々でプログラムを独立させやすくなります。 その結果、コードを変更する場合も最低限の変更が可能になり、開発が楽になります。 -AOP(Aspect Oriented Programming)というプログラミングが使えます。 これは、クラスには本質的な処理のみを記述し、本質的ではない処理(共通化出来る処理)を別に記述するということです。 主に必要と不必要な処理を分けることにより、コード分別がしやすくなります。 そのため、バグ・不具合が発見された際にも原因を特定しやすくなります。 Java EEは、Java標準仕様のフレームワークです。 Java SEにWebアプリケーションの開発に必要なサーバー関係のライブラリなどを追加したもので、Java EEの中にはJava SEも含まれています。 Servlet・JSP・EJB・Javaの各種APIなど、大規模システムの構築に必要な機能がまとめて提供されています。 Apache Strutsは、2001年頃より利用されているもっとも有名なJavaフレームワークとして知られており、MVCモデルを採用しています。 無償で提供されており、誰でも自由に利用でき、再開発・再配布を行うことができます。 Apache Strutsはアプリケーションデザインの手法のひとつであり、Struts2では様々な改良もされています。 しかし、脆弱性の問題が発生した2017年以降、別のJavaフレームワークへ移行する流れが増加しています。 Apache Wicketは、2005年に開発されたWebアプリケーションフレームワークでUI層に特化しています。 すべてをJavaで記述するフレームワークとして有名です。 そのため、Javaだけを使用してシンプルに開発したいフリーランスエンジニアにお勧めのJavaフレームワークです。 Play Frameworkは、JavaやScalaで使用出来るWebアプリケーションフレームです。 Ruby on Rails・Djangoに多大な影響を受けており、CPUリソースやメモリ使用量が少なく軽量さと高生産性があることが特長です。 Spark Frameworkは、シンプルな構成で軽量のJavaマイクロフレームワークです。 RubyのSinatoraというフレームワークに影響を受けています。 Spark Frameworkは、シンプル故に小・中規模のWebシステム開発に使用されるケースが多いです。 膨大なアノテーション記述や設定ファイルが必要ない構成であるため、エンジニアの負担が少ないことが特長です。 なお、同じSparkという名のフレームワークに分散処理フレームワークであるApache Sparkがありますが、別フレームワークですので、混同しないように気を付けましょう。 JSFは、2004年に開発されたJavaフレームワークです。 Oracle社が開発・提供しているもので、その仕様はJava EEの一部として取り込まれてます。 Apache Strutsと同じくMVCを採用しておりますが、表示にXML方式のHTMLを採用すること、コンポーネントベースフレームワークであることなどの、多少の違いがあることが特長です。 SAStrutsは、Strutsをベースとして開発されたオープンソースのフレームワークです。 Strutsを使った開発では設定ファイルの複雑さが問題点として挙げられますが、SAStrutsは設定ファイルの作成・更新の自動化などを行います。 これによりStrutsよりも開発時間を短縮可能である点が特長です。 実際にJavaフレームワーク求人・案件数はフリーランスエージェント毎でどのぐらい公開されているのかを見ていきたいと思います。 フリーランスエージェント各社に公開されているJavaフレームワーク求人・案件数をお伝え致します。 (2019年5月時点) Javaフレームワーク求人・案件はJava EE(Java Platform, Enterprise Edition)が399件、Spring Frameworkが344件、SAStruts (Super Agile Struts)が124件、Play Frameworkが114件、JSF(JavaServer Faces)が96件、Apache Strutsが95件、Spark Frameworkが7件、Apache Wicketが1件です。 Java求人・案件では、Java EEやSpring Frameworkを使用することが多い事がわかります。 Javaエンジニアや今後Javaの学習を検討している方は、Java EEやSpring Frameworkも並行して学習することをおすすめします。 また、フリーランスエージェント各社は公開中のJavaフレームワーク求人・案件の他に、非公開求人・案件も多く保有しています。 非公開案件はまだインターネットには出回らない優良なJavaフレームワークを使う求人や案件が多いため、複数フリーランスエージェントに登録し、定期的に非公開のJavaフレームワーク使う求人や案件情報を取得しましょう。 Googleトレンドを使い、どのJavaフレームワークが頻繁に検索をされているのかを調べました。 結果は、JSF(JavaServer Faces)・Spring Framework・Java EE(Java Platform, Enterprise Edition)・Play Framework・Apache Strutsの順です。 Javaフレームワークで、JSFが圧倒的にトップです。 JSF以外のSpring Framework・Java EE・Play Framework・Apache Strutsはやや下降気味であることがわかります。 このことより、JSFはトップを独走しているが、他のJavaフレームワークも一定数検索されています。 そのため、JSFのみを学習するだけでなく、Spring Framework・Java EE・Play Framework・Apache StrutsのJavaScriptフレームワークも、学習を積極的に行うなど、知識を蓄えておくことをオススメします。 今回はフレームワークの概要からオススメのJavaフレームワークについてお話致しました。 作業効率よく開発を行うにはフレームワークを使って開発することが良いでしょう。 Java開発の場合は特定のフレームワークが指定されていることが多いです。 例えば、大規模開発の場合は、汎用性の高いSpring Frameworkが使われることが多く、小規模開発の場合は、軽量であるPlay Frameworkが使われることが多いなど、開発規模や環境によって使用するフレームワークは異なります。 フレームワークは流行り廃りがあり、現在も新しいものが日々開発されています。 常にJavaや周辺知識に関する最新情報を確認し、アップデートすると良いでしょう。 開発規模や環境・分野を考慮した上で、慎重に選択することをおすすめします。 本記事が皆様にとって少しでも役に立てれば幸いです。

次の

frameworks

フレーム ワーク ライブラリ 違い

Webアプリケーションフレームワークの発展 [ ] Common Gateway Interface CGI [ ] の設計は元々ダイナミックなものではなく、初期のは 上で公開されたのでできていた。 公開されたページについての変更はページの作者が行う必要があった。 ユーザーからの入力を反映したコンテンツを提供するため、Webサーバが外部のアプリケーションとやり取りするための CGI 標準が導入された。 CGIでは各リクエストが別々のプロセスを開始しなければならないため、サーバの負荷に悪い影響を与えることがある。 密結合 [ ] 高いトラフィックに対応したWebアプリケーションを実現するため、はWebサーバとの密な結合を望んだ。 は、例えば、Webサーバが任意のコードを実行したり(など)、特定のリクエストを動的なコンテンツを扱えるWebサーバに転送するような( ()など)モジュールをサポートしている。 などの言語で書かれた動的なコンテンツをWebサーバで扱うことができるよう設計されたものもある(など)。 Web言語 [ ] 同じころWeb用途に特化してやなどの新しい言語が開発された。 Webライブラリ [ ] Webページの動的な生成に用いられる大半のプログラミング言語が、共通した作業を行うためのを持っているが、は の生成(たとえば )などWebアプリケーションで有用なライブラリを必要とすることが多い。 フルスタック [ ] 成熟した「フルスタック」フレームワークが登場した。 これは、複数のWeb開発に有用なライブラリを一つに結合した Web開発者向けの として集約したものである。 例として、、、などがある。 デプロイされたをドラッグ・アンド・ドロップ操作でWebページに配置することができるのが特徴である。 なお、ポートレット毎にエンティティインターフェース(モデル)、表示(ビュー)、業務ロジックが含まれているため、ポートレット毎に異なるスタック技術を利用することもできる。 例えばで作成したポートレットとで作成したポートレットを1つのWebページに配置することができる。 また、異なった言語でポートレットを記述することもできる。 例えばJava、Ruby、PHPで記述したポートレットを一つのWebページに配置できる。 ユーザ機能を随時に追加/置き換え/削除することができるため、ポートレットフレームワークはアジャイル開発のように継続的に開発を行う場合に適している。 例えばScrumの各ユーザストリーをプラグインにすることができる。 ポートレットフレームワークを利用したWebシステムの例として、、などがある。 その中では開発者向けのツールが揃っている。 アーキテクチャ [ ] Model view controller [ ] 多数のフレームワークが、、、を分割するためにに従っている。 プッシュ型とプル型の比較 [ ] ほとんどのMVCフレームワークは、のアーキテクチャにしたがっている。 このようなフレームワークは、処理を要求するアクションを実行し、次に結果を出力するためにデータを表示のレイヤにプッシュする。 、、、の一部であるSpring MVCなどがこのアーキテクチャの良い例である。 これに対するものとしてプル型のアーキテクチャがあり、「コンポーネント型」とも呼ばれている。 こうしたフレームワークは表示レイヤから処理を開始し、必要に応じて複数のコントローラからの処理の結果を「プル」する。 このアーキテクチャでは、複数のコントローラーが一つのビューに関連付けられる。 、 などがプル型アーキテクチャの一例である。 コンテンツ管理システム [ ] 自己記述的なコンテンツ管理システムが、高位のレイヤーのWebアプリケーションフレームワークに進出し始めている。 例えば、の構造は Webアプリケーションフレームワークに関連した機能を提供する モジュールにより機能を拡張できる最小限の コアを提供している。 、とも同様な機能を持っている。 (オープンソース)のような高度な汎用コンテンツ管理システムでは、更にコンテンツのバージョン管理、公開開始日/終了日、公開する前の承認ワークフロー、プレビュー機能、マルチメディアコンテンツの対応など従来ではやなどでしか提供されていない機能にも対応している。 伝統的にこれらは とも呼ばれる。 しかし、コンテンツの管理がこれらのシステムの上で最重要の機能であるかについては議論の余地がある。 のようなフレームワークは関数API、機能のフレームワークやコーディング標準、伝統的に Webアプリケーションフレームワークに関連する機能も提供している。 機能 [ ] セキュリティ [ ] Webアプリケーションフレームワークにはアクセス制御機能(と)を備えたものもある。 はその一例で、ロールに基づいてページに対するアクセスを管理する機能と、ユーザーの作成やロールの割り当てのためのWebベースのインターフェイスを提供する。 データベースへのアクセスおよびマッピング [ ] 多数のWebアプリケーションフレームワークはバックエンドのデータベースに対する統一されたを提供し、コードの変更なく多数のデータベースとやりとりすることを可能にし、プログラマーがより高位の概念を扱うことができるようにしている。 また高いパフォーマンスを得るため、が行うようにデータベースのコネクションがプールされていなければならない。 さらに、フレームワークはととの対応づけを行うの機能を提供するマッピングツールを備えている。 Webアプリケーションフレームワークが提供するその他の機能としてのサポートやなどが含まれる。 URLマッピング [ ] パラメータの付加されたURLをわかりやすいURLに自動的に変換することにより、システムは使いやすく、またさらなる利点としてサーチエンジンがインデックスを作りやすくなる。 たとえば、? カテゴリーのIDが変更されてもURLは変わらない(従ってサーチエンジンに対して有利である)。 URLの変換により、アプリケーションが的な設計方法の一部の要素によりうまく適合できるようにすることができる。 Webテンプレートシステム [ ] 詳細は「」を参照 動的なWebページは通常静的な部分 HTML とHTMLを生成するコードである動的な部分からなる。 HTMLを生成するコードはテンプレート上の変数あるいはコードから生成を行う。 生成されるテキストをデータベースから取得することで、サイト内のページの数を劇的に少なくすることができる。 例として 500軒の家を扱う不動産会社を考える。 静的なWebサイトでは、不動産会社は500ページ作成する必要があるが、動的なWebサイトでは、不動産会社はただ動的なページを500レコードを持つデータベースに接続するだけでよい。 では、プログラミング言語由来の変数を、コードを使わずに挿入することができるため、Webサイト内のページを更新するためにプログラミングの知識が必要なくなる。 多数のテンプレートエンジンはIFやFOREACHといった若干の論理タグをサポートしている。 これらはビジネスロジック層ないしMVCパターンにおけるM(モデル)との明確な分離を行うため、プレゼンテーション層に必要な決定を行うためだけに用いられる。 Webキャッシュシステムは、ドキュメントのコピーを保存し、以降のリクエストは一定の条件が満たされればキャッシュから供給すれば問題なくなる。 アプリケーションフレームワークには文書をキャッシュし、Webテンプレートシステムをバイパスする機構を提供するものもある。 Ajax [ ] とはインタラクティブなを作成するための手法である。 Ajaxの目的はユーザーが変更を要求するごとにWebページ全体がリロードされないようにするため、背後でサーバとのデータのやり取りを少なくし、Webページをより高速に反応するようにすることである。 Webページのインタラクティブ性や、速度、を向上させることが意図されている。 Ajaxプログラミングは複雑であるため、Ajaxサポートを専門に行うAjax フレームワークが多数存在している。 他の大きなフレームワークの一部として組み込むことができるものも存在する。 たとえば、はに含まれている。 自動構成 [ ] フレームワークにはを利用した ()や以下の方法を用いてによってWebアプリケーションの構成作業をできる限り少なくするものがある。 たとえば、多数のJavaフレームワークはを永続化層として使用しており、必要な情報を永続化させるためのデータベーススキーマをランタイムに生成することができる。 これによりアプリケーションの設計者は明示的にデータベーススキーマを設計せずにビジネスオブジェクトを設計することができる。 のようなフレームワークは逆の動作、すなわちモデルオブジェクトのプロパティをデータベーススキーマに基づきランタイムに定義することが可能である。 Webサービス [ ] 詳細は「」を参照 の作成と提供を行うツールを提供するツールを備えたフレームワークもある。 これらのユーティリティは、その他のWebアプリケーションと同様の機能を提供する。 技術 [ ] プログラミング言語 [ ] 多数のプログラミング言語に対して関連したWebアプリケーションフレームワークが存在する。 しかし、フレームワークに対するより高いレベルのサポートやフレームワークの開発に導く機能を提供したり十分な数の開発者がいる言語もあれば、そうでないものもある。 Java [ ] 膨大な数のJavaフレームワークが開発中、ないしは実際に使用されている。 これらのフレームワークの多くはプラットフォームの上に構築されているか、ないしは要素を借りてきている。 JavaScript [ ] 、()、などと呼ばれる。 全世界に普及した成功例として代表的なものに やがある。 これ以外にもさまざまなものが開発されている。 以下はその一例である。 HTML,CSS,JavaScriptの進化が著しく、JavaScriptでは種々のフレームワークが乱立している状態であるが、 徐々に収束に向かい始めており、という手法が有名になりつつある。 [ ]• x,2. C およびVB. NET [ ] C および VB. NET は、の言語非依存のプラットフォーム上で最も人気のある言語である。 初期には最も人気のあるWebアプリケーションフレームワークは () Webアプリケーションフレームワークであった。 自体はWebアプリケーションを構築するために設計された技術であるため、誤ってWebアプリケーションフレームワークとしてのみ参照されることがある。 これは、ASP. NETの一面に過ぎない。 Webアプリケーションフレームワークとしての基本機能に加えて、を採用する好みの言語を選ぶことができる。 ASP. NETは統合されたAJAXフレームワークであるにおける実装である ()を備えている。 PHP [ ] PHPの動的なWebページに向けた設計により、、、、、、、、、などのフレームワークが支持を得ている。 これらのフレームワークは、コア言語の上にフレームワーク層を適用することにより、アプリケーションの構造とモデル化を支援する。 これらは、ボトムアップからのプログラミングについての問題に対向するものである。 上記のフレームワークとは逆に、、、、、といったソフトウェアプロジェクトは、Webからより上位のWebアプリケーションフレームワークへと変貌し始めている。 これらの構造は、Webアプリケーションフレームワークに関連した機能を提供する モジュールにより機能を拡張できる最小限の コアを提供している。 のプロジェクトとしてコミュニティが多数のモジュールを寄贈しており(たとえばは1,000以上、Typo3には2,500以上のモジュールがある)、CMSのコア+モジュールを用いて、広い範囲の機能を持ったWebサイトを、実際にはPHPレベルのコーディングを行わずに組み立てる方法が形作られている。 Perl, Python, Ruby [ ] 動的な言語によるフレームワークが多数存在する。 Perlには、、などのフレームワークがある。 Pythonには、たとえば、、、、、などのフレームワークが存在する。 ほぼ完全なリストとしてこのがある。 Rubyには、といったフレームワークがある。 オペレーティングシステム [ ] ごくわずかの例外はあるが、Webアプリケーションフレームワークは多数のプラットフォームで動作する、プラットフォーム非依存の言語の上に作られている。 特定の構成を推奨するフレームワークもあるが、大半のものは 、、などののプラットフォーム上で動作する。 特筆すべき例外として、のために書かれたはランタイムをサポートしていない。 参考文献 [ ]• 2007年7月29日閲覧。 Thomson, Kris 2003年10月29日. 2007年7月29日閲覧。 Tony Shan and Winnie Hua 2006. Proceedings of the 2006 IEEE International Conference on e-Business Engineering ICEBE 2006 , October 2006, p378-385. 関連項目 [ ]• DRY原則.

次の

ライブラリ・フレームワーク・APIの違い

フレーム ワーク ライブラリ 違い

他のフレームワークとの比較 最終更新日: 2020年1月7日 これは確かにガイドの中では最も書くことが難しいページですが、私たちはこれが重要だと感じています。 きっと、あなたは解決したい問題を抱えていて、その問題を解決するために他のライブラリを使ったことがあるでしょう。 あなたがこのページを読んでいるのは Vue があなた特有の問題をよりよく解決することができるかどうかを知りたいからでしょう。 それは私たちがあなたに答えを示したいことです。 また、私たちは偏見を避けるために多くの努力を費やしています。 Vue のコアチームですので、私たちは明らかに Vue がとても好きです。 私たちはいくつかの問題については Vue が世の中に存在する他のものよりもより良く解決すると考えています。 もし私達がそれを信じることができなかったら、Vue のために作業をすることはなかったでしょう。 しかし、私たちは公平で間違いのないようにしたいと考えています。 React の代替レンダラの巨大なエコシステムや Knockout の IE6 からのブラウザサポートのように、他のライブラリが著しく優れていると示される部分に関して、私たちはそれらをできる限り載せるようにしています。 さらに、私たちは あなたがこのドキュメントを最新の情報に保っていただけることを望みます。 なぜなら、JavaScript の世界は速く動いているからです!もし、あなたが正確ではない部分や、あまり正しくないように見える部分に気がついたら、教えてください。 React React と Vue には多くの類似点があります。 それらは両方とも:• 仮想 DOM を活用しています• リアクティブで組み合わせ可能なビューのコンポーネントを提供しています• コアライブラリに焦点をあわせることに努めており、ルーティングやグローバルの状態管理のような関心事は関連ライブラリに担当させています スコープがとてもよく似ているため、この比較の改善に他よりも多くの時間をかけています。 私たちは技術的な正確さだけでなく、バランスも保証したいと考えています。 例えば、React のエコシステムの豊かさや、カスタムレンダラの豊富さのように、私たちは React が Vue よりも優れている点を示します。 とはいえ、多くの調査項目はある程度主観によってしまうため、React ユーザーにとってはどうしても Vue をひいきしているように見えてしまうかもしれません。 様々な技術的な嗜好があることは認識したうえで、その嗜好が私たちのものと運良く一致している場合に、Vue がおそらくより適切となる理由について概説することがこの比較の第一のねらいです。 続くセクションのいくつかでは React バージョン 16 以上に対して行われた更新により若干古くなった内容を含む可能性が有り、私たちは React コミュニティと共に作業を進めてこのセクションを近い将来刷新する予定です。 実行時性能 React と Vue の両方は、どちらも非常に早いので、速度はどちらを選ぶかの決定要因になりそうにありません。 ですが、具体的なメトリクスについては、このを確認してください。 最適化の取り組み React では、コンポーネントの状態が変化するとき、そのコンポーネントをルートとして、コンポーネントのサブツリー全体を再描画します。 不要な子コンポーネントの再レンダリングを避けるには、できるだけいつでも PureComponent を使うか、 shouldComponentUpdate を実装する必要があります。 また、不変 immutable なデータ構造を使用して、状態の変更をより最適化しやすくする必要があるかもしれません。 そうでない場合、そのような最適化は DOM の状態が不一致になる可能性があります。 Vue では、コンポーネントの依存関係が描画中に自動的に追跡されるため、システムは状態が変化したときに実際にどのコンポーネントを再描画する必要があるか正確に認識します。 各コンポーネントは、自動的に shouldComponentUpdate が実装されていると見なすことができ、ネストされたコンポーネントに注意する必要はありません。 概して、これによって開発者は性能最適化全般を行う必要がなくなり、スケールアップに際していっそうアプリケーションの構築そのものに注力できるようになります。 HTML 構造が JSX で表現されているだけでなく、最近の傾向は CSS 管理も JavaScript 内に置く傾向があります。 このアプローチには利点もありますが、必ずしもすべての開発者にとって価値があるわけではないさまざまなトレードオフもあります。 Vue は古典的な Web 技術を取り入れ、その上に成り立っています。 その意味を示すために、いくつかの例を取り上げます。 JSX vs Templates React では、すべてのコンポーネントは JSX を用いた 描画関数 render の中でそれらの UI を表現します。 JSX とは JavaScript の中で用いることのできる、宣言的で XML のような構文です。 JSX を伴う 描画関数にはいくつかの優位な点があります:• 完全なプログラミング言語 JavaScript の力を活用してビューを構築することができます。 これには、一時変数、フロー制御、スコープ内の JavaScript 値の直接参照が含まれます。 JSX のためのツールのサポート(例えば、Lint、型チェック、エディタのオートコンプリート)は現在 Vue のテンプレートで利用可能なものよりもいくつかの点で優れています。 Vue は、と、さらに を備えています、なぜなら、あなたは時折その力を必要とするためです。 しかしながら、デフォルトのエクスペリエンスとして、より単純な代替手段としてテンプレートを提供しています。 すべての有効な HTML は有効な Vue テンプレートでもあり、このこと自体がいくつかの利点をもたらします。 HTML を使って作業している多くの開発者にとって、テンプレートは読み書きするのにより自然に感じられます。 嗜好そのものは、やや主観的ですが、開発者の生産性をより高めれば、恩恵は客観的です。 HTML ベースのテンプレートにより、Vue のリアクティブ機能を活用するために、既存のアプリケーションを徐々に移行するのがずっと簡単になります。 また、デザイナや経験の浅い開発者がコードベースを解析して貢献することも容易になります。 Vue のテンプレートの作成に、Pug 以前は Jade として知られていた のようなプリプロセッサを使用することもできます。 テンプレートを書くために別途 DSL Domain-Specific Language を覚えなければならないと主張する人もいますが、私たちはこの違いはせいぜい皮相的なものに過ぎないと信じています。 第一に、JSX はユーザーが何も覚える必要が無いということを意味しません。 JSX はプレーンな JavaScript に基づく拡張構文なので、JavaScript に慣れている人なら簡単に覚えられるかもしれませんが、基本的に学習コストがかからないと言うと語弊があります。 同じように、テンプレートはまさにプレーンな HTML に基づく拡張構文なので、すでに HTML に慣れている人なら学習コストは非常に軽いです。 DSL は、より少ないコード 例: v-on 修飾子 でより多くのことを成し遂げることもできます。 プレーンな JSX や描画関数では、同じタスクのためにより多くのコードが必要になるかもしれません。 より高いレベルでは、コンポーネントをプレゼンテーション用と論理用の 2 つのカテゴリに分けることができます。 これらのコンポーネントの割合は、作成しているアプリケーションのタイプによって異なりますが、一般的にプレゼンテーション用のものの方がはるかに多く見られます。 コンポーネントスコープ CSS(Scoped CSS) あなたがコンポーネントを複数のファイルに分けない限り(例えば、を使うなど)、React で CSS のスコープを限定するときには CSS-in-JS ソリューション 例えば 、 経由でしばしば行われます。 これは通常の CSS 作成プロセスとは異なる新しいコンポーネント志向のスタイルパラダイムを導入します。 加えて、これらにはビルド時に単一のスタイルシートに CSS を抽出するためのサポートがありますが、スタイルが正しく機能するためにはランタイムをバンドルに含める必要があることがいまだ一般的です。 スタイルを構成する際に Javascript のダイナミズムにアクセスできる一方で、トレードオフは多くの場合バンドルサイズとランタイムのコストが増加することです。 もしあなたが CSS-in-JS のファンなら、著名な CSS-in-JS ライブラリの多くは Vue をサポートしています 例えば や。 ここでの React と Vue の主な違いは、 Vue でのスタイリングのデフォルトの方法は でのより身近な style タグによるものだということです。 では、 その他のコンポーネントコードと同じファイル内で CSS にフルアクセスできます。 list-container:hover を. list-container[data-v-21e5b78]:hover のようなものにコンパイルすることで、この CSS のスコープをあなたのコンポーネントに限定します。 最後に、 Vue の単一ファイルコンポーネントのスタイリングは非常に柔軟です。 経由で、どのようなプリプロセッサ、ポストプロセッサ、そして との深い統合でさえも使うことができます — すべてが 要素内で。 規模 スケールアップ 大きなアプリケーションのために、Vue も React も強力なルーティングの解法を提供しています。 これらの状態管理のパターンと、は簡単に Vue のアプリケーションと統合することができます。 実際に、Vue はこのモデルをさらに一歩進めた という、Vue と深く統合されている Elm に触発された状態管理の解法をもっており、私たちはそれがより優れた開発体験をもたらすと考えています。 これらの間にあるもう 1 つの重要な違いは、Vue における状態管理やルーティング(や)のための関連ライブラリはすべて公式にサポートされていて、コアのライブラリとともに更新され続けているということです。 React はそのような関心事はコミュニティにまかせており、より断片的なエコシステムを作り上げています。 それはより大衆的ではありますが、React のエコシステムは Vue のそれを大きく上回って豊かです。 最後に、Vue は を提供しており、対話形式のプロジェクト構築ウィザードによって新しいプロジェクトを簡単に始めることができます。 コンポーネントのにも使うことができます。 React にも があり、この分野で進歩を遂げていますが現状でいくつかの制限があります。 Vue CLI はで拡張できるアップグレード可能なランタイム依存関係の上で動くのに対し、プロジェクトの作成時にいかなる設定もできません。 Vue が様々な目的やビルドシステムのために幅広いデフォルトオプションを提供しているのに対し、シングルページアプリケーションを構築することを想定した 1 つのテンプレートしか提供していません。 すでに確立された方法を用いているエンタープライズ環境で特に役立つかもしれないのに、ユーザーが作った からプロジェクトを生成することができません。 しかしながら、これらの制限は create-react-app のチームによって意図された設計上の決定で、それによる優位性も確かにあります。 あなたはこのより詳しく読むことができます。 スケールダウン React はその急な学習曲線で有名です。 なぜなら多くのコード例が React の class 構文を使っているからです。 あなたはさらにビルドシステムについて学ぶ必要があります。 なぜなら、技術的には Babel Standalone を使ってコードをブラウザでその場でコンパイルすることは可能ですが、プロダクション環境では絶対に適していません。 React と同じように Vue は規模を大きくできますし、一方で、jQuery のように規模を小さくすることもできます。 そうです - 使い始めるにあたって、あなたはページの中に 1 つの script タグを放り込むだけで良いのです: これであなたは Vue のコードを書き始めることができますし、後ろめたい思いをしたり性能問題について心配したりすることなく、ミニファイ(minify)版をプロダクション環境へ設置することもできます。 あなたは Vue を始めるにあたって JSX、ES2015 やビルドシステムについて知る必要はないので、複雑なアプリケーションをビルドするための十分な学習をするためにを読むのにはたいてい一日もかからないでしょう。 ネイティブレンダリング React Native によって同じ React コンポーネントモデルを使って iOS や Android のためのネイティブ描画を行うアプリケーションを書くことができます。 これは開発者にとっては素晴らしいことで、あなたは 1 つのフレームワークの知識を複数のプラットフォームをまたいで適用することができます。 この点において Vue は、 と公式に協業しています。 Weex はアリババグループによって作られたクロスプラットフォームな UI フレームワークで、Apache ソフトウェア財団 ASF によって支援されています。 Weex はブラウザの描画だけではなく、iOS や Android のネイティブ描画を行うことのできるコンポーネントを書くために同じ Vue コンポーネントの構文を使うことを可能にします! 今の段階では、Weex はまだ活発に開発が続いており、React Native ほど熟しておらず、実際に使われているわけではありませんが、その開発は世界で最も大きな e コマースの製品要件に基づいており、そして Vue のチームは Vue の開発者のための円滑な体験を保証するために Weex のチームと活発に協業するつもりです。 もう 1 つの選択肢は、 です。 これは、Vue. js を用いて完全なネイティブアプリケーションを構築するための プラグインです。 MobX と用いた場合 MobX は React コミュニティ内でとても人気になってきており、実はそれは Vue のリアクティブシステムとほぼ同じものを使っています。 Preact とその他の React 系ライブラリ React 系のライブラリはたいてい、API とエコシステムの多くをなるべく React と共有しようとします。 そのため、上に挙げた比較の大部分はそれらのライブラリにも当てはまります。 主な違いは、まず React と比べてエコシステムの規模が(しばしばかなり)小さいことです。 これらのライブラリが React のエコシステムのすべてと 100 パーセントの互換性を持つことは無いはずですから、いくつかのツールや関連ライブラリは使用できないかもしれません。 あるいは、うまく動いているように見えたとしても、その React 系ライブラリが React と同等に公式にサポートされていない限りは、いつ壊れないとも限りません。 AngularJS Angular 1 いくつかの Vue の構文は AngularJS と非常に良く似ているように見えることでしょう(例えば、 v-if と ng-if)。 これは AngularJS が解決した多くのものがあるのと、最初期の Vue の開発の際にインスピレーションを受けているためです。 しかしながら、AngularJS から導入された多くの痛みもあり、それらは Vue が大きな改善を提供しようと試みた点でもあります。 複雑性 API と設計の両方の観点から、Vue は AngularJS と比較してとても単純です。 複雑なアプリケーションを構築するために十分学ぶのには大抵 1 日もかからないでしょう。 これは AngularJS には当てはまらない点です。 柔軟性とモジュール性 AngularJS にはあなたのアプリケーションがどのような構成になるべきかという点について強い思想が反映されていますが、対して Vue はより柔軟で、モジュール組み立て式な解決を図っています。 このことが Vue を広い種類のプロジェクトにより適合可能にしている一方で、私たちは、時にはただコーディングを始められるように決めごとを作ることも有用だということも認識しています。 私たちが高速な Vue. js の開発に必要な完全なシステムを提供するのはこのためです。 は、Vue エコシステムのための標準ツールのベースラインとなることを目的にしています。 これにより、様々なビルドツールはよく選ばれたデフォルト値でスムーズに動作し、設定に何時間も費やす代わりに、自分のアプリケーションを書くことに注力できるようになっています。 それと同時に、特定の用途に合わせて各ツールの設定を微調整できる柔軟性も残しています。 データバインディング AngularJS がスコープ間による双方向バインディングを使用している一方で、Vue はコンポーネント間では一方向のデータフローを行うようになっています。 これは小さくないアプリケーションにおいてデータの流れを推測することをより簡単にします。 ディレクティブ vs コンポーネント Vue はディレクティブとコンポーネントの間に明確な線引きをしています。 ディレクティブは DOM の操作のみをカプセル化するように意図されている一方で、コンポーネントは自身のビューとデータロジックを持つ独立した構成単位です。 AngularJS では、ディレクティブは全てを行い、コンポーネントはただの特定の種類のディレクティブに過ぎません。 実行時性能 Vue は Dirty Checking を使用していないため、より良い性能を発揮し、さらに、もっともっと簡単に最適化できます。 AngularJS はスコープ内の何かが変更されると、毎回すべてのウォッチャがもう一度再評価される必要があるため、たくさんのウォッチャが存在する時は遅くなってしまいます。 Angular のユーザーはダイジェストサイクルを回避するために難解なテクニックによく頼る必要がありますし、いくつかの状況では、多くのウォッチャが存在する状況でスコープを最適化する単純な方法がない場合もあります。 Vue では、非同期キューイングを用いた透過的な依存追跡監視システムを使用しているため、このことで苦しむことはまったくありません。 すべての変更は明示的な依存関係を持たない限り独立してトリガされます。 興味深いことに、これらの AngularJS の問題点に Angular と Vue がどのように対処しているかという点について、いくつかとてもよく似ている点があります。 Angular 以前は Angular 2 として知られる Angular は本当に AngularJS から完全に異なるフレームワークなので、私たちは新しい Angular のために分割した節を設けています。 例えば、それは第一級のコンポーネントシステムを特徴として持っており、多くの詳細な実装は完全に書き換えられており、そして、API もまた抜本的に変更されています。 TypeScript ほとんどすべてのドキュメントと学習リソースが TypeScript ベースのため、Angular は本質的に TypeScript を使用する必要があります。 TypeScript には明らかなメリットがあります。 静的型チェックは大規模アプリケーションには非常に便利で、Java や C を使用している開発者にとっては生産性を大幅に向上させることができます。 しかし、誰もが TypeScript を使いたいとは限りません。 多くの小規模なユースケースでは、型システムを導入すると生産性の向上よりもオーバーヘッドが発生する可能性があります。 そのような場合は、Vue を使うよりも、TypeScript を使わないで Angular を使うのが難しいかもしれないので、あなたは Vue を使うほうが良いでしょう。 最後に、Vue は Angular のように TypeScript と深くは統合されていませんが、Vue で TypeScript を使用したいと望む人に対して、Vue もと を提供します。 実行時性能 両方のフレームワークは非常に高速で、ベンチマークでも似たようなメトリクスがあります。 より詳細な比較のために、することもできますが、速度は決定要因にはなりそうにありません。 サイズ Angular の最近のバージョンは、と によって、サイズを大幅に縮小することができました。 柔軟性 Vue は Angular よりもずっとあなたのやり方には口出しすることはありません(less opinionated)、様々なビルドシステムのための公式サポートを提供していますし、あなたがあなたのアプリケーションをどのように構成するかについては制限していません。 どんなアプリケーションを作るのにもたった 1 つの正しいやり方を持つことを好む開発者がいる一方で、多くの開発者はこの自由を楽しんでいます。 学習曲線 Vue を始めるために、あなたは HTML と ES5 JavaScript(つまり、プレーンな JavaScript)をよく知るだけで良いです。 これらの基本的なスキルがあれば、を読むのに一日もかからずに複雑なアプリケーションの構築を始めることができます。 Angular の学習曲線はもっと急です。 フレームワークの API は巨大で、ユーザーは生産性を獲得する前により多くの概念に慣れておく必要があります。 明らかに、Angular の複雑さは、大規模で複雑なアプリケーションのみを対象とするという設計目標に大きく起因していますが、そのことが経験の浅い開発者がこのフレームワークを選び取ることをはるかに難しくしています。 Ember Ember はフル機能のフレームワークでとても強い思想(highly opinionated)の下で設計されています。 それはすでに用意されたたくさんのやり方を提供しており、あなたがそれらを十分使いこなせれば、高い生産性を発揮できることでしょう。 しかしながら、それは学習曲線が高く、柔軟性に乏しいことも意味しています。 強い思想を持つフレームワークと、ゆるやかに結びついて協働するツール群を用いるライブラリのどちらを選ぶかはトレードオフです。 後者はあなたにより多くの自由を与えますが、あなたはアーキテクチャ上の決定をより多くする必要もあります。 ですので、Vue のコアと Ember のとレイヤーを比較することは比較をより良いものにすることでしょう:• Vue はプレーンな JavaScript 上で控えめなリアクティビティと完全に自動的な算出プロパティを提供しています。 Ember では、あなたはすべてを Ember のオブジェクトの中にラップし、算出プロパティの依存を手動で定義する必要があります。 Vue のテンプレート構文は JavaScript の式の完全な力を利用しているのに対し、Handlebars の式とヘルパの構文は意図的にかなり制限されています。 性能面では、Ember 3. x で最新の Glimmer エンジンのアップデートがされた後にも関わらず、Vue は大きく差をつけて Ember よりも。 Ember では性能が重要な状況において、手動でランループ(run loop)を管理する必要がある一方で、Vue は自動的にバッチ更新を行います。 Knockout Knockout は MVVM と依存追跡の分野における先駆者で、そのリアクティブシステムは Vue のものととてもよく似ています。 もその対応のすべてを思うと非常にすばらしく、IE6 までサポートしています!Vue は一方で、IE9 以上のみをサポートしています。 しかしながら、時間とともに Knockout の開発は遅くなっており、少々古さを見せ始めています。 例えば、そのコンポーネントシステムはライフサイクルフックの一式が欠けており、とてもよくあるユースケースにもかかわらず、コンポーネントへ子要素を渡すためのインタフェースは と比較して少々ぎこちないものに感じられます。 さらに、API デザインにも哲学的な違いがあるようにも思えます。 興味があれば、それぞれがの作成をどのように扱うのかを見ればわかるかもしれません。 これは確かに少々主観的ですが、多くの人は Vue の API はより複雑でなく、よく構造化されていると考えています。 Polymer Polymer は Google がスポンサーをしているもう 1 つのプロジェクトで、その上実は Vue がインスピレーションを受けていたものでした。 Vue のコンポーネントは Polymer の Custom Elements と緩く比較することができ、さらに両方ともとてもよく似た開発スタイルを提供しています。 最も大きな違いは Polymer が最新の Web Component の機能を基に構築されており、ネイティブでこれらの機能をサポートしていないブラウザ上で(より劣った性能で)動かすためには小さくない Polyfill を必要とする点です。 それと比較して、Vue は IE9 まで依存や Polyfill 無しで動きます。 Polymer では、その開発チームは性能を補うためにデータバインディングシステムもかなり制限しました。 例えば、Polymer のテンプレートは真偽値の反転と単一のメソッド呼び出しの構文のみしかサポートされていません。 その算出プロパティの実装についてもあまり柔軟ではありません。 Riot Riot 3. Riot と Vue はおそらくその設計哲学の多くが共通しているのでしょう。 しかしながら、Riot よりも少し重いにも関わらず、Vue はいくつか著しく優れた点を持っています:• より優れた性能。 Riot は 仮想 DOM を使用しているというよりむしろしているため、AngularJS と同じ性能問題に苦しめられています。 より熟成したツールのサポート。 Vue は 、 の公式サポートを提供していますが、対して Riot はビルドシステムの統合についてはコミュニティのサポートに頼っています。

次の