#author("2020-06-02T16:54:32+09:00;2020-06-02T16:50:37+09:00","default:inoue.ko","inoue.ko")
*JavaScript framework
~
***はじめに
フレームワークとは、汎用的に必要なものをまとめた「枠組み」で、全体の処理の流れが実装されたものの中に、一部を利用者が実装・埋め込みできるようになっているシステムのことです。
ライブラリと似ていますが、ライブラリが「汎用性の高い便利なプログラムのまとまり」として、単にコードの再利用を目的としているのに対し、フレームワークの方はアプリケーションの設計構造の再利用を目的としています。
一般に、フレームワーク>ライブラリという包含関係にあります。家に例えると、建築構造がフレームワークで、中に置かれた各種家電製品がライブラリーというイメージです。
//フロントエンドのフレームワークには、Angular、Ember、Vue.js などがありますが、2017年以降、[[Vue.js]] が急速に注目を集めています。
近年、React.js の登場以来、Webアプリ開発のトレンドは大きく変わってきたようです。従来の HTML + CSS + JavaScript を MVC モデルで分割する発想から、「関心の分離」と発想に変わりつつあります。
画面、コード、デザインという技術で分離させるのではなく「ログインする」、「商品を表示する」、「注文する」といった「何をしたいのか」という関心によってプログラムを分離構成する・・という発想です。
Angular, React, Vue とったフレームワークが、いずれもこの「関心の分離」に基づいて作られています。
-https://angularjs.org/ Google
-https://ja.reactjs.org/ Facebook
-https://jp.vuejs.org/ コミュニティー
//-https://www.emberjs.com/
~
***Web開発においてフレームワークが使われる理由
-フレームワークが提供する「作法」に従うことにより、品質が一定になる
-信頼性の高いアプリケーションが短時間で開発できる
//-共通機能モジュールの利用で、開発スピードが速まる
-複数プロジェクトで使用することで、開発者の学習コストを削減できる
-共通のルールを学んだ者であれば、当事者以外でもメンテナンスできる
~
***Webアプリケーションフレームワークにおける ''MVC''
-''M''odel(モデル):アプリケーションが扱う領域のデータとロジック(買い物の合計額や送料を計算するなど)を表現する要素。利用者が入力したデータを格納するデータベースも含まれます。
-''V''iew(ビュー):モデルのデータを取り出して利用者の閲覧に最適化して表示する要素。UIへの出力を担当します。ウェブアプリケーションではHTMLを生成して動的にデータを表示するためのコードがそれにあたります。
-''C''ontroller(コントローラー):UIからの入力を担当。利用者のリクエストに従ってモデルを操作し、最終的にViewへ接続する役目を担います。JSフレームワークにおけるControllerの役割は以下2つです。
--バインディング(Model -> View)
Controller内で管理するModelの変更を、Viewに反映します。
--イベントハンドリング(View -> Model)
イベントの発生を検知し、対応する動作(関数)を呼び出します。
~
***Webアプリケーションフレームワークにおける ''MVVM''
-''M''odel(モデル):アプリケーションが扱う領域のデータとロジック(買い物の合計額や送料を計算するなど)を表現する要素。利用者が入力したデータを格納するデータベースも含まれます。
-''V''iew(ビュー):モデルのデータを取り出して利用者の閲覧に最適化して表示する要素。UIへの出力を担当します。ウェブアプリケーションではHTMLを生成して動的にデータを表示するためのコードがそれにあたります。
-''V''iew''M''odel(ビューモデル):いわゆるデータバインディングのことで、分離されたデータソースとユーザインタフェースの間を橋渡しをします。データが変更されるとそれに応じてユーザインタフェースが変更される一方向なデータバインディングと、あわせてユーザインタフェースの変更または操作に応じてデータが変更される双方向のデータバインディングがあります。
~
***AngularJS
従来のWebアプリケーションは、バックエンド(サーバーサイド)で View(HTML/DOM)を生成していたのに対し、最近では、バックエンドはDBの操作のみ行い、クライアント-サーバ間を Ajax で JSONの交換を行い、画面はフロントエンド(クライアントサイド)で生成する・・というタイプのものが増えてきました。AngularJSは、クライアントサイドの JavaScript Controllerによって Model を管理し、リアルタイムで View とデータ交換するフレームワークです。
以下、非常にシンプルなコードで事例を紹介します。
そのまま、index.html として保存してお試しください。
-入門サンプル1
テキストボックスに打ち込んだ内容がそのまま Hello の後に出力されます。
<!DOCTYPE html>
<html ng-app>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
</head>
<body>
<div>
<p><input type="text" ng-model="message"></p>
<p>Hello {{message}}!</p>
</div>
</body>
</html>
-入門サンプル2
2つの入力の大小関係を判定します。
<!DOCTYPE html>
<html ng-app>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
</head>
<body>
<div><input type="text" ng-model="x"></div>
<div><input type="text" ng-model="y"></div>
<div>{{x}} vs {{y}} : {{( x > y ) ? x : y}} の方が大きな値です。</div>
</body>
</html>
-以下、様々なサンプルが紹介されています。
--https://angular.jp/tutorial
--http://lab.hisasann.com/AngularJSTutorial/
~
***React.js
記事を独立させました> [[React.js]]
~
***Vue.js
記事を独立させました> [[Vue.js]]
~
***フレームワークを利用する前に
便利なものにはリスクがあります。以下の点にご留意ください。
-意味を理解をしていないと使えない(学習コストがかかります)。
-例外的な構造のものを作るのは逆に大変になる。
-オリジナルの実装に比べてパフォーマンスが劣る場合がある。
~
~