SlideShare a Scribd company logo
1 of 29
Download to read offline
DevLOVE関西∼ JavaScript フレームワークは Angular JS だけじゃない ∼
KnockoutJS入門
115年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
自己紹介
@tan_go238
PLUGRAM, Inc.
仕事:PHP、JavaScript
趣味:JVM、Curry
215年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
315年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
415年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
515年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
話すこと
・KnockoutJS導入のきっかけ
・KnockoutJSの基本的な使い方
・KnockoutJSでできないこと
・MVVMとは何か
615年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJS導入のきっかけ
jQueryで作ったら確実に破綻する機能の実装を頼まれる
(2013年、画面数:2)
当時主流だったJSフレームワークを調査
KnockoutJSに辿り着く
715年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJS導入のきっかけ
815年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
必要条件
・現在のサービスに影響なく追加できること
・レガシーブラウザ対応
・入力フォームをPOSTでサーバへ送信( JSON)
十分条件
・メンテナンスしやすい(UIとロジックの分離)
・テストできること(書きやすい)
KnockoutJS導入のきっかけ
915年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJS導入のきっかけ
当時主流だったJSフレームワークを調査
機能が多すぎるRouterいらん
1015年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJS導入のきっかけ
KnockoutJSに辿り着く
テスト書ける
導入簡単 UIとロジックを分離できる
レガシーブラウザ対応
1115年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
必要条件
・現在のサービスに影響なく追加できること
・レガシーブラウザ対応 (IE 6+, Firefox 3.5+)
・入力フォームをPOSTでサーバへ送信( JSON)
十分条件
・メンテナンスしやすい(UIとロジックの分離)
・テストできること(書きやすい)
KnockoutJS導入のきっかけ
1215年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJSとは
・宣言的データバインディング
・UI自動更新
・依存性追跡
・テンプレート
・コンポーネント (3.2から)
1315年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJSの使い方
・data-bind (HTML:value, text, click など)
・observable
・observableArray
・pureComputed (computed)
これだけ覚えれば基本はOK
1415年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJSの使い方 (observable)
<input type="text" data-bind="value: value1"/> +
<input type="text" data-bind="value: value2"/>
= <span data-bind="text: result"></span>
<script src="js/knockout-latest.js"></script>
<script src="js/page/index.js"></script>
<script>
$(function(){
ko.applyBindings(new ViewModel());
});
</script>
function ViewModel(){
var self = this;
self.value1 = ko.observable(1);
self.value2 = ko.observable(2);
self.result = ko.pureComputed(function(){
return parseInt(self.value1()) +
parseInt(self.value2());
});
}
変更があったら通知
初期値
変更通知を受け取って実行
value1(observable) value2(observable)
result
(pureComputed)
1515年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJSの使い方 (observableArray)
<div class="col-lg-12">
<h3>Task List</h3>
</div>
<div class="col-lg-12">
<ul class="list-group" data-bind="foreach: tasks"> // foreachバインディング
<li class="list-group-item">
<span data-bind="text: title"></span>
<a href="#" data-bind="click: $parent.deleteTask">delete</a>
</li>
</ul>
</div>
1615年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
function Task(title) {
var self = this;
self.title = title;
}
function ViewModel() {
var self = this;
self.tasks = ko.observableArray([]);
self.title = ko.observable("");
self.addTask = function () {
var task = new Task(self.title());
self.tasks.push(task);
self.title("");
};
self.deleteTask = function(task) {
self.tasks.remove(task);
};
}
data-bind= click: addTask
data-bind= click: deleteTask
1715年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJSの使い方 (共通コンポーネント)
<div class="col-lg-12">
<name-editor></name-editor>
</div>
ko.components.register('name-editor', {
template: "<p>Enter your name: <input data-bind='value: name'/></p>
<p>You entered <strong data-bind='text: name().toUpperCase()'>
</strong></p>",
viewModel: function() {
this.name = ko.observable('something');
}
});
1815年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
KnockoutJSでできないこと (機能比較)
アーキテクチャ
ルーティング
バインディング
共通コンポーネント
HTTP
DI
テスティング
MVVM (ViewModel) MVW (Controller)
なし (外部ライブラリを利用) angular-route
data-bind=* ng-*, {{}}
Components Directive
なし (外部ライブラリを利用) $http
なし $inject
なし (外部ライブラリを利用) Karma, angular-mocks
1915年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
・簡単に覚えられる
・導入が楽
・古いブラウザでも安心
・共通化できる
メリット
・機能が少ない
・制約が少ない
・無い機能は作る/他ライブラリを
 利用しないといけない
デメリット
今までのJS開発を崩さず楽したい人に非常にオススメ
これまでのまとめ
2015年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
これまでのまとめ
・簡単に覚えられる
・導入が楽
・古いブラウザでも安心
・共通化できる
メリット
・機能が少ない
・制約が少ない
・無い機能は作る/他ライブラリを
 利用しないといけない
デメリット
大規模になってくるとデータフローがごちゃごちゃになる
→ MVVMやアーキテクチャの知識が必要
2115年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
MVVMとはなにか
http://ugaya40.hateblo.jp/entry/model-mistake
MVVMのModelにまつわる誤解
ViewModelに公開するModelのインタフェース
・Modelのステートの公開とその変更通知
・Modelの操作のための戻り値のないメソッド
ViewModelとは
・ViewModelはModelの影
・ViewはViewModelの影でもある
2215年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
MVVMとはなにか
V1 VM1 M1
M2V2 VM2
Mn
更新
変更通知自動更新
変更通知自動更新
show notification
pop-up
2315年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
MVVMとはなにか
V1 VM1 M1
M2V2 VM2
Mn
更新
変更通知自動更新
状態更新通知
focus-in
hide notification
2415年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
Flux
http://facebook.github.io/flux/docs/overview.html
simple object
・new data
・type property
・state
・logic
emit change_event
2515年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
Flux
http://facebook.github.io/flux/docs/overview.html
2615年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
MVVMとFluxの違い
MVVM Flux
なし(明確に定義されてない) Action
Model Dispatcher
Model Store
ViewModel View
View なし (JSXで記述)
・Fluxは単方向のデータフローしか生じない
・FluxはMVVMのModelをより明確に定義している
2715年1月26日月曜日
KnockoutJS入門
COPYRIGHT 2015 PLUGRAM, INC.
最後に
・KnockoutJSは簡単に習得可能
・既存プロジェクトへの導入も容易
・古いブラウザでも安心
・大規模(人数・View数・コード量)になるとデータフローの交通整理が必要
・新規&大規模プロジェクトにはあまりオススメしない
KnockoutJS検討の際のポイント
2815年1月26日月曜日
ありがとうございました!
2915年1月26日月曜日

More Related Content

What's hot

今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始めynaruta
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会VOYAGE GROUP
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかYoichi Toyota
 
翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門Makoto Chiba
 
Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVMSatoshi Anai
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介しますnkazuki
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js小川 昌吾
 
Service Workers Push API Hands-on
Service Workers Push API Hands-onService Workers Push API Hands-on
Service Workers Push API Hands-onTakenori Nakagawa
 
SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」Naoyuki Kataoka
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化Kon Yuichi
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いKnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いToshihiro Kawachi
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular jsShin Adachi
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞMitsuru Ogawa
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)Takahiro Maki
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門Kohei Kadowaki
 

What's hot (20)

今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門
 
Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVM
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介します
 
Service Workers
Service WorkersService Workers
Service Workers
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js
 
Service Workers Push API Hands-on
Service Workers Push API Hands-onService Workers Push API Hands-on
Service Workers Push API Hands-on
 
SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いKnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular js
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞ
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
 

Similar to DevLOVE Kansai KnockoutJS

PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackPySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackKazushige TAKEUCHI
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
GrowthForecastことはじめ
GrowthForecastことはじめGrowthForecastことはじめ
GrowthForecastことはじめMakoto Taniwaki
 
S14 t3 yosuke_yamashita
S14 t3 yosuke_yamashitaS14 t3 yosuke_yamashita
S14 t3 yosuke_yamashitaTakeshi Akutsu
 
Jvm internal
Jvm internalJvm internal
Jvm internalGo Tanaka
 
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −JustSystems Corporation
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
AngularJS+TypeScriptを試してみた。
AngularJS+TypeScriptを試してみた。AngularJS+TypeScriptを試してみた。
AngularJS+TypeScriptを試してみた。Toshio Ehara
 
2015年にpublishしたnpm modules
2015年にpublishしたnpm modules2015年にpublishしたnpm modules
2015年にpublishしたnpm modulesRyo Iinuma
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Hitoshi Asai
 
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷wpscala
 
AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化Toshio Ehara
 
SeleniumConf Chicago 参加報告
SeleniumConf Chicago 参加報告SeleniumConf Chicago 参加報告
SeleniumConf Chicago 参加報告aha_oretama
 
第8回JAWSUG大阪 AWSの事例/課金について
第8回JAWSUG大阪 AWSの事例/課金について第8回JAWSUG大阪 AWSの事例/課金について
第8回JAWSUG大阪 AWSの事例/課金についてTakuro Sasaki
 
Introduction to WildFly Swarm
Introduction to WildFly SwarmIntroduction to WildFly Swarm
Introduction to WildFly SwarmYoshimasa Tanabe
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれYasuaki Matsuda
 
WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話
WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話
WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話ssuserd00212
 

Similar to DevLOVE Kansai KnockoutJS (20)

PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackPySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
GrowthForecastことはじめ
GrowthForecastことはじめGrowthForecastことはじめ
GrowthForecastことはじめ
 
S14 t3 yosuke_yamashita
S14 t3 yosuke_yamashitaS14 t3 yosuke_yamashita
S14 t3 yosuke_yamashita
 
Jvm internal
Jvm internalJvm internal
Jvm internal
 
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
 
いまさら触るAwt
いまさら触るAwtいまさら触るAwt
いまさら触るAwt
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
AngularJS+TypeScriptを試してみた。
AngularJS+TypeScriptを試してみた。AngularJS+TypeScriptを試してみた。
AngularJS+TypeScriptを試してみた。
 
2015年にpublishしたnpm modules
2015年にpublishしたnpm modules2015年にpublishしたnpm modules
2015年にpublishしたnpm modules
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
 
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
2010/11/2 WebプログラマのためのScala入門勉強会@渋谷
 
Scalaでもgae
ScalaでもgaeScalaでもgae
Scalaでもgae
 
AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化
 
SeleniumConf Chicago 参加報告
SeleniumConf Chicago 参加報告SeleniumConf Chicago 参加報告
SeleniumConf Chicago 参加報告
 
第8回JAWSUG大阪 AWSの事例/課金について
第8回JAWSUG大阪 AWSの事例/課金について第8回JAWSUG大阪 AWSの事例/課金について
第8回JAWSUG大阪 AWSの事例/課金について
 
Introduction to WildFly Swarm
Introduction to WildFly SwarmIntroduction to WildFly Swarm
Introduction to WildFly Swarm
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれ
 
WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話
WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話
WACATEにより爆発的に加速した QA歴3ヶ月の新卒のお話
 

More from Go Tanaka

Knockout handson
Knockout handsonKnockout handson
Knockout handsonGo Tanaka
 
Knockout bindings
Knockout bindingsKnockout bindings
Knockout bindingsGo Tanaka
 
Implement curry
Implement curryImplement curry
Implement curryGo Tanaka
 
Log4j 2 writing
Log4j 2 writingLog4j 2 writing
Log4j 2 writingGo Tanaka
 
Log4j 2 source code reading
Log4j 2 source code readingLog4j 2 source code reading
Log4j 2 source code readingGo Tanaka
 
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012Go Tanaka
 
Studying Network #1
Studying Network #1Studying Network #1
Studying Network #1Go Tanaka
 
Inside The Java Virtual Machine
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual MachineGo Tanaka
 
Nettyらへん
NettyらへんNettyらへん
NettyらへんGo Tanaka
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126Go Tanaka
 
Kanjava20110302
Kanjava20110302Kanjava20110302
Kanjava20110302Go Tanaka
 
Slim3 Gwt In Action
Slim3 Gwt In ActionSlim3 Gwt In Action
Slim3 Gwt In ActionGo Tanaka
 
はじめてのPHP
はじめてのPHPはじめてのPHP
はじめてのPHPGo Tanaka
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日Go Tanaka
 

More from Go Tanaka (17)

CPU
CPUCPU
CPU
 
Knockout handson
Knockout handsonKnockout handson
Knockout handson
 
Knockout bindings
Knockout bindingsKnockout bindings
Knockout bindings
 
Implement curry
Implement curryImplement curry
Implement curry
 
Log4j 2 writing
Log4j 2 writingLog4j 2 writing
Log4j 2 writing
 
Log4j 2 source code reading
Log4j 2 source code readingLog4j 2 source code reading
Log4j 2 source code reading
 
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
 
Studying Network #1
Studying Network #1Studying Network #1
Studying Network #1
 
Inside The Java Virtual Machine
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual Machine
 
FxUG HTML5
FxUG HTML5FxUG HTML5
FxUG HTML5
 
Nettyらへん
NettyらへんNettyらへん
Nettyらへん
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126
 
Kanjava20110302
Kanjava20110302Kanjava20110302
Kanjava20110302
 
GWT♥HTML5
GWT♥HTML5GWT♥HTML5
GWT♥HTML5
 
Slim3 Gwt In Action
Slim3 Gwt In ActionSlim3 Gwt In Action
Slim3 Gwt In Action
 
はじめてのPHP
はじめてのPHPはじめてのPHP
はじめてのPHP
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
 

Recently uploaded

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

DevLOVE Kansai KnockoutJS

  • 1. DevLOVE関西∼ JavaScript フレームワークは Angular JS だけじゃない ∼ KnockoutJS入門 115年1月26日月曜日
  • 2. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 自己紹介 @tan_go238 PLUGRAM, Inc. 仕事:PHP、JavaScript 趣味:JVM、Curry 215年1月26日月曜日
  • 3. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 315年1月26日月曜日
  • 4. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 415年1月26日月曜日
  • 5. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 515年1月26日月曜日
  • 6. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 話すこと ・KnockoutJS導入のきっかけ ・KnockoutJSの基本的な使い方 ・KnockoutJSでできないこと ・MVVMとは何か 615年1月26日月曜日
  • 7. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJS導入のきっかけ jQueryで作ったら確実に破綻する機能の実装を頼まれる (2013年、画面数:2) 当時主流だったJSフレームワークを調査 KnockoutJSに辿り着く 715年1月26日月曜日
  • 8. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJS導入のきっかけ 815年1月26日月曜日
  • 9. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 必要条件 ・現在のサービスに影響なく追加できること ・レガシーブラウザ対応 ・入力フォームをPOSTでサーバへ送信( JSON) 十分条件 ・メンテナンスしやすい(UIとロジックの分離) ・テストできること(書きやすい) KnockoutJS導入のきっかけ 915年1月26日月曜日
  • 10. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJS導入のきっかけ 当時主流だったJSフレームワークを調査 機能が多すぎるRouterいらん 1015年1月26日月曜日
  • 11. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJS導入のきっかけ KnockoutJSに辿り着く テスト書ける 導入簡単 UIとロジックを分離できる レガシーブラウザ対応 1115年1月26日月曜日
  • 12. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 必要条件 ・現在のサービスに影響なく追加できること ・レガシーブラウザ対応 (IE 6+, Firefox 3.5+) ・入力フォームをPOSTでサーバへ送信( JSON) 十分条件 ・メンテナンスしやすい(UIとロジックの分離) ・テストできること(書きやすい) KnockoutJS導入のきっかけ 1215年1月26日月曜日
  • 13. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJSとは ・宣言的データバインディング ・UI自動更新 ・依存性追跡 ・テンプレート ・コンポーネント (3.2から) 1315年1月26日月曜日
  • 14. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJSの使い方 ・data-bind (HTML:value, text, click など) ・observable ・observableArray ・pureComputed (computed) これだけ覚えれば基本はOK 1415年1月26日月曜日
  • 15. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJSの使い方 (observable) <input type="text" data-bind="value: value1"/> + <input type="text" data-bind="value: value2"/> = <span data-bind="text: result"></span> <script src="js/knockout-latest.js"></script> <script src="js/page/index.js"></script> <script> $(function(){ ko.applyBindings(new ViewModel()); }); </script> function ViewModel(){ var self = this; self.value1 = ko.observable(1); self.value2 = ko.observable(2); self.result = ko.pureComputed(function(){ return parseInt(self.value1()) + parseInt(self.value2()); }); } 変更があったら通知 初期値 変更通知を受け取って実行 value1(observable) value2(observable) result (pureComputed) 1515年1月26日月曜日
  • 16. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJSの使い方 (observableArray) <div class="col-lg-12"> <h3>Task List</h3> </div> <div class="col-lg-12"> <ul class="list-group" data-bind="foreach: tasks"> // foreachバインディング <li class="list-group-item"> <span data-bind="text: title"></span> <a href="#" data-bind="click: $parent.deleteTask">delete</a> </li> </ul> </div> 1615年1月26日月曜日
  • 17. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. function Task(title) { var self = this; self.title = title; } function ViewModel() { var self = this; self.tasks = ko.observableArray([]); self.title = ko.observable(""); self.addTask = function () { var task = new Task(self.title()); self.tasks.push(task); self.title(""); }; self.deleteTask = function(task) { self.tasks.remove(task); }; } data-bind= click: addTask data-bind= click: deleteTask 1715年1月26日月曜日
  • 18. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJSの使い方 (共通コンポーネント) <div class="col-lg-12"> <name-editor></name-editor> </div> ko.components.register('name-editor', { template: "<p>Enter your name: <input data-bind='value: name'/></p> <p>You entered <strong data-bind='text: name().toUpperCase()'> </strong></p>", viewModel: function() { this.name = ko.observable('something'); } }); 1815年1月26日月曜日
  • 19. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. KnockoutJSでできないこと (機能比較) アーキテクチャ ルーティング バインディング 共通コンポーネント HTTP DI テスティング MVVM (ViewModel) MVW (Controller) なし (外部ライブラリを利用) angular-route data-bind=* ng-*, {{}} Components Directive なし (外部ライブラリを利用) $http なし $inject なし (外部ライブラリを利用) Karma, angular-mocks 1915年1月26日月曜日
  • 20. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. ・簡単に覚えられる ・導入が楽 ・古いブラウザでも安心 ・共通化できる メリット ・機能が少ない ・制約が少ない ・無い機能は作る/他ライブラリを  利用しないといけない デメリット 今までのJS開発を崩さず楽したい人に非常にオススメ これまでのまとめ 2015年1月26日月曜日
  • 21. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. これまでのまとめ ・簡単に覚えられる ・導入が楽 ・古いブラウザでも安心 ・共通化できる メリット ・機能が少ない ・制約が少ない ・無い機能は作る/他ライブラリを  利用しないといけない デメリット 大規模になってくるとデータフローがごちゃごちゃになる → MVVMやアーキテクチャの知識が必要 2115年1月26日月曜日
  • 22. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. MVVMとはなにか http://ugaya40.hateblo.jp/entry/model-mistake MVVMのModelにまつわる誤解 ViewModelに公開するModelのインタフェース ・Modelのステートの公開とその変更通知 ・Modelの操作のための戻り値のないメソッド ViewModelとは ・ViewModelはModelの影 ・ViewはViewModelの影でもある 2215年1月26日月曜日
  • 23. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. MVVMとはなにか V1 VM1 M1 M2V2 VM2 Mn 更新 変更通知自動更新 変更通知自動更新 show notification pop-up 2315年1月26日月曜日
  • 24. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. MVVMとはなにか V1 VM1 M1 M2V2 VM2 Mn 更新 変更通知自動更新 状態更新通知 focus-in hide notification 2415年1月26日月曜日
  • 25. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. Flux http://facebook.github.io/flux/docs/overview.html simple object ・new data ・type property ・state ・logic emit change_event 2515年1月26日月曜日
  • 26. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. Flux http://facebook.github.io/flux/docs/overview.html 2615年1月26日月曜日
  • 27. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. MVVMとFluxの違い MVVM Flux なし(明確に定義されてない) Action Model Dispatcher Model Store ViewModel View View なし (JSXで記述) ・Fluxは単方向のデータフローしか生じない ・FluxはMVVMのModelをより明確に定義している 2715年1月26日月曜日
  • 28. KnockoutJS入門 COPYRIGHT 2015 PLUGRAM, INC. 最後に ・KnockoutJSは簡単に習得可能 ・既存プロジェクトへの導入も容易 ・古いブラウザでも安心 ・大規模(人数・View数・コード量)になるとデータフローの交通整理が必要 ・新規&大規模プロジェクトにはあまりオススメしない KnockoutJS検討の際のポイント 2815年1月26日月曜日