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
Nuxt.jsでSPA_Webアプリを初期構築した話.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takayuki
December 06, 2018
2.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxt.jsでSPA_Webアプリを初期構築した話.pdf
Takayuki
December 06, 2018
More Decks by Takayuki
See All by Takayuki
Build an MCP Server in Laravel to Enable “AI-Operated” Recruiting Tools(English)
bumptakayuki
0
50
Laravel Applications with DDD x Clean Architecture x Vibe Coding
bumptakayuki
1
130
Laravel × Clean Architecture
bumptakayuki
1
610
エンジニアのキャリア論
bumptakayuki
1
300
地方カンファレンス主催のススメ
bumptakayuki
1
280
Laravelで敢えて試す脆弱性のある書き方
bumptakayuki
2
1.4k
地方でのPHPエンジニア採用って実際どうなの?
bumptakayuki
0
830
沖縄観光、名物を一挙紹介!
bumptakayuki
2
840
Laravel ShiftでLaravelのバージョンアップしてみた話
bumptakayuki
1
3.5k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
12k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
WENDY [Excerpt]
tessaabrams
11
39k
GitHub's CSS Performance
jonrohan
1033
470k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
Accessibility Awareness
sabderemane
1
180
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Paper Plane
katiecoart
PRO
2
53k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
The Cost Of JavaScript in 2023
addyosmani
55
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
420
Transcript
Nuxt.jsでSPA Webアプリを 初期構築した話 鈴木孝之 2018/12/06
"HFOEB ࣗݾհɾձࣾհ /VYUKTͱ-BSBWFMͰͷ8FCΞϓϦઃܭ αʔόߏ +85ೝূ ͦͷଞͨ͠ NJYJOͳͲ
ࣗݾհɾձࣾհ
0.ࣗݾհ ◆໊લ ླ ೭(Suzuki Takayuki) ※ಉಉ໊ଟͯ͘ࠔͬͯ·͢ɻɻɻ ◆ࣗݾհ ɾ1990ɺਆಸݝੜ·Εɻ ɾࣾձਓʹͳ͔ͬͯΒɺϓϩάϥϛϯάΛ࢝ΊΔɻ ɾ2015ʹϑϧεϐʔυʹೖࣾ͠ɺ2017ʹಠཱɻ
ɾݱࡏɺडୗ։ൃΛΓͭͭɺࣗࣾWebαʔϏεΛ։ൃதɻ ◆झຯ ίεϓϨɺԻָϥΠϒɺϚϥιϯେձʹग़Δɺٿ؍ઓ ◆εΩϧ PHP,Symfony2,CakePHP3,Laravel5, JavaScript,backbone.js,Angular.js Nuxtྺ 2ϲ݄͘Β͍ʂʂʂ
Copyright Re:Build.inc All Rights Reserved. ձࣾհ ◆ձ໊ࣾ גࣜձࣾRe:Build ◆ॅॴ ԭೄݝԭೄࢢதԝ̍ஸ̍̒−̕
◆ࣄۀ༰ ɾࣗࣾWEBαʔϏεͷاըɾ։ൃɻ ɾडୗ։ൃ ◆ࣾһ 4໊ ◆ΤϯδχΞͷಇ͖ํ ϦϞʔτϫʔΫՄೳͳࣗ༝ͳಇ͖ํΛਪͯ͠·͢ʂ
/VYUKTͱ-BSBWFMͰͷ8FCΞϓϦઃܭ
։ൃதͷࣗࣾαʔϏε ɾαʔόαΠυ PHP(Laravel5.5) ɾϑϩϯτΤϯυ JavaScript(jQuery,Vue.js,Nuxt.js) ɾΠϯϑϥ AWS(EC2,S3,RDS(mariadb)) ɾ։ൃڥ php7,nginx,mariadb,laradock(docker),webpack ɾͦͷଞ
gitlab,gitlabCI(ࣗಈσϓϩΠͳͲ),Slack,phpStorm ɾSPAͷWebΞϓϦܦݧऀ Ұਓ ɾαʔόαΠυಘҙͳਓ͕ଟ͍ ɾVue.js৮ͬͨ͜ͱ͋Δϝϯόʔ͕ଟ͍ ٕज़ཁ݅ ։ൃମ੍
ϑϩϯτΤϯυ αʔόαΠυ αʔόߏ DBΞΫηε ϑΝΠϧΞοϓϩʔυ Ajax௨৴
JWTͱ JWTʢδϣοτʣͱ JSON Web Token ͷུͰɺిࢠॺ໊͖ͷURL- safeͳJSONΛͬͨೝূํࣜͰ ͢ɻ Ұ൪ͷେ͖͍རిࢠॺ໊͕͍ͭ ͍ͯΔͷͰɺվ͟Μ͞Εͳ͍ࣄ͕େ
͖͍Ͱ͢ɻ
JWTͱ [ೝূϑϩʔͷΈ] ᶃΫϥΠΞϯτɺೝূใ(ϩάΠϯIDͱύεϫʔυ)Λૹ৴͢Δɻ ᶄαʔόೝূใΛऔಘͯ͠user_idͱexp(༗ޮظݶ)ΛؚΉɺJSONΛൿີ伴Ͱ҉߸Խͯ͠JWT ͱͯ͠ฦ٫͢Δɻ ᶅΫϥΠΞϯτड͚औͬͨJWTΛೝূϦΫΤετͱͯ͠ѻͬͯɺϦιʔεʹΞΫηεΛߦ͏ɻ
JWTͱ ▪JWT༻ͷϝϦοτ JSONΣϒτʔΫϯͷ༻Λਪ͢Δ͍͔ͭ͘ͷཧ༝ҎԼͷ௨ΓͰ͋Δɻ ɾURLͷύϥϝʔλʔϔομʔͱͯ͑͠Δ ɾਫฏͷεέʔϧ͕༰қ ɾσόοάͱཧ͕؆୯ ɾτϥϑΟοΫର͢Δෛ୲͕গͳ͍ ɾຊདྷͷRESTαʔϏεΛ࡞Մೳ ɾϏϧτΠϯࣜͷ༗ޮظݶػೳ͕͍͍ͭͯΔ ɾJWT͕ಠཱܕͰ͋Δ͜ͱ
https://camp.isaax.io/ja/tips-ja/jwt-json-web-token
ϑϩϯτΤϯυ ϑϩϯτΤϯυͷϩάΠϯॲཧϑϩʔ APIϦΫΤετ αʔόαΠυ Vuex Token͕ฦ٫͞ΕΔ Component Action Mutations State
Plugin /login Routing Middleware Dispatch Render Commit Mutate eyJ0eXAiOiJKV1QiLCJhbGci OiJIUzI1NiJ9.eyJpc3MiOiJod HRwOlwvXC9sb2NhbGhvc3 RcL2FwaVwvdjFcL2xvZ2luIiw iaWF0IjoxNTQxMzk3NDAyLC JleHAiOjE1NDE0MDEwMDIs Im5iZiI6MTU0MTM5NzQwMi wianRpIjoiSGx1eUVXRU5Jc TdWRHZ6ZyIsInN1YiI6MSwi cHJ2IjoiMWFiMTVlMTVhNG NiODBjOWY3MTJkZTQ3OD ViMmIyMDk4ZGFlMjhjMyJ9. Qkbo7Mf4kMlTbWT- r4L6GhSUUlTUE7p7OHPdob FEXiI Tokenͷྫ HTML CSS JS TokenΛड͚औͬ ͯɺlocalStorage ʹઃఆ ຖճɺToken͕ localStrageʹ͋ Δ͔νΣοΫɻ ͳ͚Εɺϩά Πϯը໘ʹϦμ ΠϨΫτ ຖճɺlocalStorage Λ֬ೝ͠ɺtokenΛ Authorizationϔο μʔʹઃఆ localStrage token tokenΛऔಘ αʔόαΠυଆͰ ϩάΠϯॲཧΛ࣮ߦ tokenΛൃߦɻ ϒϥβ͔ΒΞΫηε͠ɺ ϢʔβIDͱύεϫʔυΛೖྗ tokenΛઃఆ
MiddleWareͷൃಈλΠϛϯά ɾೝূͳͲͷϨϯμϦϯάΑΓલʹ࣮ߦ ͍ͨؔ͠Λ͜͜ʹஔ͖·͢ɻ ϛυϧΣΞԼهͷॱʹ࣮ߦ͞Ε·͢ 1.nuxt.config.js 2.Ϛονͨ͠ϨΠΞτ 3.Ϛονͨ͠ϖʔδ
plugin(axios)Ͱͷtokenઃఆྫ ϦΫΤετ࣌ʹtokenΛ Authorizationϔομʔʹઃఆ tokenͷظݶΕͳͲͰ ΤϥʔͰམͪͨ߹ʹదͳϖʔ δʹϦμΠϨΫτ͢Δ
middlewareͰͷϩάΠϯνΣοΫͷྫ ຖճɺToken͕localStrageʹ ͋Δ͔νΣοΫɻ ͳ͚ΕɺϩάΠϯը໘ʹ ϦμΠϨΫτ͢Δ
LaravelଆͰ͍ͬͯΔ͜ͱ ɾ/api/login ϢʔβʔͱύεϫʔυΛૹΔͱτʔΫϯ͕ൃߦ͞ΕΔɻ ɾ/api/me ϢʔβʔͷใΛฦ͢ɻτʔΫϯ͕ແ͍ͱΞΫηεͰ͖ͳ͍ɻ
LaravelଆͰͷ࣮खॱ ᶃೝূػೳΛ࡞ ᶄcomposerͰjwt-authΛΠϯετʔϧ ᶅEmployeeϞσϧΛमਖ਼ ᶆguardΛमਖ਼ ᶇApiControllerΛੜ ᶈroutes/api.phpΛฤू
ը໘Πϝʔδ
ը໘Πϝʔδ
ը໘Πϝʔδ
ͦͷଞͨ͠
mixinͰϖʔδભҠ࣌ʹSpinnerΛൃಈͤ͞Δ ▪લఏ݅ ɾಠࣗͷSpinnerΛ͍͍ͨɻ ɾຖճɺ֤ίϯϙʔωϯτʹಠࣗSpinnerىಈɾऴྃͷఆٛΛ͢ Δͷ͕໘ͳͷͰmixinΛ͍ɺ ͳΔ͘ɺιʔεతʹ҉తʹൃಈͤ͞Δɻ
mixinͰϖʔδભҠ࣌ʹSpinnerΛൃಈͤ͞Δ ▪࣮खॱ 1.ಠࣗϩʔσΟϯά༻ίϯϙʔωϯτΛ༻ҙ͢Δɻ 2. nuxt.conf.jsͷloadingʹ্هίϯϙʔωϯτΛࢦఆ͢Δɻ 3.mixin༻ίϯϙʔωϯτΛ༻ҙ͢Δɻ 4.ϩʔσΟϯάΛݺͼग़͍֤ͨ͠ίϯϙʔωϯτͰmixinΛࢦఆ͢Δɻ
ը໘Πϝʔδ
ը໘Πϝʔδ
mixinͱʁ ɾϛοΫεΠϯ (mixin) ɺVue ίϯϙʔωϯτʹ࠶ར༻ՄೳͰॊೈ ੑͷ͋ΔػೳΛ࣋ͨͤΔͨΊͷํ๏Ͱ͢ɻ ɾϛοΫεΠϯΦϒδΣΫτҙͷίϯϙʔωϯτΦϓγϣϯΛؚ Ή͜ͱ͕Ͱ͖·͢ɻίϯϙʔωϯτ͕ϛοΫεΠϯΛ༻͢Δͱ͖ɺ ϛοΫεΠϯͷશͯͷΦϓγϣϯίϯϙʔωϯτࣗͷΦϓγϣϯ ʹ”ࠞͥΒΕ”·͢ɻ
ɾίϯϙʔωϯτʹΦϓγϣϯΛ͚ͭΒΕΔΑ͏ͳΠϝʔδʂ
▪खॱ1 ಠࣗϩʔσΟϯά༻ίϯϙʔωϯτΛ༻ҙ͢Δɻ components/loading.vueΛҎԼͷΑ͏ʹฤू͢ Δɻ start()ͱfinish()ఆٛඞਢɻ components/loading.vue
▪खॱ2 nuxt.conf.jsͷloadingʹ্هίϯϙʔωϯ τΛࢦఆ͢Δ nuxtͰಈ͘σϑΥϧτͷSpinnerʹɺઌఔ ࡞ͨ͠loading.vueΛࢦఆ͢Δɻ nuxt.conf.jsΛҎԼͷΑ͏ʹฤू͢Δɻ nuxt.conf.js
▪खॱ3 mixin༻ίϯϙʔωϯτΛ༻ҙ͢Δ components/loadingMixin.jsΛ࡞͢Δɻ ɾൃಈλΠϛϯάΛίϯτϩʔϧ͍ͯ͠ΔΠ ϝʔδʂ ɾ͜ΕʹΑΓmixinΛ༻͢Δίϯϙʔωϯτ ͕Ϛϯτ͞ΕͨλΠϛϯάͰಠࣗSpinner͕ ඳը͞ΕΔɻ ͳ͓this.$nuxt.$loading.start()nuxt.conf.jsͰ ࢦఆͨ͠ಠࣗSpinnerͷඳըΛ։࢝Λɺ
this.$nuxt.$loading.finish()ඳըͷऴྃΛ ߦ͍ͬͯΔɻ components/loadingMixin.js
▪खॱ4 ϩʔσΟϯάΛݺͼग़͍֤ͨ͠ίϯϙʔωϯτͰmixinΛࢦఆ͢Δ ҎԼͷΑ͏ʹpages/index.vue, pages/about.vueΛ࡞͢Δɻ pages/about.vue pages/index.vue
Nuxt.jsͷཧը໘ςϯϓϨʔτΛ༻ ͜ΕΛ͏͜ͱͰॳظͷcomponentͷΓ͚ɺ ֤छઃఆϑΝΠϧͷಋೖͷखؒΛল͚ͨɻ ཧը໘ͩͱಛʹࣅͨΑ͏ͳσβΠϯʹͳΔͷͰɺ ج൫ͷιʔεςϯϓϨʔτΛ͏ࣄΛ͓קΊ͠· ͢ɻ https://github.com/muhibbudins/nuxt-coreui
·ͱΊ
ᶃJWTೝূΛ؆୯ʹ࣮ݱͰ͖Δʂ ᶄMixinʹڞ௨ॲཧΛ·ͱΊ͓ͯ͘ͱྑͦ͞͏ʂ ·ͱΊ
ࢀߟ ɾJWTɺJSONΣϒτʔΫϯ https://camp.isaax.io/ja/tips-ja/jwt-json-web-token ɾJWT(JSON Web Token)Λཧղ͢Δɻ https://scrapbox.io/fendo181/JWT(JSON_Web_Token) %E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3 %80%82 ɾϦϏϧυࣾһϒϩά
http://kkznch.hatenablog.com/entry/2018/11/27/143022