SlideShare a Scribd company logo
1 of 81
Download to read offline
NDS IN NIIGATA MEETUP #8
ミスリルの戦士たち
FRONTEND FANTASY
Friday the 13th
// me.json
{
“name”: “松井 正志”,
“kana”: “まつい まさし”,
“company”: “water-cell inc.”,
“role”: [
“フロントエンドエンジニア”,
“サーバーサイドエンジニア”
],
“twitter”: [“@circled9”, “@ma_2_i”]
} 33
Agenda
• Introduction
• Feature
• Architecture
• Tutorial
• Etcetera
• Conclusion
4
Introduction
5
みなさんがお使いの
フレームワークは何ですか?
6
Backbone.js
7
AngularJS
8
React & Flux
9
どれもすばらしい
フレームワーク
10
どれを使うべき?
11
RailsとSinatra
12
djangoとTornado
13
フレームワークは
使い分けるべき
14
15
Mithril
Feature
16
かるい
Light-weight
17
たった12KB (gzip)
18
小さなAPI、小さな学習曲線
• 用意されているAPIは全部で16個
• 毎日1個ずつ覚えれば2週間ちょっとでマスターで
きますね!(極論)
19
けんじつ
Robust
20
デフォルトで安全
21
コンポーネントによる分割
• Reactみたいに部品を組み合わせてViewを作る
• 部品の再利用がしやすい
• Fluxみたいな仕組みはなので、極力子コンポーネ
ントはステートレスにするとよい
22
割と堅実な方針
• しっかりとしたドキュメント
• 今のところ互換性無視の破壊的なアップデートもな
い模様
• 実装面でも、例えばRouterはIE8でも動くような
モードが用意されている
23
はやい
Fast
24
Virtual DOM
• Reactなどと同じ仮想DOMによる差分更新
• 実装の仕方も仮想DOMありきの実装になる
25
頭のいい再描画
• いろいろなイベントをトリガーにして更新をする
• クリックとか通信終了とか
• データに変更がおきるタイミングは大体その辺と
いう考え方
26
速度の比較
27
Architecture
28
Architecture
• Model
• View Model
• View
• Controller
29
Architecture
30
Component
Controller
View View Model
Model
Component
Controller
View View Model
30
Architecture
• クラス継承などはせず、すべて普通の関数、普通の
JavaScripオブジェクトとして実装する
• 割と実装は自由にできる
31
Model
• 普通のJavaScriptオブジェクト
• 責務はビジネスモデルのカプセル化
• m.prop()でgetter-setterを作る
32
Model View
• 普通のJavaScriptオブジェクト
• 責務はビューに関するロジックなどのカプセル化
• ビューのステートを保持したり、変更内容をモデル
に反映したりする
33
View
• ビューは関数として実装する
• 責務は表示とモデルのバインディング
• function() { return m(“div”) } みたいな感じで
定義していく。
34
Controller
• コントローラーは関数として実装する
• 責務は各レイヤーの初期化など
• 一般的なMVCのコントローラーのように、ユー
ザーの入力の取り扱いなどはしない
35
Architecture (再掲)
36
Component
Controller
View View Model
Model
Component
Controller
View View Model
36
Tutorial
37
前準備
MithrilをDLする
38
(CDNでもいいです)
39
HTMLを作る
40
41
コンポーネントを作る
42
43
44
ビューのモックを作る
45
46
ビューモデルを作る
47
48
49
ビューの動作を作る
50
51
52
おまけ
モデルの永続化をしてみる
53
54
55
56
Etcetera
57
Routing
• Routerも用意されている
• URL表記が違う3つのモードがある
• search / hash / pathname
58
Ajax
• m.request()で非同期でデータを取得する
• m.request()は、指定したモデルのクラスにキャ
ストしてデータを返す
59
他のライブラリとの共存
• config属性で実際のDOMを扱うライブラリを組
み込むことができる
60
MSX
• ビューを書くのがつらいときは、JSXライクなMSX
がる
• 普通に変換することもできるし、実行時に変換する
こともできる
61
Conclusion
62
ミスリルはミニマム
63
手軽に書きたい時に
すごくおすすめ
64
JSあるある
65
よーしJS書くぞー
↓
(開発環境構築で力尽きる)
66
どうしてこうなった
67
68
いっぱい
めんどい
むずかしい
69
まだビルドで
消耗してるの?
70
もうビルドやめよう?
71
もうES5で書こうよ
72
73
し
ゅ
み
だ
も
の
び
る
ど
し
な
く
て
も
い
い
じ
ゃ
な
い
(異論は認める)
74
たまにはES5で
JSを書いてみよう
75
76
Mithril
ミスリルでミニマムな
スタイル
77
References
78
公式サイト
79
オライリーのミスリル本
80
81
おしまい

More Related Content

What's hot

これからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comこれからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comyoku0825
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −Kohei Asai
 
Rubymotion
RubymotionRubymotion
Rubymotionjewel12
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口Sunao Tomita
 
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」Shunsuke Watanabe
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようYuusuke Takeuchi
 
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話Yutaro Miyazaki
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発するHiroyuki Kusu
 
ビルド職人の朝は早い
ビルド職人の朝は早いビルド職人の朝は早い
ビルド職人の朝は早いMasashi MATSUI
 
Type scriptmemo
Type scriptmemoType scriptmemo
Type scriptmemoytanno
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Frameworkkamiyam .
 
MySQLの系譜について少々
MySQLの系譜について少々MySQLの系譜について少々
MySQLの系譜について少々yoku0825
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるzuya
 
Introduction of mruby & Webruby script example
Introduction of mruby & Webruby script exampleIntroduction of mruby & Webruby script example
Introduction of mruby & Webruby script examplekishima7
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたいMasato Noguchi
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリットIto Kohta
 

What's hot (20)

これからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comこれからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.com
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
 
Rubymotion
RubymotionRubymotion
Rubymotion
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
 
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
 
ビルド職人の朝は早い
ビルド職人の朝は早いビルド職人の朝は早い
ビルド職人の朝は早い
 
Type scriptmemo
Type scriptmemoType scriptmemo
Type scriptmemo
 
片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 
MySQLの系譜について少々
MySQLの系譜について少々MySQLの系譜について少々
MySQLの系譜について少々
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
Introduction of mruby & Webruby script example
Introduction of mruby & Webruby script exampleIntroduction of mruby & Webruby script example
Introduction of mruby & Webruby script example
 
Node.js Hands-On
Node.js Hands-OnNode.js Hands-On
Node.js Hands-On
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
 

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

Project Sumatra - JavaOne2012報告会 #j1rep
Project Sumatra - JavaOne2012報告会 #j1repProject Sumatra - JavaOne2012報告会 #j1rep
Project Sumatra - JavaOne2012報告会 #j1repYuji Kubota
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjugYuji Kubota
 
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計MicroAd, Inc.(Engineer)
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Yuichi Yoshida
 
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Kazuki Morozumi
 
JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]
JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]
JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]Yusuke Suzuki
 
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだらもしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだらTomoki Ando
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Takashi Sogabe
 
サイタマッパー活動報告2015
サイタマッパー活動報告2015サイタマッパー活動報告2015
サイタマッパー活動報告2015Kazuho Ohta
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネット株式会社
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Developers Summit
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜MicroAd, Inc.(Engineer)
 
金沢すきま旅を支えるオープンデータ
金沢すきま旅を支えるオープンデータ金沢すきま旅を支えるオープンデータ
金沢すきま旅を支えるオープンデータRyota Iida
 
The Essence of Using Ruby on Rails in Corporations 2nd
The Essence of Using Ruby on Rails in Corporations 2ndThe Essence of Using Ruby on Rails in Corporations 2nd
The Essence of Using Ruby on Rails in Corporations 2ndKoichiro Ohba
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
KaggleのテクニックYasunori Ozaki
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 

Similar to Frontend Fantasy 〜ミスリルの戦士たち〜 (20)

Project Sumatra - JavaOne2012報告会 #j1rep
Project Sumatra - JavaOne2012報告会 #j1repProject Sumatra - JavaOne2012報告会 #j1rep
Project Sumatra - JavaOne2012報告会 #j1rep
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
 
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜
 
JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]
JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]
JJUC CCC 2013 Fall 基調講演「Javaと未来のこととCCC]
 
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだらもしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
サイタマッパー活動報告2015
サイタマッパー活動報告2015サイタマッパー活動報告2015
サイタマッパー活動報告2015
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
 
金沢すきま旅を支えるオープンデータ
金沢すきま旅を支えるオープンデータ金沢すきま旅を支えるオープンデータ
金沢すきま旅を支えるオープンデータ
 
The Essence of Using Ruby on Rails in Corporations 2nd
The Essence of Using Ruby on Rails in Corporations 2ndThe Essence of Using Ruby on Rails in Corporations 2nd
The Essence of Using Ruby on Rails in Corporations 2nd
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 

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