Recommended
FINAL FANTASY Record Keeperを支えたGolang
Chunked encoding を使った高速化の考察
Mithril - 軽量/高速なMVCフレームワーク
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
【Unite Tokyo 2019】Understanding C# Struct All Things
The History of Reactive Extensions
Unityで使える C# 6.0~と .NET 4.6
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UniRx - Reactive Extensions for Unity
NextGen Server/Client Architecture - gRPC + Unity + C#
DeNAのゲーム開発を支える技術 (クライアントサイド編)
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
A Framework for LightUp Applications of Grani
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
Introduction to JIT Compiler in JVM
Effective web performance tuning for smartphone
FINAL FANTASY Record Keeperのマスターデータを支える技術
DeNAの最新のマスタデータ管理システム Oyakata の全容
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
FINAL FANTASY
Record Keeper 演出データについて
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Go & multi platform GUI Trials and Errors
More Related Content
FINAL FANTASY Record Keeperを支えたGolang
Chunked encoding を使った高速化の考察
Mithril - 軽量/高速なMVCフレームワーク
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
【Unite Tokyo 2019】Understanding C# Struct All Things
The History of Reactive Extensions
What's hot (20) Unityで使える C# 6.0~と .NET 4.6
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UniRx - Reactive Extensions for Unity
NextGen Server/Client Architecture - gRPC + Unity + C#
DeNAのゲーム開発を支える技術 (クライアントサイド編)
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
A Framework for LightUp Applications of Grani
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
Introduction to JIT Compiler in JVM
Effective web performance tuning for smartphone
FINAL FANTASY Record Keeperのマスターデータを支える技術
DeNAの最新のマスタデータ管理システム Oyakata の全容
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
FINAL FANTASY
Record Keeper 演出データについて
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Viewers also liked (20) Go & multi platform GUI Trials and Errors
Oktavia全文検索エンジン - SphinxCon JP 2014
[C++ GUI Programming with Qt4] chap6
Advanced file permissions in linux
Who is the person whom the IT engineers should learn next to Alexander?
TOSHIBAxGUGEN FlashAirハッカソン-FlashAirでなに作る?
お前なんかハッカーじゃない╭( ・ㅂ・)و ̑̑
[Golang] Go言語でサービス作ってる話
Python Programming - XIII. GUI Programming
C++コードはいらない!UE4で作るお手軽マルチプレイネットワークゲームについて
Develop Android app using Golang
FFRKを支えるWebアプリケーションフレームワークの技術
Similar to Mithril (20)
App Modernization for .NET
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
2013 Ignite UI 最新情報 in 岡山
Airflowを広告データのワークフローエンジンとして運用してみた話
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
モバイルHTML5サイトでの写真アップロードの最適化と業務アプリへの適用
XenDesktop / XenAppグラフィック ディープダイブ
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
More from Yoshiki Shibukawa (20) 多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
東京Node学園 今できる通信高速化にトライしてみた
Oktavia Search Engine - pyconjp2014
Expert JavaScript Programming
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Sphinx Tutorial at BPStudy#30
EUnit in Practice(Japanese)
Mithril1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
meetup app tokyo@1
Web MVC+SPAフレームワーク
Mithril
2016/06/24
GDI 渋川よしき
2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
お前だれよ?
前職
⁃ 自動車会社の社内SE
現職
⁃ 社内ゲームエンジン用のフレームワーク
(クライアント用もサーバ用も)作ったり、
開発支援ツール作ったりいわゆる社内SE
⁃ 最近はQt(C++)を毎日書いてます
渋川 よしき
プログラミング
C++とかPythonとかGolangとかJavaScriptとか
本
つまみぐい勉強法、アート・オブ・コミュニティ(翻訳)、
Mobageを支える技術、オブジェクト指向JavaScript(翻訳)、
ポモドーロ・テクニック入門(翻訳)、etc
3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
昨年出しました!
JavaScriptの、最速クライアント用MVCフレームワークの本です!
⁃ 速いのが好きな人や、変化が多いブラウザ周辺技術に疲れた人に
オススメ
⁃ 古くなってません!
電子書籍のみです
表紙は黒ムツの仲間
⁃ 南オセアニアの深海魚
⁃ 最大75cm
⁃ 確認された最高齢は
100歳を超えるとか
5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
かんたん/Easy/Simpleについて
かんたん/Easy/Simpleといった言葉がよく使われる
ソフトウェアのライブラリ・フレームワーク・言語は特定の問題の解決
をしやすくするために作られる
→対象を限定すればどのソフトウェアも「かんたん」で説明できる
→つまり何も説明していないのと同じ
例えば
⁃ Qt/Xamarin
• 1度GUI作成を学べば、同じ知識で他のOSのアプリも「かんたんに」作れる
⁃ Angular
• 束縛が強いため、レールに乗って「かんたんに」MVCアプリが作れる
⁃ Electron
• ブラウザの知識があれば「かんたんに」デスクトップアプリが作れる
⁃ C++
• ゼロオーバーヘッドでC言語よりも遅くないコードが「かんたんに」作れる
6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
かんたん/Easy/Simpleについて
かんたん/Easy/Simpleといった言葉がよく使われる
ソフトウェアのライブラリ・フレームワーク・言語は特定の問題の解決
をしやすくするために作られる
→対象を限定すればどのソフトウェアも「かんたん」で説明できる
→つまり何も説明していないのと同じ
例えば
⁃ Qt/Xamarin
• 1度GUI作成を学べば、同じ知識で他のOSのアプリも「かんたんに」作れる
⁃ Angular
• 束縛が強いため、レールに乗って「かんたんに」MVCアプリが作れる
⁃ Electron
• ブラウザの知識があれば「かんたんに」デスクトップアプリが作れる
⁃ C++
• ゼロオーバーヘッドでC言語よりも遅くないコードが「かんたんに」作れる
かんたん/Easy/Simpleは今日のNGワード
8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Mithrilとは
ドキュメントの日本語翻訳あります!
http://mithril-ja.js.org
9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Mithrilの守備範囲
V-DOM
Router (SPA)
Component XHR
サーバへの通信コード含めて
Mithrilで完結
ビジュアル層は好きなCSS
フレームワーク等が利用可能
(ただしPolymerはChrome限定)
その他、既存のUIライブラリも
使える(jQuery UI系など)
10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Mithrilのコア
機能が絞りこまれたアトミックなWebのMVC+SPAフレームワーク
⁃ 他のライブラリに依存せずにアプリが作れる
• サーバ通信、非同期処理(promise)、モデル作成、SPAサポート(ラウター)
仮想DOM、コンポーネント
⁃ gzipされた状態で7.8KBほどの大きさ
• リファレンスに乗っている関数は16個ほど
• そのうちよく使うのは半分ぐらい?
• 本を書き始めてから1年以上、バグ修正等で更新は頻繁にあるが、
ほとんどAPIに変更がない
内部では仮想DOMという仕組みを使っていて比較的高速
⁃ 詳細は「最速MVCフレームワークMithril.jsの速度の秘密」(Qiita)
⁃ 速度チューニングも可能だが、そこまで頑張る必要性が低い
12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Mithrilアプリケーションの構造
実際に作ったアプリケーションを参考に紹介します。
14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
戦魂 –SENTAMA-
戦国時代がモチーフの戦略シミュレーションRPG
開発の目線での紹介はこちら
(http://www.slideshare.net/dena_study/unityrpg)にまとまって
います
15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
戦魂チーム向けの運用改善
マスターデータ運用は、昨年のFINAL FANTASY Record Keeperのマ
スターデータ運用改善で発表したのと同じ仕組みは導入済みだった
スプレッドシートでは表現が難しく入力⇔確認に手間がかかるデータが
2つほどあったのでElectronを使って入力補助ツールを作成した
⁃ 戦場マップ
⁃ 列伝(キャンペーンモード)のオープニングシーケンス
これらを題材に、Mithrilアプリケーションの構造を紹介します
16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
できあがったもの
今までのワークフローに手を入れることはなく入力高速化にフォーカス
⁃ Mithril同様、アトミックな部分に割りきって、費用対効果最大化
⁃ コピペ・ツールチェーン(後工程のスプレッドシートにコピペで
データを移せるように、整形した表を表示)
⁃ 試行錯誤の時間が増えて、よりユーザに楽しんでもらえる演出、
マップづくりに時間が使えるようになった
17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Mithrilアプリケーションの基本設計 (1)
HTMLの一部をMithrilの仮想DOM管理下にする
⁃ m.mount(): 1つのコンポーネントに描画を任せる
⁃ m.route(): 現在のURLに応じてコンポーネントを切り替える
全部を仮想DOMにまかせてしまうのも可だが、ヘッダー、フッターな
ど変化しない部分は静的HTMLのままの方が楽
複数パートに分割適用もできる(した)
m.route()
m.mount()
m.mount()
18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
できあがった構造
main.js
application
context.js
script/index.j
s
script/
xxx page.js
script/
xxx page.js
script/
xxx page.js
script/viewm
odel.js
script/model
.jswindow
open
undo/redo
script/
canvasmap.js
19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Mithrilアプリケーションの基本設計(2)
コンポーネント、ビューモデル、モデルでアプリを組み立てる
⁃ コンポーネントはコントローラとビューで構成
• どちらも状態は持たない
• コンポーネントは入れ子にできる
⁃ ビューモデルは編集中のデータなど永続化しないデータ持つ
⁃ モデルは永続化するべき大事なデータを持つ
• VMとMの機能分けは規約でそうなっているだけでAPI上は1つにまとめるこ
とも不可能ではない
• それどころか、コントローラ==モデルにすることもAPI上は不可能ではな
いが、上記の規約に従う方がよい
• クラス継承等でコード的にルール強制されるわけではないので、自分で
Mithril Wayに従ってコードを整理しなければいけない点は要注意
20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
戦場マップエディタのコンポーネント・ビュー(1)
各ページのトップはコンポーネント
よく使うマップ部分もコンポーネント化した
⁃ <canvas>タグをm()で作り、ビューのconfigから、
requestAnimationFrame()の再帰的呼び出しでcanvas更新
⁃ 引数でモード切り替え
• モードによって要素のフィルタリング・サイズ変更など
21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
戦場マップエディタのコンポーネント・ビュー(2)
ビューの一部に、仮想DOM以外のライブラリを併用することが可能
⁃ 既存のUI部品資産があれば、それを利用できる
表はMITライセンス版のhandsontableを使用
⁃ ビューのconfigの機能を使って適用
⁃ 行・列のどちらの方向もExcelっぽく選択でき、コピペでExcelにそ
のまま貼れる
22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
シングルページアプリケーションのサポート
画面の完全リロードやリセットが起きなくなり、レスポンスがよくなる
Mithrilの場合は、フルリロードの従来型ウェブアプリケーションも、
SPAにする場合も、コードは特に変わらないので対応しない理由はない
URLのスタイルがいくつか選べる
今回はデフォルトのまま利用
スタイル 例 デメリット
“search” (デフォルト) http://server/?/path/to/page history.pushStateがないIE8ではリフレッシュ
してしまう
“hash” http://server/#/path/to/page どのブラウザでもOKだが、名前付きアン
カーが使えなくなる
“pathname” http://server/path/to/page URLは一番きれいだが、サーバ側の設定が必
要
history.pushStateがないIE8ではリフレッシュ
してしまう
23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
おまけ: Electron側の描画側ではない方のプロセス
ブラウザ/レンダラプロセス間のインタラクションを疎にしつつ、普通
のデスクトップアプリの使い勝手を再現した
⁃ Electronのブラウザプロセス側のコードはモデルの履歴管理と、
ファイル入出力に特化する。
⁃ ブラウザがXHRでサーバ通信する代わりに、編集(モデル変更)時に
レンダラープロセスがJSONをブラウザプロセスに送る
⁃ ファイル読み込み、アンドゥ・リドゥ実行時にブラウザプロセスか
ら、今表示すべきモデルを
レンダラープロセスに送り、
Mithrilのモデルをリセット
⁃ 詳しくはQiitaの「Electron+
Mithrilで、ふつうのデスク
トップアプリを作る」参照
28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
橘田いずみさんの餃子のコア
アトミックな餃子フレームワーク
⁃ 限界まで絞りこまれたシンプルな材料
• 豚肉・青ネギ・生姜のみ
• ニンニクもニラも使わず、豚肉を混ぜるときは箸で行う
⁃ 夕食以外も安心して食べられる
⁃ 爪の手入れをしている女性にも優しそう
⁃ これに、各種野菜などをアドオンして餡を仕上げる
• 単に混ぜるだけなので、肉餡をたくさん作ってから小分けにして、一度に
数種類の餃子を仕上げることも可能
高いポータビリティ
⁃ 肉餡の状態の状態でも保存ができるし、餃子にしても保存が可能
29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
まとめ
MithrilはアトミックなMVC+SPAフレームワーク
⁃ 関数の数が少なく、余計な機能がないため、APIの変更もほぼない
⁃ デスクトップGUI開発者も勉強になりますよ!
CSSフレームワークは自由に切り替えられる
⁃ 僕のお気に入りはMaterial Design Lite (mithril-mdl)
⁃ ShadowDOMが来たらPolymerが・・・
コンポーネントの分割、ビューモデル、モデルの責務分割が勝利の鍵
⁃ データの流れを整流
既存のUIライブラリと一緒に使ったり、canvas
を組み込んだりもできます
Electronと一緒に使うのも簡単
⁃ 社内ツールを作ってみた
餃子と同じぐらいMithrilもいいよ