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
Google Agentspaceを実際に導入した効果と今後の展望
mixi_engineers
PRO
4
1.5k
プロジェクトマネジメント実践論|現役エンジニアが語る!~チームでモノづくりをする時のコツとは?~
mixi_engineers
PRO
5
430
セキュリティ研修【MIXI 25新卒技術研修】
mixi_engineers
PRO
4
1.9k
QA・ソフトウェアテスト研修【MIXI 25新卒技術研修】
mixi_engineers
PRO
3
1.7k
AI研修【MIXI 25新卒技術研修】
mixi_engineers
PRO
5
2.6k
ソフトウェアアーキテクチャ研修【MIXI 25新卒技術研修】
mixi_engineers
PRO
36
15k
Writing with AI【MIXI 25新卒技術研修】
mixi_engineers
PRO
3
770
Flutter研修【MIXI 25新卒技術研修】
mixi_engineers
PRO
4
800
WEBフロントエンド研修【MIXI 25新卒技術研修】
mixi_engineers
PRO
2
670
Other Decks in Programming
See All in Programming
Laravel Boost 超入門
fire_arlo
2
170
AI時代に学習する意味はあるのか?
tomoyakamaji
0
110
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
1.4k
Honoアップデート 2025年夏
yusukebe
1
900
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
110
複雑なドメインに挑む.pdf
yukisakai1225
4
890
TDD 実践ミニトーク
contour_gara
1
270
奥深くて厄介な「改行」と仲良くなる20分
oguemon
0
180
Amazon Nova Canvasの新機能Virtual try-onで実装するプリクラ風アプリ
hideg
0
100
More Approvers for Greater OSS and Japan Community
tkikuc
1
110
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
230
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Documentation Writing (for coders)
carmenintech
73
5k
Faster Mobile Websites
deanohume
309
31k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
How GitHub (no longer) Works
holman
315
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
4 Signs Your Business is Dying
shpigford
184
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
What's in a price? How to price your products and services
michaelherold
246
12k
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