48
HTML Conference 2013 LT大会 Knockout を用いた 大規模 JavaScript 開発 iizukak

Knockout を用いた大規模 JavaScript 開発

Embed Size (px)

DESCRIPTION

HTML5 Conference 2013 において発表したスライドです。 Knockout.js について簡単に説明しています。

Citation preview

Page 1: Knockout を用いた大規模 JavaScript 開発

HTML Conference 2013 LT大会

Knockout を用いた大規模 JavaScript 開発iizukak

Page 2: Knockout を用いた大規模 JavaScript 開発

突然ですが

Page 3: Knockout を用いた大規模 JavaScript 開発

最近のフロントエンド開発

Page 4: Knockout を用いた大規模 JavaScript 開発

複雑化・大規模化してますよね?

Page 5: Knockout を用いた大規模 JavaScript 開発

大規模化するフロントエンド開発を描いた16世紀の絵画

Page 6: Knockout を用いた大規模 JavaScript 開発

バベルの塔by ブリューゲル

Page 7: Knockout を用いた大規模 JavaScript 開発

HTML5の塔by ブリューゲル

疲れ果てたプログラマ達

Page 8: Knockout を用いた大規模 JavaScript 開発

「バベルの塔は完成しない」by 聖書

Page 9: Knockout を用いた大規模 JavaScript 開発

バベルの塔 : 1563 年現在 : 2013 年

Page 10: Knockout を用いた大規模 JavaScript 開発

5世紀に渡るフロントエンド開発技術の飛躍的進歩によりバベルの塔の実装が比較的楽になってきた

Page 11: Knockout を用いた大規模 JavaScript 開発

16世紀にはなかった技術の一例

Page 12: Knockout を用いた大規模 JavaScript 開発

MV* フレームワーク

Page 13: Knockout を用いた大規模 JavaScript 開発

MV* フレームワーク

✤ デザインパターンに従ってコードを良いかんじに書くためのサポートをしてくれるフレームワーク

✤ デザインパターンはいろいろあり、フレームワーク自体もいろいろ種類がある

Backbone MVC : Model-View-Controller Knockout MVVM : Model-View-ViewModelAngular MVW : Model-View-Whatever

デザインパターンの例

Page 14: Knockout を用いた大規模 JavaScript 開発

場面は転換し、

Page 15: Knockout を用いた大規模 JavaScript 開発

とあるフロントエンド開発現場…

Page 16: Knockout を用いた大規模 JavaScript 開発

スマホゲームの UI 開発をWebView でやることに

Page 17: Knockout を用いた大規模 JavaScript 開発

UI の八割方を WebView で実装

✤ 数百の HTML ファイル

✤ 数千行の SCSS

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

✤ 数万行の JavaScript

Page 18: Knockout を用いた大規模 JavaScript 開発

Q: なにがネックになったか?

Page 19: Knockout を用いた大規模 JavaScript 開発

A: データバインドの記述

Page 20: Knockout を用いた大規模 JavaScript 開発

ユーザーとのインタラクション

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

ユーザー

JS

①つぶやき投稿

③モデルの 状態が変化

②イベント通知

④ビューに反映

Page 21: Knockout を用いた大規模 JavaScript 開発

ユーザーとのインタラクション

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

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

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

✤ コードの総量も増えがち

Page 22: Knockout を用いた大規模 JavaScript 開発

どうすれば簡単にデータバインドを書けるか

Page 23: Knockout を用いた大規模 JavaScript 開発

MV* フレームワーク

Page 24: Knockout を用いた大規模 JavaScript 開発

MV* フレームワーク

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

✤ Angular : デフォルトである

✤ Knockout : デフォルトである

✤ Backbone : Epoxy.js とか使ってやる

Page 25: Knockout を用いた大規模 JavaScript 開発

MV* フレームワークは、データバインド機能を中心に、

コードを構造化する手助けをするライブラリなのかなと思ったり

Page 26: Knockout を用いた大規模 JavaScript 開発

そんなわけで、ゲームUI開発に Knockout 使っています

Page 27: Knockout を用いた大規模 JavaScript 開発

Knockout について

Page 28: Knockout を用いた大規模 JavaScript 開発

特徴

Page 29: Knockout を用いた大規模 JavaScript 開発

特徴

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

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

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

✤ 4, 拡張が用意

✤ 5, 公式チュートリアルがいけている

Page 30: Knockout を用いた大規模 JavaScript 開発

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

Page 31: Knockout を用いた大規模 JavaScript 開発

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

✤ HTML を見ればどこの要素が Knockout で操作されるか一目瞭然

✤ data-* 属性は正当な HTML 属性のため、実装した HTML が validな HTML になり、気分がよい

<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>

Knockout の data-bind の例

Page 32: Knockout を用いた大規模 JavaScript 開発

「コードは書く10倍読まれる」

Page 33: Knockout を用いた大規模 JavaScript 開発

ぱっと見でのわかりやすさ重要

Page 34: Knockout を用いた大規模 JavaScript 開発

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

Page 35: Knockout を用いた大規模 JavaScript 開発

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

✤ Knockout ではデータバインドは、かんじで記述

<開始タグ data-bind="データバインドの種類: 適用する変数名"></終了タグ>

function コンストラクタ() {

this.適用する変数 = ko.observable();}ko.applyBindings(new コンストラクタ());

ビュー

JavaScript

Page 36: Knockout を用いた大規模 JavaScript 開発

3/5組み込みのデータバインドがけっこういけている

Page 37: Knockout を用いた大規模 JavaScript 開発

様々な種類のデータバインドがあらかじめ組み込まれている

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

css binding CSS を適用

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

if binding if 文による分岐

Page 38: Knockout を用いた大規模 JavaScript 開発

4/5拡張が容易

Page 39: Knockout を用いた大規模 JavaScript 開発

カスタムバインディング

✤ 組み込みのデータバインドで物足りなくなったら、容易にデータバインドの種類を増やせる

✤ スマホゲーム案件では、20個以上の拡張データバインドを実装

Page 40: Knockout を用いた大規模 JavaScript 開発

5/5公式チュートリアルがいけている

Page 41: Knockout を用いた大規模 JavaScript 開発

対話形式でサクサク学べる

Page 42: Knockout を用いた大規模 JavaScript 開発

興味を持ったらまずは公式チュートリアル

Page 43: Knockout を用いた大規模 JavaScript 開発

まとめ

Page 44: Knockout を用いた大規模 JavaScript 開発

Knockout を使ったらいいかんじに大規模JS開発できました

Page 45: Knockout を用いた大規模 JavaScript 開発

21世紀のプログラマでよかった

Page 46: Knockout を用いた大規模 JavaScript 開発

めでたしめでたし

Page 47: Knockout を用いた大規模 JavaScript 開発

自己紹介

Page 48: Knockout を用いた大規模 JavaScript 開発

@iizukak on Github, Twitter