Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Phoenix1.4とVue.jsによるサービス構築のノウハウ
Search
MIXI ENGINEERS
PRO
June 01, 2019
Programming
2
2.9k
Phoenix1.4とVue.jsによるサービス構築のノウハウ
https://elixir-fest.jp/
Erlang & Elixir Fest 2019の発表資料です。
MIXI ENGINEERS
PRO
June 01, 2019
Tweet
Share
More Decks by MIXI ENGINEERS
See All by MIXI ENGINEERS
競輪・オートレース配信を支える画音監視 - 長距離伝送・配信におけるIPベースMultiview活用事例
mixi_engineers
PRO
0
57
インフラ室事例集
mixi_engineers
PRO
3
620
価格だけじゃない、トランジット調達先の選定基準を語るBoF
mixi_engineers
PRO
1
21
TIPSTARを支えるCloud Spanner
mixi_engineers
PRO
1
41
モンストを支えるインフラ技術
mixi_engineers
PRO
1
760
ルールベースからMLへ みてね写真プリント自動提案の活用事例
mixi_engineers
PRO
1
140
SoccerNet GSRの紹介と技術応用:選手視点映像を提供するサッカー作戦盤ツール
mixi_engineers
PRO
1
370
2つのフロントエンドと状態管理
mixi_engineers
PRO
6
300
月間4億メディアの画像解析を救え!みてね発・オンデバイスMLで挑む圧倒的コストカット作戦
mixi_engineers
PRO
2
350
Other Decks in Programming
See All in Programming
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
110
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
340
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
470
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
ThorVG Viewer In VS Code
nors
0
660
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
100
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
610
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
130
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.5k
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
650
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
230
How GitHub (no longer) Works
holman
316
140k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
160
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Building an army of robots
kneath
306
46k
Faster Mobile Websites
deanohume
310
31k
Technical Leadership for Architectural Decision Making
baasie
0
200
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
How to Talk to Developers About Accessibility
jct
1
94
Transcript
XFLAG STUDIO Phoenix1.4とVue.jsによる サービス構築のノウハウ 2019.06.01 Tsuyoshi Yamaguchi 株式会社ミクシィ
Phoenix1.4とVue.jsによる サービス構築のノウハウ ⾃⼰紹介 はじめに PhoenixとVue.jsのノウハウ 最後に 3 5 11 21
2
⾃⼰紹介 3
あなたは誰︖ だれ︖ • ⼭⼝ 強 • 北海道出⾝ どんな⼈︖ • 2018年5⽉にミクシィ⼊社
• Elixir/Phoenixを⽤いたバックエンド開発 • JavaScript/TypeScript/Vue.jsを⽤いたフロントエンド開発 よく使う⾔語は︖ • Elixir, JavaScript, TypeScript 好きなものは︖ • Game of Thrones, スノーボード 4
はじめに 5
今⽇話すこと 現在開発中のプロダクトでは、⼀部機能でPhoenixとVue.jsを⽤いたWeb ページを提供します。本⽇は、それらの開発時に得られた知⾒についてお話し ます。 6 Phoenix Vue.js ×
Vue.jsとは • WebのUIを構築するJavaScriptフレームワーク • 再利⽤可能なコンポーネント、双⽅向データバインディグ、仮想DOM などの特徴を持つ • 開発中プロダクトでは、ユーザーインタラクションに伴って動的にペー ジ内のUIを変更するために利⽤ 7
Phoenixとは 省略 8
PhoenixとVue.jsでできること • クライアント(ブラウザ)側における、動的なコンテンツの更新 • ページをまたいだ同⼀コンポーネントの再利⽤ 9
ディレクトリ構成例 10 "dependencies": { … "vue": "^2.6.10" }, "devDependencies": {
… "vue-loader": "^15.7.0" } module: { rules: [ ... { test: /\.vue$/, loader: "vue-loader" }, ] }, plugins: [ new VueLoaderPlugin(), ... ], Phoenix 1.4からはwebpackがデフォルトの バンドラとなった (以前はBrunch)
PhoenixとVue.jsのノウハウ 11
Digestを使おう (1/3) Digestとは︖ Phoenixが提供する静的ファイルの処理機能。 Digest機能を使うことで、JavaScriptファイルに以下の処理することができ る • ファイルの圧縮: • ダウンロードするファイルの量の削減
• ファイル名へのハッシュの追加: • 古いファイルのキャッシュを読み込まなくなる 参考: https://hexdocs.pm/phoenix/Mix.Tasks.Phx.Digest.html 12
Digestを使おう (2/3) 13 $ cd asset && npm run deploy
$ cd ../ && mix phx.digest 1. Vueを含むJavaScriptファイルのビルド 2. Digest処理の実⾏
Digestを使おう (3/3) 14 phx.digest により⽣成されたマニフェスト ファイル。 リクエストされるファイルとハッシュを含んだ ファイルとの対応関係を定義する。
Vueに値を渡してみよう(1/3) 15 ⽅法1: グローバルスコープを介して値を渡す page_controller.ex index.html.eex page.js
Vueに値を渡してみよう(2/3) 16 ⽅法2: input hiddenを介して値を渡す page_controller.ex index.html.eex page.js
Vueに値を渡してみよう(3/3) 17 メリット デメリット グローバルスコープを介して 値を渡す - 実装は比較的シンプル - JavaScriptのグローバルスコープを汚染する
Input hiddenを介して 値を渡す - グローバルスコープを汚染しない - プリミティブな値しか渡すことができない ただし、いずれの⽅法も処理内容を分散させることになり、.exファイ ル、.eexファイル、.jsファイルが密な結合になりやすい
ファイルを分割しよう(1/3) 18 page1.html.eex page2.html.eex import import page1.js page2.js compiled.js <script
src=“compiled.js”> <script src=“compiled.js”> Build by webpack ダウンロードするファイルが肥⼤化する xxx.vue yyy.vue aaa.vue bbb.vue 大
ファイルを分割しよう(2/3) 19 page1.html.eex page2.html.eex import import page1.js page2.js page2.js <script
src=“page1.js”> <script src=“page2.js”> Build by webpack ページごとのJSファイルを⽣成する page1.js xxx.vue yyy.vue aaa.vue bbb.vue
ファイルを分割しよう(3/3) 20 Webpackのエントリーポイントをページ単位で指定する 参考: https://webpack.js.org/concepts/entry-points/
最後に 21
PhoenixとVue.jsを使ってみて - PhoenixテンプレートとVue.jsを⽤いる場合、⼀程度の規模の処理をさせ ようとするとコードが複雑になりがち。またテストが困難 - Vue.jsのようなJavaScriptフレームワークを使う場合、Phoenixテンプ レートと⼀緒に⽤いない⽅が良いかも - Phoenix側はAPIサーバーとし、Vue.jsはAjax通信によって得られたデー タを扱う作りとした⽅がシンプルな構造にできる
- これからはLiveViewという選択肢も…? 22
23