SlideShare a Scribd company logo
Knockout を用いた
大規模 JavaScript 開発
iizukak

HTML Conference 2013 LT大会
突然ですが
最近のフロントエンド開発
複雑化・大規模化してますよね?
大規模化するフロントエンド開発
を描いた16世紀の絵画
バベルの塔
by ブリューゲル
HTML5の塔
by ブリューゲル

疲れ果てたプログラマ達
「バベルの塔は完成しない」
by 聖書
バベルの塔
現在

: 1563 年
: 2013 年
5世紀に渡る
フロントエンド開発技術の飛躍的進歩により
バベルの塔の実装が比較的楽になってきた
16世紀にはなかった技術の一例
MV* フレームワーク
MV* フレームワーク

✤

✤

デザインパターンに従ってコードを良いかんじに書くためのサポート
をしてくれるフレームワーク
デザインパターンはいろいろあり、フレームワーク自体もいろいろ種
類がある

Backbone

MVC

: Model-View-Controller

Knockout

MVVM : Model-View-ViewModel

Angular

MVW : Model-View-Whatever
デザインパターンの例
場面は転換し、
とあるフロントエンド開発現場…
スマホゲームの UI 開発を
WebView でやることに
UI の八割方を WebView で実装

✤

数百の HTML ファイル

✤

数千行の SCSS

✤

ユーザーとのインタラクションが非常に多い

✤

数万行の JavaScript
Q: なにがネックになったか?
A: データバインドの記述
ユーザーとのインタラクション
✤

最近はユーザがアプリを操作することによって変化したモデルの状態
をリアルタイムにビューに反映することが必須

①つぶやき投稿

ユーザー

②イベント通知
③モデルの
 状態が変化

JS
④ビューに反映
ユーザーとのインタラクション

✤

モデルとビューのデータの結びつき =「データバインド」

✤

データバインドを自力で書くのは割と面倒
✤

同じようなコードを何度も書かなければならない

✤

コードの総量も増えがち
どうすれば簡単に
データバインドを書けるか
MV* フレームワーク
MV* フレームワーク

✤

MV* フレームワークの多くが、データバインド機能を提供
✤

Angular : デフォルトである

✤

Knockout : デフォルトである

✤

Backbone : Epoxy.js とか使ってやる
MV* フレームワークは、データバインド機能を中心に、
コードを構造化する手助けをするライブラリなのかなと思ったり
そんなわけで、ゲームUI開発に
Knockout 使っています
Knockout について
特徴
特徴

✤

1, データバインドが読みやすい

✤

2, データバインドが書きやすい

✤

3, 組み込みデータバインドでけっこういけている

✤

4, 拡張が用意

✤

5, 公式チュートリアルがいけている
1/5
データバインドが読みやすい
データバインドが読みやすい
Knockout の data-bind の例
<p>First name: <strong data-bind="text: firstName"></strong></p>
<p>Last name: <strong data-bind="text: lastName"></strong></p>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>

✤

✤

HTML を見ればどこの要素が Knockout で操作されるか一目瞭然
data-* 属性は正当な HTML 属性のため、実装した HTML が
validな HTML になり、気分がよい
「コードは書く10倍読まれる」
ぱっと見でのわかりやすさ重要
2, データバインドが書きやすい
データバインドが書きやすい
✤

Knockout ではデータバインドは、かんじで記述
ビュー
<開始タグ data-bind="データバインドの種類: 適用する変数名"></終了タグ>

JavaScript
function コンストラクタ() {
this.適用する変数 = ko.observable();
}
ko.applyBindings(new コンストラクタ());
3/5
組み込みのデータバインドが
けっこういけている
様々な種類のデータバインドが
あらかじめ組み込まれている

click binding

クリックイベントをハンドリング

css binding

CSS を適用

visible binding 表示・非表示切り替え
if binding

if 文による分岐
4/5
拡張が容易
カスタムバインディング

✤

✤

組み込みのデータバインドで物足りなくなったら、容易にデータバイ
ンドの種類を増やせる
スマホゲーム案件では、20個以上の拡張データバインドを実装
5/5
公式チュートリアルがいけている
対話形式でサクサク学べる
興味を持ったら
まずは公式チュートリアル
まとめ
Knockout を使ったら
いいかんじに大規模JS開発できました
21世紀のプログラマでよかった
めでたしめでたし
自己紹介
@iizukak on Github, Twitter

More Related Content

PDF
2016年を振り返る
PDF
VimとRubyのアツい関係
PDF
Cakecon xoops cubeなのにcake-phpを使う
PPTX
初めてでもOK : )『concrete5』でサイトを作ろう!
PDF
090821 Ruby Sapporo Night Ruby Cocoa
PPTX
うるう秒とタイムゾーン
PDF
Visual Studio TypeScript npm WebPack
PDF
concrete5セミナー資料公開版
2016年を振り返る
VimとRubyのアツい関係
Cakecon xoops cubeなのにcake-phpを使う
初めてでもOK : )『concrete5』でサイトを作ろう!
090821 Ruby Sapporo Night Ruby Cocoa
うるう秒とタイムゾーン
Visual Studio TypeScript npm WebPack
concrete5セミナー資料公開版

What's hot (12)

PDF
MVCフレームワークとの付き合い方
PDF
C++ REST SDKを使ってWebサービスを利用する
PDF
第十回ネットワークチーム講座資料
PDF
OthloEvent #9 Xamarinハンズオン
PDF
Prototyping with Sketch
PDF
プロジェクト2B テーマ発表
PDF
WordPress使いのためのconcrete5入門
PPTX
Uwpでみるxaml入門
PPT
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
PPTX
PDF
Enpit bizapp_aiit_20130902_for_WindowsEnvironment
PDF
The Way We Are Working On Our Website @とちぎRuby会議02
MVCフレームワークとの付き合い方
C++ REST SDKを使ってWebサービスを利用する
第十回ネットワークチーム講座資料
OthloEvent #9 Xamarinハンズオン
Prototyping with Sketch
プロジェクト2B テーマ発表
WordPress使いのためのconcrete5入門
Uwpでみるxaml入門
“なめらか”なメトロスタイルアプリを作るために ~WinRT の非同期性を活用したアプリ開発~
Enpit bizapp_aiit_20130902_for_WindowsEnvironment
The Way We Are Working On Our Website @とちぎRuby会議02
Ad

Viewers also liked (7)

PPTX
HTML5 conference 2013
PDF
レーザレンジスキャナーとWebGL
PDF
とあるISPの異端者
PDF
Noc ltスライド
PDF
Html5 conference 2013
PDF
HTML5 Conference 2015 悩める組込機器向けウェブコンテンツのパフォーマンス
PPTX
KnockoutJSを使用したアプリケーションの構築例
HTML5 conference 2013
レーザレンジスキャナーとWebGL
とあるISPの異端者
Noc ltスライド
Html5 conference 2013
HTML5 Conference 2015 悩める組込機器向けウェブコンテンツのパフォーマンス
KnockoutJSを使用したアプリケーションの構築例
Ad

Similar to Knockout を用いた大規模 JavaScript 開発 (20)

PPTX
フロントエンド技術の変遷
PDF
開発ライフサイクルから見たAngularJS
PDF
Modern frontend overview_r3
PDF
大規模Webを支えるAgileな技術
PDF
.NET Coreから概観する.NETのOSSへの取り組み
PPTX
20150926 uwpストア攻略
PDF
次世代Web業務アプリケーション
PDF
Html5 and Graphics
PDF
Cloudflare Pages/Workersとは
ODP
HTML5 アプリ開発
PPTX
C# 7 New Features
PDF
The History of Reactive Extensions
PDF
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
PDF
モダンJavaScript入門.pdf
PDF
CSS Nite LP26 CodeKitで始める次世代Web制作
PPTX
TypeScriptでCLIアプリケーション開発
PDF
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
PDF
Blazor 触ってみた
PDF
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
PDF
Angularモダンweb開発セミナー紹介 20170923
フロントエンド技術の変遷
開発ライフサイクルから見たAngularJS
Modern frontend overview_r3
大規模Webを支えるAgileな技術
.NET Coreから概観する.NETのOSSへの取り組み
20150926 uwpストア攻略
次世代Web業務アプリケーション
Html5 and Graphics
Cloudflare Pages/Workersとは
HTML5 アプリ開発
C# 7 New Features
The History of Reactive Extensions
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
モダンJavaScript入門.pdf
CSS Nite LP26 CodeKitで始める次世代Web制作
TypeScriptでCLIアプリケーション開発
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Blazor 触ってみた
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Angularモダンweb開発セミナー紹介 20170923

Knockout を用いた大規模 JavaScript 開発