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