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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Un-Boring Meetings
codingconduct
0
310
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Test your architecture with Archunit
thirion
1
2.3k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Building an army of robots
kneath
306
46k
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