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
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
Designing for humans not robots
tammielis
254
26k
The browser strikes back
jonoalderson
0
1.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Become a Pro
speakerdeck
PRO
31
6k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
580
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
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