-
AngularJSの出てきた背景とか
-
その特徴や既出のフレームワークとの違いとか
-
関連技術について書くよ
-
コードについては自分で勉強してください笑
- UI/UX重視なIFが求められている
- モバイル対応が必須
- URL遷移しない Single Page Application
- サーバサイドはREST/JSON APIのみ
- JSでネイティブAPに引けを取らないWebUIを構築する
-
イベントをバインドして変更をキャッチして、
-
AJAXでサーバにクエリをして
-
セレクタで指定したDOM要素にレスポンスをaddClassやappend
-
仕組みが薄いので実装は簡単
-
でもDOMに依存するので保守性が低い、大規模になってくると辛い、テストできないし
赤丸急上昇中!
- もうDOM操作なんてやってらんない
- ビューとデータを紐付けて双方向に反映させるよ
- リモートJSONデータもバインドできるよ
フィールドとの結合
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
</head>
<body>
<input type="text" ng-model="name" />
<p>Hello! {{name}}</p>
</body>
</html>
モデルとの結合
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
<script type="text/javascript">
var mainCtrl = function($scope){
$scope.users = [
{"id":"444", "name":"華房誠"},
{"id":"442", "name":"遠藤邦夫"}
];
}
</script>
</head>
<body>
<div ng-controller="mainCtrl">
<li ng-repeat="user in users">
{{$index+1}} {{user.id}} : {{user.name}}
</li>
</div>
</body>
</html>
- jQueryにもイベントはあるけど、その後の処理はDOMを使って操作しないといけない
- ってこれMSのあれみたいなのにすればいいじゃん
- MSな人ならVB時代からおなじみなやつ、データバインディング
- 削除ボタン押したら削除イベントが呼ばれるから当該データを削除するよ ⇒ ビューから削除される
- データとビューを紐付けたらあとはお任せがデータバインディング
- 強い制約と少ないコード量
- HTMLにロジックが書けない
- DOM操作できない(一応)
- Dependency Injection
- 文字列パースだからダサいけど
- 難読化するとアウトよ
- まあテストはしやすくなるかもね
- HTML5のpushState/popStateを利用
- クライアントサイドでページの切り替えを行いつつ、それに合わせてURLの変更を行うことができる
- HTMLにAngularでバインドすべきイベントを記述
- Controllerでイベントをうけとる
- モデルの変更をビジネスロジックとしてServiceに実装
- データバインディングを起点にViewを更新
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
<script type="text/javascript">
var mainCtrl = function($scope){
$scope.users = [
{"id":"444", "name":"華房誠"},
{"id":"442", "name":"遠藤邦夫"}
];
}
var userCtrl = function($scope){
//イベントハンドル
$scope.increment = function(){
//イベント後のビジネスロジックは本来Serviceに実装する
$scope.user.id++;
//ネストしたコントローラは親要素にアクセスできる
//ビューはデータバインディングで自動更新される
}
}
</script>
</head>
<body>
<div ng-controller="mainCtrl">
<li ng-repeat="user in users" ng-controller="userCtrl">
{{user.id}} : {{user.name}}
//イベント
<button ng-click="increment()">+1</button>
</li>
</div>
</body>
</html>
- Backbone:グローバルを汚染したりせずに綺麗にJSを構造化させるための仕組みを提供(MVCモデル)
- AngularJS:HTMLを拡張して動的処理できるようにする
- WebComponentsなど、将来的なHTML5の拡張を見込んだ機能提供を指向している
- JSでの開発不便さを改善するのではなく、次世代WEBのための仕組みを提供しようとしている
- Googleらしい押しつけがましさ
違いとか
- http://qiita.com/icoxfog417/items/3c68e1a4de7121658e29
- http://pochi.hatenablog.jp/entry/2013/11/13/002504
- http://www.infoq.com/jp/articles/backbone-vs-angular
この神資料を読む! http://goo.gl/VmYljE
Rebuild.fm #27
- http://rebuild.fm/27/ 29:55から
-
インフラは DevOps、Infrastructure as Code、Immutable Infrastractureとか話題がある
-
フロントも JSフレームワークなど盛り上がっている
-
手元でがんばらないとUI/UXこだわれないしね
-
真ん中(サーバサイド)はもうRailsでいいよね的な
Development and Operations
-
2009年のオライリーイベント
-
Flickrのエンジニアが「開発と運用が協力することで、1日に10回以上のペースでリリースが可能になること」を紹介
-
DevOpsという言葉は、このプレゼンの中で登場したもの
-
DevOpsとは、開発(Development)と運用(Operations)が協力し、ビジネス要求に対して、より柔軟に、スピーディに対応できるシステムを作り上げるためのプラクティス
-
あたりまえだけど重要
-
重要だけどそうなってないところが多い
Joelも昔から言ってなかったっけ?
- 開発者は定期的にサポート電話を受けるべきだってどっかで言ってた気が
- 探したけど見つからなかった。。
- http://japanese.joelonsoftware.com/
mBaaS(mobile Backend as a Service)
- スマートフォンアプリの開発に必要な汎用的機能をAPI・SDKで提供
- サーバサイドコードを書くことなく、サーバ連携するスマートフォンアプリを効率よく開発できるようにするクラウドサービス
- サーバサイド自体なくてもいいんじゃね?
よくある機能
- ユーザ管理
- 認証・認可
- SNS連携
- データ管理
- プッシュ通知
- アクセス分析
- JSフレームワーク
- メジャーどころが
- Backbone.js http://backbonejs.org/
- Knockout.js http://knockoutjs.com/
- AngularJSも含めた比較
- http://qiita.com/icoxfog417/items/3c68e1a4de7121658e29
- HTMLを生成するためのテンプレートエンジン
- 実体はマークアップ言語
- 少ない行数でHTMLを記述することができる
こんなの
!!!
%html
%head
%title Hello, Haml!
%body
#header
%h1 Hello, Haml!
#content
%p
I use Haml
%span.version= Haml::VERSION
- Halmをさらにシンプルにしたテンプレートエンジン
こんなの
doctype html
html
head
title Slim Examples
meta name="keywords" content="template language"
meta name="author" content=author
javascript:
alert('Slim supports embedded javascript!')
body
h1 Markup examples
#content
p This example shows you how a basic Slim file looks like.
- Node.js製のビルドツール
- JSミニファイ、圧縮、JSコンパイルなど
- Webアプリケーションフレームワーク
- MVCに基づかない小さなアプリを構築できる
こんなの
#!/usr/bin/env ruby
require 'sinatra'
get '/' do
redirect to('/hello/World')
end
get '/hello/:name' do
"Hello #{params[:name]}!"
end
- Dependency Injection 依存性の注入
- インスタンスをクラス内で生成(new)せずに、外部から注入すること
http://phonegap.com/ http://cordova.apache.org/
- HTML5+CSS+JSでスマートフォン・ネイティブアプリが実装可能なフレームワーク
- こんなかんじで書ける
- http://plus.adobe-adc.jp/post-3934/
http://japan.zdnet.com/development/sp_13html5experts/35035862/3/
- WEBにおけるコンポーネント開発の標準的な枠組みを提供する仕様