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
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
37
Laravel Applications with DDD x Clean Architecture x Vibe Coding
bumptakayuki
1
120
Laravel × Clean Architecture
bumptakayuki
1
560
エンジニアのキャリア論
bumptakayuki
1
300
地方カンファレンス主催のススメ
bumptakayuki
1
270
Laravelで敢えて試す脆弱性のある書き方
bumptakayuki
2
1.4k
地方でのPHPエンジニア採用って実際どうなの?
bumptakayuki
0
810
沖縄観光、名物を一挙紹介!
bumptakayuki
2
800
Laravel ShiftでLaravelのバージョンアップしてみた話
bumptakayuki
1
3.5k
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.1k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
We Are The Robots
honzajavorek
0
260
Un-Boring Meetings
codingconduct
0
330
Chasing Engaging Ingredients in Design
codingconduct
0
230
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
440
Agile that works and the tools we love
rasmusluckow
331
22k
Code Reviewing Like a Champion
maltzj
528
40k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
270
The agentic SEO stack - context over prompts
schlessera
0
840
For a Future-Friendly Web
brad_frost
183
10k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
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