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
Vue.js on Rails / vue-js-on-rails
Search
Hiromi Kimura
August 28, 2017
5k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue.js on Rails / vue-js-on-rails
Hiromi Kimura
August 28, 2017
More Decks by Hiromi Kimura
See All by Hiromi Kimura
マネーフォワード Pay for Businessのフロントエンド / Money Forward Pay for Business Frontend
kimromi
0
910
マネーフォワードクラウド経費でのフロントエンドの取り組み / moneyforward-expense-frontend
kimromi
4
1.1k
エンジニアにとってのアウトプットとはなにか考えた / what-is-output
kimromi
3
1.2k
TypeScriptで作るGitHubApps / make GitHub Apps by TypeScript
kimromi
0
680
ムームードメインのJavaScript環境を整えた話 / prepare muumuu-domain's javascript
kimromi
1
610
ぼくがかんがえたさいきょうのぷるりくえすと / saikyo-no-pull-request
kimromi
7
110k
本番環境にVue.jsを使った話 / Use Vue.js at production
kimromi
3
1.5k
how about Marp?
kimromi
0
160
engineer-guideline
kimromi
0
1.1k
Featured
See All Featured
How to make the Groovebox
asonas
2
2.3k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
YesSQL, Process and Tooling at Scale
rocio
174
15k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
440
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
Marketing to machines
jonoalderson
1
5.6k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
180
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Transcript
ଜւ(.01FQBCP *OD ϖύϘςοΫΧϯϑΝϨϯε 7VFKTPO3BJMT
ೖࣾԬࢧࣾ ଜւ!LJNSPNJ ϗεςΟϯάࣄۀ෦ɹϜʔϜʔυϝΠϯνʔϜΤϯδχΞ IUUQTLJNSPNJHJUIVCJP
ଜւ!LJNSPNJ ϗεςΟϯάࣄۀ෦ɹϜʔϜʔυϝΠϯνʔϜΤϯδχΞ IUUQTLJNSPNJHJUIVCJP ೖࣾԬࢧࣾ
PO
!4FSWFS4JEF3FOEFSJOH !4JOHMF1BHF"QQMJDBUJPO طʹ3BJMTͰαʔϏεӡ༻͍ͯ͠Δ ৽͘͠3BJMTͰαʔϏεΛ࡞Δ !7VFKTͷࡉ͔͍࣮ͷ
ϜʔϜʔυϝΠϯ wυϝΠϯ౷߹αʔϏε w݄ʹϩʔϯνʢࠓͰʣ wʙׂ1)1Ͱͷ࣮ w3VCZPO3BJMTʹগͣͭ͠Ҡߦத wεϚʔτϑΥϯ༻αΠτ3VCZPO3BJMT
IUUQTUFDIQFQBCPDPNNVVNVVTIPQQJOHDBSU
ݱঢ়ͷ3BJMTͷ+BWB4DSJQUڥͷ wK2VFSZΰϦΰϦ wK2VFSZɺੜ+BWB4DSJQUɺ$P⒎FF4DSJQU͕ೖΓཚΕ w୯ମςετͳ͠ʢSTQFDͷGFBUVSFTςετͰͳΜͱ͔ʣ wMJOU͞Ε͍ͯͳ͍
Ͳ͛Μ͔ͤΜͱ͍͔Μ
+BWB4DSJQU ͳΜͱ͔͢Δͧʂ
7VFKTPO3BJMTʂ
8IZ7VFKT wฐࣾαʔϏεͰͷಋೖ࣮͕૿͖͑ͯͨ wάʔϖɺΧϥʔϛʔ wϩϦϙοϓϚωʔδυΫϥυ wϜʔϜʔυϝΠϯͷࣾγεςϜͰಋೖ࣮͕͋Γ͕ࣝ͋ͬͨ wฐࣾΤϯδχΞʹຊޠυΩϡϝϯτ༁ऀ͕͍Δ ʢ!JOPVFUBLVZBɺ!IZQFSNLUʣ wֶशίετ͍
None
7VFKTPO3BJMT Ͳ͏Δ͔ʁ
Γ͍ͨ͜ͱཧ w7VFKTΛ͍͍ͨʂ w୯ମςετΛॻ͖͍ͨʂ wMJOUΓ͍ͨʂ
OQN͔͠ͳ͍ʂ
OQN w/PEFKTͷύοέʔδཧπʔϧ wQBDLBHFKTPOͰ༻͢ΔύοέʔδΛཧ
:BSOͬͨ w3BJMT͔Βਪ͞Ε͍ͯΔ wZBSO·ͨZBSOJOTUBMMίϚϯυͰґଘϥΠϒϥϦΛΠϯετʔϧ wZBSOMPDLϑΝΠϧ͕Ͱ͖Δ wϥΠϒϥϦͷόʔδϣϯΛݻఆͰ͖Δ wϦϙδτϦཧ͢Δ͜ͱͰόʔδϣϯҧ͍ʹΑΔόά͕͓͖ʹ͍͘ɹ wOQNW͔ΒQBDLBHFMPDLKTPOͰόʔδϣϯݻఆͰ͖Δ Α͏ʹͳͬͨɾɾɾ
༨ஊ QBDLBHFKTPOͷTDSJQUTػೳ { "private": true, "scripts": { "show-version": "yarn -V"
} } QBDLBHFKTPO
XFCQBDL
XFCQBDL CBCFM QBDLBHFKTPO { "private": true, "scripts": { "webpack": "webpack"
}, "dependencies": {}, "devDependencies": { "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-preset-es2015": "^6.24.1", "webpack": "^3.5.5" }, "babel": { "presets": ["es2015"] } } w+BWB4DSJQUͷϏϧυπʔϧ wZBSOSVOXFCQBDL wCBCFMͰ&4 &4 ରԠ wઃఆXFCQBDLDPOpHKT
σΟϨΫτϦߏྫ ᵓBQQ ᴹᵋBTTFUT ᴹᵋKBWBTDSJQUT ᴹᵋBQQMJDBUJPOKT ᵓGSPOUFOE ᴹᵓTSD ᴹᴹᵋFOUSZKT ᴹᵓUFTU ᴹᵋXFCQBDLDPOpHKT
ᵓQVCMJD ᴹᵋBTTFUT ᵓʜ ᵓQBDLBHFKTPO ᵋZBSOMPDL wGSPOUFOEʹ·ͱΊΔ w+4։ൃ࣌3BJMTXBZΛҙࣝ͠ͳ͍ ˠ3BJMTͱ+4։ൃΛૄʹͰ͖Δ
Ϗϧυͨ͠ϑΝΠϧΛ Ͳ͜ʹग़ྗ͢Δʁ
4QSPDLFUTͱͲ͏͖߹͏͔
None
4QSPDLFUT w3BJMTͷ+BWB4DSJQUɺ4UZMF4IFFUɺ*NBHFTΛཧ͢Δπʔϧ w"MU+T4BTTͳͲͷίϯύΠϧ wDPODBUɺNJOJGZ wpOHFSQSJOU wग़ྗϑΝΠϧͷTV⒏YʹϋογϡจࣈྻΛ͚ͯ͘ΕΔ w FYBQQMJDBUJPOFGCGEBCGKT wϑΝΠϧʹมߋ͕͋ͬͨͱ͖ͷΈpOHFSQSJOU͕มߋ͞ΕΔ wϒϥβΩϟογϡʹ༗ޮ
4QSPDLFUT͏ʁΘͳ͍ʁ !XFCQBDLͱ4QSPDLFUTͰճϏϧυ͢Δ ӡ༻͍ͯ͠ΔϧʔϧͰͦͷ··։ൃͰ͖Δ ͏ !3BJMTͱ+BWB4DSJQUཧ͕গ͠ີʹͳΔ
4QSPDLFUT͏ʁΘͳ͍ʁ 3BJMTͱ+BWB4DSJQUͷཧ͕ૄʹͳΔ Θͳ͍ !4QSPDLFUT૬ͷػೳΛXFCQBDLͰ༻ҙ͢Δίετ !3BJMTͷ7JFX͔Β+BWB4DSJQUΛಡΈࠐΉͱ͖ʹҰखؒඞཁ ʢ3BJMTXBZʹΕͳ͍ʣ
4QSPDLFUT ͦͷ··͏͜ͱʹͨ͠
ཧ༝ w+BWB4DSJQUεΩϧ3BJMTεΩϧͳνʔϜ wطଘͷ+BWB4DSJQUͨͪͱ৽͘͠࡞ΔͷͷཧΛผʹͨ͘͠ͳ͍ w3BJMTͷϧʔϧ͕มΘͬͯ+4ग़ྗઌΛม͑ΕͳΜͱ͔ͳΔ wແཧ͗͢͠ͳ͍
σΟϨΫτϦߏ ࠶ܝ ᵓBQQ ᴹᵋBTTFUT ᴹᵋKBWBTDSJQUT ᴹᵋBQQMJDBUJPOKT ᵓGSPOUFOE ᴹᵓTSD ᴹᴹᵋFOUSZKT ᴹᵓUFTU
ᴹᵋXFCQBDLDPOpHKT ᵓQVCMJD ᴹᵋBTTFUT ᵓʜ ᵓQBDLBHFKTPO ᵋZBSOMPDL wGSPOUFOEʹ·ͱΊΔ w։ൃ࣌3BJMTXBZΛҙࣝ͠ͳ͍ ˠ3BJMTͱ+4։ൃΛૄʹͰ͖Δ
XFCQBDLϏϧυ ᵓBQQ ᴹᵋBTTFUT ᴹᵋKBWBTDSJQUT ᴹᵋBQQMJDBUJPOKT ᴹᵋCVOEMFKT ᵓGSPOUFOE ᴹᵓTSD ᴹᴹᵋFOUSZKT ᴹᵓUFTU
ᴹᵋXFCQBDLDPOpHKT ᵓQVCMJD ᴹᵋBTTFUT ᵓʜ ᵓQBDLBHFKTPO ᵋZBSOMPDL wϏϧυͯ͠ΞηοτରσΟϨΫτϦ ʹग़ྗ CVOEMFKT wCVOEMFKTHJUJHOPSF w։ൃ࣌GPSFNBOͬͯ SBJMTTFSWFSͱXFCQBDLXBUDIΛ ಉ࣌ʹىಈ
4QSPDLFUTʢBTTFUTQSFDPNQJMFʣ ᵓBQQ ᴹᵋBTTFUT ᴹᵋKBWBTDSJQUT ᴹᵋBQQMJDBUJPOKT ᴹᵋCVOEMFKT ᵓGSPOUFOE ᴹᵓTSD ᴹᴹᵋFOUSZKT ᴹᵓUFTU
ᴹᵋXFCQBDLDPOpHKT ᵓQVCMJD ᴹᵋBTTFUT ᴹᵋBQQMJDBUJPOFGCGEBCGKT ᵓʜ ᵓQBDLBHFKTPO ᵋZBSOMPDL wCVOEMFKTͷ༰ؚ͕·Εͨঢ়ଶͰ QVCMJDBTTFUTʹग़ྗ wpOHFUQSJOU͕ͭ͘
ͪΐͬͱ͚ͩෳࡶʂ
։ൃ࣌+4ͱ3BJMTΛૄʹ ຊ൪ద༻࣌3BJMTXBZʹͷΔ
ͯ͞
7VFKT ॻ͖·͔͢
͜͜·Ͱ͘Ε wGSPOUFOEʹΓग़͍ͯ͠ΔͷͰΨϯΨϯॻ͚Δ w41"Ͱͳͯ͘ಋೖͰ͖Δ w)5.-3BJMTͷ7JFXΛͦͷ··͏ wσβΠφʔͱฒߦ࡞ۀ͍͢͠ wK2VFSZͷΘΓͷ7VFKT $PNQPOFOUͳ͠ Ͱςετॻ͚Δ wͪΖΜ41"Ͱ0,
7VFΠϯελϯεͷ୯ମςετ
"7" wIUUQTHJUIVCDPNBWBKTBWB ⭐PWFS w,BSNB KBTNJOFࢼ͕ͨ͠"7"ͷ΄͏͕ઃఆ͕γϯϓϧ wฒྻͰςετͳͷͰૣ͍ w7VFΠϯελϯεͷςετՄೳ w$PNQPOFOU WVF
Λ͏ͷͰ͋Ε"WPSJB[͕ศརͦ͏ 7VFίϯϙʔωϯτͷϢχοτςετ IUUQTTQFBLFSEFDLDPNIZQFSNLUWVFLPOQPOFOUPGBMTFZVOJUVUPUFTVUP
࣮ྫ GSPOUFOETSDFOUSZKT import Vue from 'vue'; export default new Vue({
el: '#vue-hello', data: { message: 'hello' }, methods: { shout: function () { this.message = 'hello!!!!!!!!!!'; } } });
୯ମςετྫ GSPOUFOETSDFOUSZKT GSPOUFOEUFTUFOUSZUFTUKT import test from 'ava'; import entry from
'../src/entry'; test('entry vue instance', t => { t.is(typeof entry, 'object'); t.is(entry.$data.message, 'hello'); }); test('entry#shout', t => { entry.shout(); t.is(entry.$data.message, 'hello!!!!!!!!!!'); });
7VFKTΑ͍ʂ
·ͱΊ w։ൃ࣌3BJMTͱ+BWB4DSJQUΛૄʹ։ൃ w୯ମςετɺMJOU wແཧͤͣ3BJMTXBZʹ͏·͘ͷͤΔ w7VFΠϯελϯεͷςετॻ͚Δ
7VFKTPO3BJMTͩʂ
XFCQBDLFSHFNͲ͏ͳͷʁ
࠙ձͰ͓͠·͠ΐ͏ʂ
ԬͰҰॹʹ7VFKTॻ͖·͠ΐ͏ʂʂ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU