81
NDS IN NIIGATA MEETUP #8 ミスリルの戦士たち FRONTEND FANTASY

Frontend Fantasy 〜ミスリルの戦士たち〜

Embed Size (px)

Citation preview

Page 1: Frontend Fantasy 〜ミスリルの戦士たち〜

NDS IN NIIGATA MEETUP #8

ミスリルの戦士たちFRONTEND FANTASY

Page 2: Frontend Fantasy 〜ミスリルの戦士たち〜

Friday the 13th

Page 3: Frontend Fantasy 〜ミスリルの戦士たち〜

// me.json

{

“name”: “松井 正志”,

“kana”: “まつい まさし”,

“company”: “water-cell inc.”,

“role”: [

“フロントエンドエンジニア”,

“サーバーサイドエンジニア”

],

“twitter”: [“@circled9”, “@ma_2_i”]

} 33

Page 4: Frontend Fantasy 〜ミスリルの戦士たち〜

Agenda• Introduction

• Feature

• Architecture

• Tutorial

• Etcetera

• Conclusion4

Page 5: Frontend Fantasy 〜ミスリルの戦士たち〜

Introduction

5

Page 6: Frontend Fantasy 〜ミスリルの戦士たち〜

みなさんがお使いの フレームワークは何ですか?

6

Page 7: Frontend Fantasy 〜ミスリルの戦士たち〜

Backbone.js

7

Page 8: Frontend Fantasy 〜ミスリルの戦士たち〜

AngularJS

8

Page 9: Frontend Fantasy 〜ミスリルの戦士たち〜

React & Flux

9

Page 10: Frontend Fantasy 〜ミスリルの戦士たち〜

どれもすばらしい フレームワーク

10

Page 11: Frontend Fantasy 〜ミスリルの戦士たち〜

どれを使うべき?

11

Page 12: Frontend Fantasy 〜ミスリルの戦士たち〜

RailsとSinatra

12

Page 13: Frontend Fantasy 〜ミスリルの戦士たち〜

djangoとTornado

13

Page 14: Frontend Fantasy 〜ミスリルの戦士たち〜

フレームワークは 使い分けるべき

14

Page 15: Frontend Fantasy 〜ミスリルの戦士たち〜

15

Mithril

Page 16: Frontend Fantasy 〜ミスリルの戦士たち〜

Feature

16

Page 17: Frontend Fantasy 〜ミスリルの戦士たち〜

かるい Light-weight

17

Page 18: Frontend Fantasy 〜ミスリルの戦士たち〜

たった12KB (gzip)

18

Page 19: Frontend Fantasy 〜ミスリルの戦士たち〜

小さなAPI、小さな学習曲線

• 用意されているAPIは全部で16個

• 毎日1個ずつ覚えれば2週間ちょっとでマスターできますね!(極論)

19

Page 20: Frontend Fantasy 〜ミスリルの戦士たち〜

けんじつ Robust

20

Page 21: Frontend Fantasy 〜ミスリルの戦士たち〜

デフォルトで安全

21

Page 22: Frontend Fantasy 〜ミスリルの戦士たち〜

コンポーネントによる分割

• Reactみたいに部品を組み合わせてViewを作る

• 部品の再利用がしやすい

• Fluxみたいな仕組みはなので、極力子コンポーネントはステートレスにするとよい

22

Page 23: Frontend Fantasy 〜ミスリルの戦士たち〜

割と堅実な方針

• しっかりとしたドキュメント

• 今のところ互換性無視の破壊的なアップデートもない模様

• 実装面でも、例えばRouterはIE8でも動くようなモードが用意されている

23

Page 24: Frontend Fantasy 〜ミスリルの戦士たち〜

はやい Fast

24

Page 25: Frontend Fantasy 〜ミスリルの戦士たち〜

Virtual DOM

• Reactなどと同じ仮想DOMによる差分更新

• 実装の仕方も仮想DOMありきの実装になる

25

Page 26: Frontend Fantasy 〜ミスリルの戦士たち〜

頭のいい再描画

• いろいろなイベントをトリガーにして更新をする

• クリックとか通信終了とか

• データに変更がおきるタイミングは大体その辺という考え方

26

Page 27: Frontend Fantasy 〜ミスリルの戦士たち〜

速度の比較

27

Page 28: Frontend Fantasy 〜ミスリルの戦士たち〜

Architecture

28

Page 29: Frontend Fantasy 〜ミスリルの戦士たち〜

Architecture

• Model

• View Model

• View

• Controller

29

Page 30: Frontend Fantasy 〜ミスリルの戦士たち〜

Architecture

30

Component

Controller

View View Model

ModelComponent

Controller

View View Model

30

Page 31: Frontend Fantasy 〜ミスリルの戦士たち〜

Architecture

• クラス継承などはせず、すべて普通の関数、普通のJavaScripオブジェクトとして実装する

• 割と実装は自由にできる

31

Page 32: Frontend Fantasy 〜ミスリルの戦士たち〜

Model

• 普通のJavaScriptオブジェクト

• 責務はビジネスモデルのカプセル化

• m.prop()でgetter-setterを作る

32

Page 33: Frontend Fantasy 〜ミスリルの戦士たち〜

Model View

• 普通のJavaScriptオブジェクト

• 責務はビューに関するロジックなどのカプセル化

• ビューのステートを保持したり、変更内容をモデルに反映したりする

33

Page 34: Frontend Fantasy 〜ミスリルの戦士たち〜

View

• ビューは関数として実装する

• 責務は表示とモデルのバインディング

• function() { return m(“div”) } みたいな感じで定義していく。

34

Page 35: Frontend Fantasy 〜ミスリルの戦士たち〜

Controller

• コントローラーは関数として実装する

• 責務は各レイヤーの初期化など

• 一般的なMVCのコントローラーのように、ユーザーの入力の取り扱いなどはしない

35

Page 36: Frontend Fantasy 〜ミスリルの戦士たち〜

Architecture (再掲)

36

Component

Controller

View View Model

ModelComponent

Controller

View View Model

36

Page 37: Frontend Fantasy 〜ミスリルの戦士たち〜

Tutorial

37

Page 38: Frontend Fantasy 〜ミスリルの戦士たち〜

前準備 MithrilをDLする

38

Page 39: Frontend Fantasy 〜ミスリルの戦士たち〜

(CDNでもいいです)

39

Page 40: Frontend Fantasy 〜ミスリルの戦士たち〜

HTMLを作る

40

Page 41: Frontend Fantasy 〜ミスリルの戦士たち〜

41

Page 42: Frontend Fantasy 〜ミスリルの戦士たち〜

コンポーネントを作る

42

Page 43: Frontend Fantasy 〜ミスリルの戦士たち〜

43

Page 44: Frontend Fantasy 〜ミスリルの戦士たち〜

44

Page 45: Frontend Fantasy 〜ミスリルの戦士たち〜

ビューのモックを作る

45

Page 46: Frontend Fantasy 〜ミスリルの戦士たち〜

46

Page 47: Frontend Fantasy 〜ミスリルの戦士たち〜

ビューモデルを作る

47

Page 48: Frontend Fantasy 〜ミスリルの戦士たち〜

48

Page 49: Frontend Fantasy 〜ミスリルの戦士たち〜

49

Page 50: Frontend Fantasy 〜ミスリルの戦士たち〜

ビューの動作を作る

50

Page 51: Frontend Fantasy 〜ミスリルの戦士たち〜

51

Page 52: Frontend Fantasy 〜ミスリルの戦士たち〜

52

Page 53: Frontend Fantasy 〜ミスリルの戦士たち〜

おまけ モデルの永続化をしてみる

53

Page 54: Frontend Fantasy 〜ミスリルの戦士たち〜

54

Page 55: Frontend Fantasy 〜ミスリルの戦士たち〜

55

Page 56: Frontend Fantasy 〜ミスリルの戦士たち〜

56

Page 57: Frontend Fantasy 〜ミスリルの戦士たち〜

Etcetera

57

Page 58: Frontend Fantasy 〜ミスリルの戦士たち〜

Routing

• Routerも用意されている

• URL表記が違う3つのモードがある

• search / hash / pathname

58

Page 59: Frontend Fantasy 〜ミスリルの戦士たち〜

Ajax

• m.request()で非同期でデータを取得する

• m.request()は、指定したモデルのクラスにキャストしてデータを返す

59

Page 60: Frontend Fantasy 〜ミスリルの戦士たち〜

他のライブラリとの共存

• config属性で実際のDOMを扱うライブラリを組み込むことができる

60

Page 61: Frontend Fantasy 〜ミスリルの戦士たち〜

MSX

• ビューを書くのがつらいときは、JSXライクなMSXがる

• 普通に変換することもできるし、実行時に変換することもできる

61

Page 62: Frontend Fantasy 〜ミスリルの戦士たち〜

Conclusion

62

Page 63: Frontend Fantasy 〜ミスリルの戦士たち〜

ミスリルはミニマム

63

Page 64: Frontend Fantasy 〜ミスリルの戦士たち〜

手軽に書きたい時に すごくおすすめ

64

Page 65: Frontend Fantasy 〜ミスリルの戦士たち〜

JSあるある

65

Page 66: Frontend Fantasy 〜ミスリルの戦士たち〜

よーしJS書くぞー ↓

(開発環境構築で力尽きる)

66

Page 67: Frontend Fantasy 〜ミスリルの戦士たち〜

どうしてこうなった

67

Page 68: Frontend Fantasy 〜ミスリルの戦士たち〜

68

Page 69: Frontend Fantasy 〜ミスリルの戦士たち〜

いっぱい めんどい むずかしい

69

Page 70: Frontend Fantasy 〜ミスリルの戦士たち〜

まだビルドで 消耗してるの?

70

Page 71: Frontend Fantasy 〜ミスリルの戦士たち〜

もうビルドやめよう?

71

Page 72: Frontend Fantasy 〜ミスリルの戦士たち〜

もうES5で書こうよ

72

Page 73: Frontend Fantasy 〜ミスリルの戦士たち〜

73

しゅみだもの

びるどしなくても

いいじゃない

Page 74: Frontend Fantasy 〜ミスリルの戦士たち〜

(異論は認める)

74

Page 75: Frontend Fantasy 〜ミスリルの戦士たち〜

たまにはES5で JSを書いてみよう

75

Page 76: Frontend Fantasy 〜ミスリルの戦士たち〜

76

Mithril

Page 77: Frontend Fantasy 〜ミスリルの戦士たち〜

ミスリルでミニマムなスタイル

77

Page 78: Frontend Fantasy 〜ミスリルの戦士たち〜

References

78

Page 79: Frontend Fantasy 〜ミスリルの戦士たち〜

公式サイト

79

Page 80: Frontend Fantasy 〜ミスリルの戦士たち〜

オライリーのミスリル本

80

Page 81: Frontend Fantasy 〜ミスリルの戦士たち〜

81

おしまい