SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Vue.jsをHaxeで
2017-12-02
terurou
自己紹介:terurou
• デンキヤギ(株) 代表取締役
• NGK2017B実行委員、DSTokai管理人
• 主に基盤チームおじさん
• Transiru(自社開発)に最近やっと携われるように…
• プレゼン(スライド+音声)をWeb配信
• ビジネス面での転換もあり、Haxe/JS + Vue.jsで作り直し中
社員募集
• 会社見学で焼肉or寿司が食べられます(採用教育費)
• 「広義のWeb系開発者」を歓迎
• 業務SE/ディレクター(ビジネス要求を交通整理する人)や
型に興味のあるWeb Frontendエンジニアは大歓迎
• 連絡先:@terurou / info@denkiyagi.jp まで
Vue.jsとHaxeとは
ここから本題
Vue.jsとは
• 三大Web Frontend Frameworkの一角(2017年末時点)
• Vue.js以外はReact(+Redux), Angular
• 学習コストが低い(vs Angular, React/Redux)
• 原理主義すぎない, Webは泥臭い(vs React)
• オールインワンではない(vs Angular)
• 他より手軽で、開発規模が小さくても適用しやすいが、
プロジェクト統制力が若干劣る
Haxeとは
• オブジェクト指向+関数型
• ActionScript 3(ECMAScript4の構文+OCaml)
• マルチプラットフォームをターゲットにコンパイル
• JS, Flash, C++, C#, Java, PHP, Lua, …
• ゲームでの実績が多い
• Haxe創始者はShiro Games(Indie Game開発)のCTO
• 日本国内の著名なユーザー企業はヌーラボ社
ヌーラボさん、
Haxeの仕事お待ちしてます
Haxeの良いところ
• HaxeのEnumはすごい
• 代数的データ型、GADT
• 強力なマクロ
• ASTを操作してコード生成・変換
• ビルドプロセス内でのIO(File, Process, Socket, …)
• JSへのトランスコンパイルが超高速
• JSターゲット以外はほぼ触ってないのでわからん…
覚えて帰るか、
SNSに流しましょう
Vue.jsとHaxeの相性
Vue.jsとHaxeの相性は
微妙
何があかんのか
Single File Componentsがうまく扱えない
Single File Components(SFC)とは
• JS(NPMモジュール), HTML Template, CSS Modulesを
1ファイルにまとめて、コンポーネント管理しやすく
• 性能面も有利
• Webpack (vue-loader)等でのビルドが必要となるが、
Template文字列が事前コンパイルされる
• Vue.js自体を軽量版(Template Compiler抜き)にできる
• 開発ツールサポートあり(VS Code Plugin: vetur)
SFCのイメージ
<template>
<p>Hello {{name}}!</p>
</template>
<script>
module.exports = {
data: () => { name: 'terurou' }
}
</script>
<style scoped>
p { font-size: 20px; }
</style>
1ファイル内に
・Template(HTML)
・JS(NPM Module)
・CSS
どうやってHaxeとSFCを連携させる?
Haxeが出力するJSコードと
SFCを一対一で紐づけできれば…
ちょっと考えたが、
Haxe的に破綻してるのでアカン
HaxeとSFCの定義粒度のギャップ
• Haxeの管理単位はプロジェクトごと
• プロジェクトをビルドすると、プロジェクト全体が単一の
JSファイルになって出力される
• 出力JSファイルはWebpack等でbundleしたものに近い
• SFCの管理単位はコンポーネントごと
• vue-loaderはbundleされていないJSを期待している
• 1コンポーネント=1プロジェクトは破綻した発想
haxe-modular (採用見送り)
• Haxe/JS出力コードを複数NPMモジュールに分割できる
• NPMモジュールに分割できれば、vue-loaderで処理できる
• 色々気持ち悪いので、採用見送り
• コード記述に制限が生じる(分割箇所を特定させるため)
• ビルド後に別処理で無理やりJSファイルを分割する実装
• 蛇足だが、Haxe + React方面では使われているっぽい
こうなった
そもそもSFCを使うと何が嬉しいんだっけ?
• JS(NPMモジュール), HTML Template, CSS Modulesを
1ファイルにまとめて、コンポーネント管理しやすく
• 性能面も有利
• Webpack (vue-loader)等でのビルドが必要となるが、
Template文字列が事前コンパイルされる
• Vue.js自体を軽量版(Template Compiler抜き)にできる
• 開発ツールサポートあり(VS Code Plugin: vetur)
そもそもSFCを使うと何が嬉しいんだっけ?
• JS(NPMモジュール), HTML Template, CSS Modulesを
1ファイルにまとめて、コンポーネント管理しやすく
• 性能面も有利
• Webpack (vue-loader)等でのビルドが必要となるが、
Template文字列が事前コンパイルされる
• Vue.js自体を軽量版(Template Compiler抜き)にできる
• 開発ツールサポートあり(VS Code Plugin: vetur)
Template文字列をコンパイルする
手段があればどうにかなるかも
公式がCompilerをNPMで配布してるやんけ!!
vue-template-compiler
Vue.hx
なんかナイスソリューションが思い浮かんだらしい
Vue.hxというものを作り始めた
• Haxe extern for Vue.js
• Vue.js extern自体は他にも存在するが敢えて新規開発
• SFCの扱い方に新規性がある
• GitHub
• https://github.com/DenkiYagi/vue.hx
• この発表の時点では「ソースが置いてあるだけ」の状態
方向性:Webpackを捨てる
• SFCを使って嬉しい事はTemplateの事前コンパイル
• ブラウザ実行時に辻褄が合っていればOK
• Webpackに頼らずTemplateをコンパイルする方法を検討
• もしHaxeだけでビルド可能であれば、高速化も期待できる
• Webpackに限らずJSのビルドツールは全体的に遅い傾向…
SFCのコンパイル方法:Webpack(vue-loader)を解析
• vue-template-compilerが使われている
• SFCをコンパイルすると<template>はrender関数文字列、
<style>はCSS文字列となる
• render関数はそのままJSコードとして扱える
• CSSはTemplateで記述した文字列がそのまま出力されるので
PostCSS(CSS ModulesやAutoprefixer等)で別途処理している
できたもの:HaxeのマクロでSFCを処理
• SFCをマクロで処理しやすいように分割記述
• JS部分のみをHaxeクラスとして記述
• HTML/CSS部分を<script>パートなしのSFCとして記述
• Single Fileとは何だったのか
• @:autoBuildマクロにより、Haxe側から紐づくSFCを
コンパイルして取り込む
@:autoBuildマクロ
• @:autoBuild付きinterfaceを継承したクラスを作成すると、
コンパイル時のマクロ処理対象となる
• マクロからNode.jsプロセスを実行し、SFCを取り込む
• vue-loaderの解析結果に準拠してSFCをコンパイル
• render関数はAST変換で当該クラスにインライン埋込
• CSSはマクロのポスト処理コールバックでファイル出力
Vue.hxでのコンポーネント定義イメージ
// Hello.hx
import vuehx.IVueComponent;
class Hello implements IVueComponent {
// vue.jsのオプションを記述
var _ = {
data: function () {
return { name: "terurou" };
}
}
}
<!– Hello.vue -->
<template>
<p class="$styles.hello">Hello
{{name}}!</p>
</template>
<style modules>
.hello { font-size: 20px; }
</style>
IVueComponentを継承するとマクロが
自動でSFCをコンパイル+結合する。
Single Fileとは何だったのか。
Vue.hxの残課題
• externをまだ完全に書き切ってない+テスト不足
• いちおう自社プロダクトで使用中だが…
• Vue.js自体への型付けをもう少し工夫できる余地あり
• 型安全、入力補完
• マクロのパフォーマンスチューニング
• SFCのコンパイルキャッシュ
• Haxelib(Haxeのパッケージマネージャ)に未対応
Webpackを捨てた影響
• Hot Module Replacement(HMR)が利用不能に
• Haxe/JSはビルドが超高速なので、影響なしでは???
• そもそも「モダンJS開発のビルド遅すぎで開発効率が低い」
問題に対するワークアラウンドがHMRという認識
• HMRでは開発ビルドと本番ビルドと大きな差異が発生する
• Browsersync等でのオートリロードで必要十分
• むしろ生産性は向上したのでは???
まとめ
LT発表時間は足りているのか…?
まとめ
• HaxeとVue.js(SFC)は相性があまり良くないが、
Webpack(Vue.jsのエコシステム・ツールチェイン)を
捨てることで、快適なHaxe + Vue.js開発を実現
• Haxeのマクロすごい
• Vue.js公式がNPMでTemplate Compilerを配布していて
本当によかった
• Vue.hxは自社で使うので今後アップデート予定

Contenu connexe

Similaire à Vue.jsをhaxeで

ON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったことON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったこと
Masakazu Muraoka
 
HTML5とCSS3でWebが変わる!でも導入は簡単!
HTML5とCSS3でWebが変わる!でも導入は簡単!HTML5とCSS3でWebが変わる!でも導入は簡単!
HTML5とCSS3でWebが変わる!でも導入は簡単!
Toshihito Gamo
 

Similaire à Vue.jsをhaxeで (20)

HBの人材育成について 2022
HBの人材育成について 2022HBの人材育成について 2022
HBの人材育成について 2022
 
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩みドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
 
静的HTMLファイルをWordPressのテーマにするワークショップ
静的HTMLファイルをWordPressのテーマにするワークショップ静的HTMLファイルをWordPressのテーマにするワークショップ
静的HTMLファイルをWordPressのテーマにするワークショップ
 
リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例
 
ON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったことON HTML5 FIELD で書き尽くせなかったこと
ON HTML5 FIELD で書き尽くせなかったこと
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステムJPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステム
 
20220628_TECHPLAY.pdf
20220628_TECHPLAY.pdf20220628_TECHPLAY.pdf
20220628_TECHPLAY.pdf
 
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
グリッドレイアウトを簡単に行うJavaScript!Masonry.jsグリッドレイアウトを簡単に行うJavaScript!Masonry.js
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
 
20231019 Notion Labs Japan × エルボーズ コラボ勉強会
20231019 Notion Labs Japan × エルボーズ コラボ勉強会20231019 Notion Labs Japan × エルボーズ コラボ勉強会
20231019 Notion Labs Japan × エルボーズ コラボ勉強会
 
あなたと仲間で組織を変える - KDDI Scrum Fest
あなたと仲間で組織を変える - KDDI Scrum Festあなたと仲間で組織を変える - KDDI Scrum Fest
あなたと仲間で組織を変える - KDDI Scrum Fest
 
【freee】プロダクトマネージャーの仕事と魅力
【freee】プロダクトマネージャーの仕事と魅力【freee】プロダクトマネージャーの仕事と魅力
【freee】プロダクトマネージャーの仕事と魅力
 
hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)
hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)
hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)
 
HTML5とCSS3でWebが変わる!でも導入は簡単!
HTML5とCSS3でWebが変わる!でも導入は簡単!HTML5とCSS3でWebが変わる!でも導入は簡単!
HTML5とCSS3でWebが変わる!でも導入は簡単!
 
Drupal + Japan IT 2017
Drupal + Japan IT    2017Drupal + Japan IT    2017
Drupal + Japan IT 2017
 
Chainerで知るdeep learning進化の歴史
Chainerで知るdeep learning進化の歴史Chainerで知るdeep learning進化の歴史
Chainerで知るdeep learning進化の歴史
 
Challenge for statup's cto from big company nagaaki hoshi
Challenge for statup's cto from big company nagaaki hoshiChallenge for statup's cto from big company nagaaki hoshi
Challenge for statup's cto from big company nagaaki hoshi
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
 
うちの開発におけるXD利用法
うちの開発におけるXD利用法うちの開発におけるXD利用法
うちの開発におけるXD利用法
 

Plus de terurou

FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScript
terurou
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
terurou
 
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSILver.2012/06/09Metro Style AppsでMSILver.2012/06/09
Metro Style AppsでMSIL ver.2012/06/09
terurou
 
Scala×silverlight
Scala×silverlightScala×silverlight
Scala×silverlight
terurou
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
クラウドGPS(仮)
クラウドGPS(仮)クラウドGPS(仮)
クラウドGPS(仮)
terurou
 

Plus de terurou (20)

Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxe
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方
 
DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScript
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSILver.2012/06/09Metro Style AppsでMSILver.2012/06/09
Metro Style AppsでMSIL ver.2012/06/09
 
Metro Style AppsでMSIL
Metro Style AppsでMSILMetro Style AppsでMSIL
Metro Style AppsでMSIL
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
CommonJSの話
CommonJSの話CommonJSの話
CommonJSの話
 
Scala×silverlight
Scala×silverlightScala×silverlight
Scala×silverlight
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Iron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET ProgrammingIron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET Programming
 
クラウドGPS(仮)
クラウドGPS(仮)クラウドGPS(仮)
クラウドGPS(仮)
 
Silverlight 4 のはなし
Silverlight 4 のはなしSilverlight 4 のはなし
Silverlight 4 のはなし
 

Vue.jsをhaxeで