Movatterモバイル変換


[0]ホーム

URL:


Okuno Kentaro, profile picture
Uploaded byOkuno Kentaro
PDF, PPTX11,902 views

イベント駆動AngularJS / 今から書くAngular 2.0

GDG神戸 Angular勉強会#3 資料

Embed presentation

Download as PDF, PPTX
イベント駆動AngularJSAngular勉強会#3 GDGKobe - Apr 29, 2015
Who• 奥野 賢太郎 @armorik83• 京都市•  
AngularJS勉強会#1に参加して5ヶ月AngularJSのお仕事いただきました
Angularと私• 2013年秋、AngularJS 1.2とTypeScriptに出会う• 2014年6月、この勉強会の第一回に参加• 2014年後半、『AngularJSアンチパターン集』や
『モダンAngularJS』といった記事が割と受け入れられる• AngularJSが嫌われてる? といった風潮とReact.jsの流行に過敏になる• 突然のAngularJSのお仕事• 2015年3月、東京でのng-japanに出席 ←いまこの辺
なので、先日やった
AngularJS 1.3の話します
まずはDemohttp://likr.github.io/interactive-sem/
SPA開発と学習コスト• 1画面完結
DBのAPI、ページのルーティングは無い• 実質納期は1ヶ月程度• グラフ描画ライブラリはD3.jsベース(ここは作ってない)
UIのデザイン・実装を担当
ほぼスクラッチ• 自分にはAngularJSの知識が占めていたので、これを採用
AngularJSの良さって• もともと『HTMLを拡張した構文』を採用していた点が
好きだった• 自分がWebデザイナ由来で".html"が並んでる安心感
みたいなところはある• JSXはどうにも抵抗が大きかった
(React.createElementがあるよ! ってのもちょっと違ってて)Reactのヘビーユーザではないので、フェアな比較ではない
でも遅いんでしょ?• AngularJS 1.2はたしかに遅かった• 1.3でマシになった• 一覧表示などで、むやみにDOMを更新しなければ十分• ジャブジャブ使うときは気にする必要がでてくる
とにかく速い方がいい! 魂が震えない! という人には向いてない• 最適化についてはdigest loopでググれば知見が山ほど
初心に返った• 雑にHTMLに{{}}を並べて書いて• Controllerをパパっと書いたらもうバインドできてる!
嬉しさ!!• この「すぐできる感」がAngularJS
でも雑にやると破綻するのがAngularJS
APIが多すぎ?• 散々言われてるけど、APIが散らばってるのは事実• ひとつのことを実現するのに3, 4通りあるのは当たり前• 内部を成り立たせるコアAPIはpublicになっている• 逆にそこを直接叩けるのは強み
$compile, $templateCache, $injectorなど
Angular 2.0
今後1.x系どうやって使おう• 2014年10月に墓標が乱立• あれだけ並べられたら、さすがにどうしよう• とりあえずRIPされてるものは使わない
モダンAngularJSの実践• 2.0を見据えてどうするかは
『モダンAngularJS』のスライドで
けっこう話した• ng-controller, service不使用• jQuery不使用• いい機会なので本当にうまくいくか実践するhttp://www.slideshare.net/armorik83/angularjs-141206
この時にあった懸念• $scopeは無くなる• 値の共有を、意識せずに親子取り放題にすると死• 何も考えずに$broadcast, $onで飛び交わせても死
なにか良いイベントの扱い方は…
そうか…! Fluxだ!
Flux• Facebook社が提唱するアーキテクチャ
こういう名前のライブラリ・フレームワークがあるわけではない• React界隈では、もはや常識• うちはAngularJSだから…と気にしないのは勿体無い
設計手法として触れておくべき
Fluxに関する資料• 昨年末くらいから、じわじわ増えてはいた
最近どっと増えた• おすすめしたいのは以下• 今話題のReact.jsはどのようなWebアプリケーションに適しているか?@hokaccha• 社内勉強会でReactとFluxについて喋った
inside.pixiv.net• 10分で実装するFlux
@azu_re
いつもの図
AngularJSでやるなら引用 http://azu.github.io/slide/react-meetup/flux.html
AngularJSでやるなら引用 http://azu.github.io/slide/react-meetup/flux.htmlDIRECTIVES
具体的な話• ng-route使ってる
設計段階で必要なかったけど、拡張余地のため• ng-routeではControllerは指定しない• 単一のDIrectiveのタグのみ置くfunction RouteConfig($routeProvider: ng.route.IRouteProvider) {$routeProvider.when('/', {template: '<tag></tag>'}).otherwise({redirectTo: '/'});}
Root Directive• View, Dispatcher, StoreでいうViewの部分• グラフ描画ライブラリの都合で、Storeはどうしても2つにする
必要があった• 利用者の行動 →
Dispatcher → Store → View → 即Action
Dispatcher → グラフ描画ライブラリ → View• Q. 2周って無駄じゃね?• A. そうやってViewが複数と相互にやりとりしていたのが
従来のMVW、流れは常に1方向に限定する
2周するEmitの速度は全く気にするレベルではない
複数のStore• 複数のStoreってやってもいいの? という不安があった
最近の資料だと、この辺もうちょっと分かりやすい• SOでFacebookの中の人が複数Storeの可能性を回答していたので、大丈夫そう• 今回は、全ての操作がグラフ再描画と結びつくので、
グラフ描画に使う値の格納Storeと、描画ラッパーStoreの二段構えで回るhttp://stackoverflow.com/questions/26597311/flux-multiple-store-instances
Flux模倣の実装• 全てTypeScriptで記述• CommonJSのrequire()で記述、Browserifyでビルド• Emitterにはビルトインの$broadcast, $on
$emitは上下関係での挙動の違いが複雑になるので不採用• Dispatcherのイベント名は全て定数管理"constant.ts"を作ってまとめておく• APIとしては、StoreからDispatcherはaddHandlers()
StoreからDirectiveに対してはaddListener()を備える
つまりはこう引用 http://azu.github.io/slide/react-meetup/flux.htmlDIRECTIVESStoreが
Dispatcher#addHandlers()
を呼ぶDirectiveが
Store#addListener()
を呼ぶDirectiveが
$broadcast()を呼んで
Diapatcherに$on()を実装
子Directive• 子DirectiveはStoreのシングルトンを持ってはいけない• 持っていいのはRootのみ• 子Directiveが出来るのはActionの発行→Dispatcherへ• 値はすべて共有せず、isolated scopeにする• すべてに'&'を指定しreadonlyにする
[ここらでDirective Scope] [検索]
出てきそうな疑問• Fluxは仮想DOMを扱うReactだからこそ効いてくる
アーキテクチャなのでは?• AngularJSでFluxなんてやったら遅いのでは?
自分の解釈• Fluxをやってもやらなくても、$digestが回り続けるAngularJSでは、この走査を減らす工夫の方が重要• Fluxを採用しなくてもガンガン回ってドンドン遅くなる
設計は十分に起こりうる• それより、$scopeのグローバル共有問題や
イベント煩雑問題をどう解決するかが課題だった
結果• 流れが一方向なので
MVWより「どこに何を実装すればよいか」が明確• アプリ内各所にイベントが飛び散らない• いい感じでした
全部解説するのは大変なんとオープンソースなので、気になった方は読んでみてhttps://github.com/likr/interactive-sem
まだ時間ある?
もうちょっと喋ります
今から書くAngular 2.0Angular勉強会#3 GDGKobe - Apr 29, 2015
Who• 奥野 賢太郎 @armorik83• 京都市•  
Angular 2.0• Angularの新バージョン• 2014年10月 ng-europeにて、方向性が発表
2015年3月 ng-confにて、具体的な発表• AngularJS 2.0とは呼ばず
Angular 2.0 for JavaScriptと呼んでいる
進捗どうですか• https://github.com/angular/angular にて開発中• 現在2.0.0-alpha.21
これをDeveloper Previewと位置付けている• さっきハンズオンでやったComponent Routerは
Angular 2.0ではビルトインされる予定
どっちのRepoで続けるか揉めてた• AngularJS 1.x系は1.4がRC1で控え、1.5の開発も予告
@Decorators• Angularチーム開発の拡張構文AtScriptで採用• 2015年3月、AngularチームとMicrosoftが協力しAngularはTypeScriptで実装されることが決定• DecoratorsはTypeScript 1.5.0-alphaに
急に追加された構文
@Decorators• ECMAScriptの仕様策定としてはまだまだ
ミーティングでの議題にのぼってる段階
(具体的にはES7 Stage 1 Proposal)• Babelでは--optional es7.decoratorsで利用可能• TypeScript 1.5.0-alphaでは、もう利用可能
TypeScript 1.5.0-betaというのも控えてた• Angular側が想定してる構文と仕様にすれ違いがあって
正直まだグラグラしてる
4月中だけでいくつバグが直ったか…
Qiitaで割とガチにまとめました[Qiita Decorators] [検索]http://qiita.com/armorik83/items/e3a0ce67f569ddc4b432
Angular 2.0とDecorators@Component({selector: 'greet',injectables: [Greeter]})@View({template: `{{greeter.greet('world')}}!`,directives: Child})class HelloWorld {greeter: Greeter;!constructor(greeter: Greeter) {this.greeter = greeter;}}
API今覚えておくならこの辺• @Component - いわゆる1.xでのDirectiveに相当• @View - TemplateHTMLなどを記述、1.xのDirectiveの設定が
@Componentと@Viewに分かれたイメージ• @Decorator - restrict: 'A'(HTML属性として使う)のDirectiveに相当• @Viewport - ng-ifやng-repeatなどの制御Directiveが実装しやすい
らしい、まだあまり触れてない• @Parent, @Ancestor - 親Directiveを使う、1.xでのrequireに相当
早速やりたい方は 5min Quickstartからhttps://angular.io/
とはいえ、まだ急いでやらなくていいですDecorators構文の仕様が安定していない、挙動もちょくちょくバギー
でも今後移行とか考えると
つらくない?
Cresc Toccata• クレス・トッカータ• npm install --save toccata• 今日もう少し安定して使えるところまで進めたかった
Angular 2.0が想像以上にバギーだったので難航
Cresc Toccata• Decorators構文を採用したTypeScriptユーザ前提の
ライブラリ• AngularJS 1.3.14以上に対応できるよう開発中• Angular 2.0とAPIに互換性を持たせて提供• AngularJS 1.x系でもAngular 2.0の「書き方」で開発ができる• Toccata<伊>とは「急な変化と流れを持つ即興的な音楽」
を意味する音楽用語で、即興、試し弾きという意味がある
Cresc Toccataimport {* as angular} from 'angular';import {* as toccata_} from 'toccata';!const toccata: Toccata = toccata_(angular);const {Component, View, bootstrap} = toccata;!@Component({selector: 'hello'})@View({template: `<p>Hello!</p>`})class HelloController {constructor() {// noop}}!bootstrap(HelloController);このソースで
AngularJS 1.3.15が動く
Cresc Toccataimport {* as angular} from 'angular';import {* as toccata_} from 'toccata';!const toccata: Toccata = toccata_(angular);const {Component, View, bootstrap} = toccata;!@Component({selector: 'hello'})@View({template: `<p>Hello!</p>`})class HelloController {constructor() {// noop}}!bootstrap(HelloController);ここをAngular 2に差し替えても動く要はAdapterパターン
なぜ作ろうと思ったか• AngularチームもMigratorの話をしていたが、いつになるか分からない• ぶっちゃけAngularチームのAPI策定、微妙なところがあるので
Migratorは信頼しきってない(上出来だったら万々歳)• オレオレではなく、常にAPI互換を念頭に
今のうちからアダプタ実装を開始しておく• 手元に既に複数のAngularJSプロジェクトが控えている
これを2.0リリース後に一斉に移行させるのはしんどい
→今のうちに、分かるところから始めたい
 でも安定した1.x系で運用したい
移行ビジョン• Toccata独自のDecorators APIとして
@NgController, @NgDirectiveの2つをサポートする• まずは今動いているAngularJSからコピペで
この独自Decoratorsに移す• そこから段階的にAngular 2.0互換のAPI
@Component, @Viewに置き換える• 最終的にはToccataを外して、Angular 2.0のみの
運用にもできる• 一歩一歩着実に、せーのでやらずに済ませたい!
予定機能• 前半に話したFluxは、毎回実装するのが面倒なので
Angular用Flux実装としてEmitterとAbstract Storeを組み込む• Angular 2.0はJSソースだけでなくHTML面でも構文に変化がある
<input type="text" #name (keyup)>• toccata-convという変換ユーティリティを現在開発中• 規則性のある構文なので普段は2.0の構文で書いて、1.x系の構文に
変換できるよう準備を進めている• 最適化先輩に教わりながら複雑なパターンのテストを追加している段階• 分かりやすいサンプルとして公式のTodoアプリをToccataで書く
今後、様々なAngularの勉強会・ハンズオンなどでユーザの意見を聞きながらToccataにフィードバックしていきます
Angular 2.0への移行が嫌だから…と離れていく姿はもう見たくないんだ!
Follow me!• @armorik83• Angular 2.0の動向をキャッチしてTwitter, Qiita,
勉強会等で伝えていくので是非フォローしてみてください• Toccataの進捗も伝えていきます
もし気になったら覗いてみてください
ありがとうございましたAngular勉強会#3 GDGKobe - Apr 29, 2015©2015 Crescware

Recommended

PDF
Angular jsの継続的なバージョンアップ
PDF
Angular 4がやってくる!? 新機能ダイジェスト
PDF
Directiveで実現できたこと
PDF
Angular1&2
PDF
開発ライフサイクルから見たAngularJS
PDF
Angular2
PDF
Enterprise x AngularJS
PDF
俺とAngular JS 2
PDF
AngularJSとFluxとRiotJSと
PDF
CSS Living StyleGuide
PPTX
Angular js開発事例
PPTX
JavaScript使いのためのTypeScript実践入門
PDF
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
PDF
angular1脳で見るangular2
PDF
いい感じのフロントエンド開発環境を作ってみた
PPTX
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
PDF
noteをAngularJSで構築した話
PDF
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
PDF
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
PDF
今後のWeb開発の未来を考えてangularJSにしました
PDF
One-time Binding & $digest
PDF
angular X designer - デザイナからみたAngularJS #ten1club
PPTX
Angular2実践入門
PDF
Angularモダンweb開発セミナー紹介 20170923
PDF
Angular#Kanazawa
PDF
クリエイティブの視点から探るAngular 2の可能性
PDF
AngularJS 概説
PDF
スキスキIonic
PPTX
TypeScriptをオススメする理由
PDF
そろそろ押さえておきたい AngularJSのセキュリティ

More Related Content

PDF
Angular jsの継続的なバージョンアップ
PDF
Angular 4がやってくる!? 新機能ダイジェスト
PDF
Directiveで実現できたこと
PDF
Angular1&2
PDF
開発ライフサイクルから見たAngularJS
PDF
Angular2
PDF
Enterprise x AngularJS
PDF
俺とAngular JS 2
Angular jsの継続的なバージョンアップ
Angular 4がやってくる!? 新機能ダイジェスト
Directiveで実現できたこと
Angular1&2
開発ライフサイクルから見たAngularJS
Angular2
Enterprise x AngularJS
俺とAngular JS 2

What's hot

PDF
AngularJSとFluxとRiotJSと
PDF
CSS Living StyleGuide
PPTX
Angular js開発事例
PPTX
JavaScript使いのためのTypeScript実践入門
PDF
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
PDF
angular1脳で見るangular2
PDF
いい感じのフロントエンド開発環境を作ってみた
PPTX
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
PDF
noteをAngularJSで構築した話
PDF
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
PDF
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
PDF
今後のWeb開発の未来を考えてangularJSにしました
PDF
One-time Binding & $digest
PDF
angular X designer - デザイナからみたAngularJS #ten1club
PPTX
Angular2実践入門
PDF
Angularモダンweb開発セミナー紹介 20170923
PDF
Angular#Kanazawa
PDF
クリエイティブの視点から探るAngular 2の可能性
PDF
AngularJS 概説
PDF
スキスキIonic
AngularJSとFluxとRiotJSと
CSS Living StyleGuide
Angular js開発事例
JavaScript使いのためのTypeScript実践入門
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
angular1脳で見るangular2
いい感じのフロントエンド開発環境を作ってみた
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
noteをAngularJSで構築した話
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangularJSにしました
One-time Binding & $digest
angular X designer - デザイナからみたAngularJS #ten1club
Angular2実践入門
Angularモダンweb開発セミナー紹介 20170923
Angular#Kanazawa
クリエイティブの視点から探るAngular 2の可能性
AngularJS 概説
スキスキIonic

Viewers also liked

PPTX
TypeScriptをオススメする理由
PDF
そろそろ押さえておきたい AngularJSのセキュリティ
PDF
AngularJS入門の巻
PDF
AngularJS入門の巻2
PDF
SPAと覚悟
PPTX
React を導入した フロントエンド開発
PDF
iPhoneアプリを Javaで書くよ?
PPTX
AngularJS2でつまづいたこと
PPTX
AngularJS入門
PDF
Webサイトパフォーマンス管理の基礎知識
PPTX
僕はどうしてAngular2をテーマに登壇することになってしまったのか
PDF
AngularJSについて
PDF
Angular+Dart=より快適なSPA開発
PDF
新世代Java scriptコントロール wijmo5 devsumi_150219
PDF
JenkinsをJava開発でこんな感じで使っています
PDF
あなたの言葉で伝えるWebアクセシビリティ
PDF
Angular.jsについてちょっとしゃべる
PDF
TypeScriptで書くAngularJS @ GDG神戸2014.8.23
PDF
Are you a Designer or an Engineer?
PDF
Angular1.4で作られた自社マイクロサービスを2へマイグレーション
TypeScriptをオススメする理由
そろそろ押さえておきたい AngularJSのセキュリティ
AngularJS入門の巻
AngularJS入門の巻2
SPAと覚悟
React を導入した フロントエンド開発
iPhoneアプリを Javaで書くよ?
AngularJS2でつまづいたこと
AngularJS入門
Webサイトパフォーマンス管理の基礎知識
僕はどうしてAngular2をテーマに登壇することになってしまったのか
AngularJSについて
Angular+Dart=より快適なSPA開発
新世代Java scriptコントロール wijmo5 devsumi_150219
JenkinsをJava開発でこんな感じで使っています
あなたの言葉で伝えるWebアクセシビリティ
Angular.jsについてちょっとしゃべる
TypeScriptで書くAngularJS @ GDG神戸2014.8.23
Are you a Designer or an Engineer?
Angular1.4で作られた自社マイクロサービスを2へマイグレーション

Similar to イベント駆動AngularJS / 今から書くAngular 2.0

PPTX
初心者 × AngularJS × TypeScript
PDF
サーバサイドエンジニアが 1年間まじめにSPAやってみた
PDF
はじめてのAngular その1
PDF
Angular の紹介
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
PPTX
Our Track to Modern Angular
PPTX
Our Track to Modern Angular #2
PDF
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
PDF
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
PDF
20140823 LL diver Angular.js で構築した note に関して
PPTX
angularJS vs angular2
PDF
AngularJS+TypeScript - AngularJS 1周年記念勉強会
PDF
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
PDF
20140529 JS Ojisan #2 LT あの「note」はAngular.js
PPTX
AngularJSを触ってみた
PDF
traceur-compilerで未来のJavaScriptを体験
PDF
今からでも遅くない! 2から始めるangular js
PPTX
エンタープライズ分野での実践AngularJS
PDF
Ecmascript2015とその周辺について
初心者 × AngularJS × TypeScript
サーバサイドエンジニアが 1年間まじめにSPAやってみた
はじめてのAngular その1
Angular の紹介
ng-japan 2015 TypeScript+AngularJS 1.3
Our Track to Modern Angular
Our Track to Modern Angular #2
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
20140823 LL diver Angular.js で構築した note に関して
angularJS vs angular2
AngularJS+TypeScript - AngularJS 1周年記念勉強会
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
20140529 JS Ojisan #2 LT あの「note」はAngular.js
AngularJSを触ってみた
traceur-compilerで未来のJavaScriptを体験
今からでも遅くない! 2から始めるangular js
エンタープライズ分野での実践AngularJS
Ecmascript2015とその周辺について

イベント駆動AngularJS / 今から書くAngular 2.0


[8]ページ先頭

©2009-2025 Movatter.jp