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
Yahoo!クイックマート管理画面でNext.js + static exportsを選んだ理由
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
株式会社出前館
March 18, 2025
Technology
1
140
Yahoo!クイックマート管理画面でNext.js + static exportsを選んだ理由
Findy社主催
【Next.js特集】フロントエンド技術選定の裏側 〜直面する技術的課題とは?〜
での登壇資料です。
株式会社出前館
March 18, 2025
Tweet
Share
More Decks by 株式会社出前館
See All by 株式会社出前館
複雑にからみあう複数のシステムを要する出前館QAの実情、展望
demaecan
0
83
QA業務を変える(!?)AIを併用した不具合分析の実践
demaecan
0
90
出前館アプリの品質を支えるリリーストレインとその実践
demaecan
0
96
出前館アプリ進化論 アーキテクチャと組織のリアルな変⾰の舞台裏
demaecan
0
500
Flutterにしてよかった?出前館アプリを2年運用して気づいたことを全部話します
demaecan
1
930
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
1
370
生成AI導入における「短期ROIを超えた」共存戦略
demaecan
0
89
Okta Identity Governanceで実現する最小権限の原則
demaecan
1
410
incident_commander_demaecan__1_.pdf
demaecan
0
330
Other Decks in Technology
See All in Technology
失敗できる意思決定とソフトウェアとの正しい歩き方_-_変化と向き合う選択肢/ Designing for Reversible Decisions
soudai
PRO
8
1.3k
全自動で回せ!Claude Codeマーケットプレイス運用術
yukyu30
3
140
Secure Boot 2026 - Aggiornamento dei certificati UEFI e piano di adozione in azienda
memiug
0
120
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.4k
LINEアプリ開発のための Claude Code活用基盤の構築
lycorptech_jp
PRO
1
1.1k
ヘルシーSRE
tk3fftk
2
170
バクラクのSREにおけるAgentic AIへの挑戦/Our Journey with Agentic AI
taddy_919
1
450
「データとの対話」の現在地と未来
kobakou
0
910
社内でAWS BuilderCards体験会を立ち上げ、得られた気づき / 20260225 Masaki Okuda
shift_evolve
PRO
1
150
Webアクセシビリティ技術と実装の実際
tomokusaba
0
140
Master Dataグループ紹介資料
sansan33
PRO
1
4.4k
Serverless Agent Architecture on Azure / serverless-agent-on-azure
miyake
1
110
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
470
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Crafting Experiences
bethany
1
73
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
Joys of Absence: A Defence of Solitary Play
codingconduct
1
300
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Paper Plane
katiecoart
PRO
0
47k
RailsConf 2023
tenderlove
30
1.4k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
270
Un-Boring Meetings
codingconduct
0
220
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
170
Transcript
Yahoo!ΫΠοΫϚʔτཧը໘ Ͱ Next.js + static exports ΛબΜͩཧ༝ ग़લؗגࣜձࣾ Յखן ࢤ࿕
Topics • ࣗݾհ • Yahoo!ΫΠοΫϚʔτͷհ • ͳͥ Yahoo!ΫΠοΫϚʔτཧը໘ Ͱ Next.js
+ static exports ΛબΜ ͩͷ͔ʁ
ࣗݾհ Յखן (ΧσΧϧ) ࢤ࿕ ॴଐ - LINE Ϡϑʔגࣜձࣾ - גࣜձࣾग़લؗʹग़த
ܦྺ - ~ 2021 WEB੍࡞ͷࣄ - 2021 LINE GrowthTechnology ೖࣾ (ϑϩ ϯτΤϯυΤϯδχΞ) - 2022͔Βग़લؗʹग़ ԭೄ͔ΒϑϧϦϞʔτͰࢀՃ
Yahoo!ΫΠοΫϚʔτͷհ
ίϯϏχεʔύʔͳͲͰൢച͞Ε͍ͯΔੜ৯ ༻Λจ で ͖Δ デ Ϧ バ Ϧʔαʔ ビ ε
Yahoo!γϣοϐϯάʹ͋Γ·͢ɻ ࡢͷ8݄ʹϦϦʔεͯ͠ରΤϦΞΛͪΌͪ͘Ό͘ͱ͍͍͛ͯͬͯΔ Yahoo!ΫΠοΫϚʔτ
Yahoo!ΫΠοΫϚʔτཧը໘ - ళฮͷཧ - ͷཧ - จใͷཧ Yahoo!ΫΠοΫϚʔτʹग़ళ͍ͯ͠ΔՃໍళͷཧऀε λοϑɺग़લؗଆͷΦϖϨʔλʔ͕ར༻͢Δཧπʔϧ ※ࠓճͷNext.jsಋೖࣄྫͰհ͢Δͷ͜ͷπʔϧ
ͳͥ Yahoo!ΫΠοΫϚʔτཧը໘ Next.js + static exports ΛબΜͩͷ͔ʁ
Yahoo!ΫΠοΫϚʔτཧը໘ͷ։ൃظؒ - 2023/11 νʔϜ্ཱͪ͛ɺٕज़બఆɺ։ൃج൫ͷߏங - 2024/01 ։ൃ։࢝ - 2024/08 ϦϦʔε
બఆ࣌ͷ݅ 1. ϦϦʔεඞୡ / λΠτͳεέδϡʔϧ 2. νʔϜͷೳྗɾঢ়گతʹαʔόʔͷอकආ͚͍ͨ 3. SEOߟྀෆཁ/ UX࠷༏ઌͰͳ͍
͔݅Βݟ͖͑ͯͨ͜ͱ 1. ϦϦʔεඞୡ / λΠτͳεέδϡʔϧ ֶशίετ্ཱ͓͕͑ͯͪ͞ΓΛૣ͍ͨ͘͠ 2. νʔϜͷೳྗɾঢ়گతʹαʔόʔͷอकආ͚͍ͨ ΫϥΠΞϯτ͕ϗεςΟϯάαʔόʔ͚ͩͰಈ͔ͤΔ 3.
SEOߟྀෆཁ/ UX࠷༏ઌͰͳ͍ SSR ෆཁ CSR Only Ͱ͍͍
ݕ౼ͨ͠ߏ - Next.js (pages router) + static exports - vite
+ react-router-dom બఆ࣌ظ 2023/11
Next.js + static exports vite + react-router-dom static exports Ͱ
Dynamic routes Λར༻͢Δʹ nginx ͳͲͰ rewrite ͕ඞཁ - /post/[id].tsx -> /post/[id].html ͕ੜ͞ΕΔ - /post/xxx -> /post/[id].html ʹ rewrite Next.jsͷݒ೦
Next.jsͷݒ೦ static exports Ͱ Dynamic routes Λར༻͢Δʹ nginx ͳͲͰ rewrite
͕ඞཁ - /post/[id].tsx -> /post/[id].html ͕ੜ͞ΕΔ - /post/xxx -> /post/[id].html ʹ rewrite Next.js + static exports vite + react-router-dom nginx Λ࣋ͭͷආ͚͍ͨ vite + react-router-dom Λࢼͦ͏
vite + react-router-dom Λࢼ͢ const router = createBrowserRouter({ path: "/about",
element: <About /> }) ίʔυʹϖʔδύεͱରԠ͢ΔίϯϙʔωϯτΛఆٛ͢Δ ※બఆ࣌ v16 ͷॻ͖ํ Next.js + static exports vite + react-router-dom ϧʔςΟϯάͲ͏ͬͯઃఆ͢Δͷʁ
vite + react-router-dom Λࢼ͢ const router = createBrowserRouter({ path: "about",
lazy: () => import("./routes/About"), }) Next.js + static exports vite + react-router-dom Code Splitting Ͳ͏Δͷʁ lazy ʹίϯϙʔωϯτΛ dynamic import ͢ΔؔΛ͢
ͬͺΓ Next.js ͕͍͍ͳ…
ͬͺΓ Next.js ͕͍͍… - react-router-dom ׳ΕΔ·Ͱ͔͔࣌ؒΓͦ͏ - ϝϯόʔશһ Next.js Ͱͷ
file-system based router ʹ׳Ε͍ͯΔ - Next.js ͳΒ Code splitting ͳͲϏϧυ࠷దԽΛࣗಈͰͯ͘͠ΕΔ Next.js + static exports vite + react-router-dom
ͰNext.jsʹݒ೦͕… - Dynamic routes Λར༻͢ΔͨΊʹ nginx ͳͲͰ rewrite ͢Δඞཁ͕͋Δ -
/post/xxx -> /post/[id].html ʹ rewrite Next.js + static exports vite + react-router-dom
- Dynamic routes Λར༻͢ΔͨΊʹ nginx ͳͲͰ rewrite ͢Δඞཁ͕͋Δ - Dynamic
routes Θͳ͍ - ύϥϝʔλʔΫΤϦύϥϝʔλʔͰ͍͍ͤ ͰNext.jsʹݒ೦͕… Next.js + static exports vite + react-router-dom
- Dynamic routes Λར༻͢ΔͨΊʹ nginx ͳͲͰ rewrite ͢Δඞཁ͕͋Δ - Dynamic
routes Θͳ͍ - ύϥϝʔλʔΫΤϦύϥϝʔλʔͰ͍͍ͤ - σϑΥϧτͩͱύε໊ͷhtml͕ੜ͞ΕΔͷͰͬͺΓ rewirte ͕ඞཁʁ - /about.tsx ΛϏϧυ͢Δͱ about.html ͕ੜ͞ΕΔ - /about ʹΞΫηε͢Δͱ 404 ʹͳΔ ͰNext.jsʹݒ೦͕… Next.js + static exports vite + react-router-dom
- Dynamic routes Λར༻͢ΔͨΊʹ nginx ͳͲͰ rewrite ͢Δඞཁ͕͋Δ - Dynamic
routes Θͳ͍ - ύϥϝʔλʔΫΤϦύϥϝʔλʔͰ͍͍ͤ - σϑΥϧτͩͱύε໊ͷhtml͕ੜ͞ΕΔͷͰͬͺΓ rewirte ͕ඞཁʁ - /about.tsx ΛϏϧυ͢Δͱ about.html ͕ੜ͞ΕΔ - /about ʹΞΫηε͢Δͱ 404 ʹͳΔ - trailingSlashɿ true Λઃఆͪ͠Ό͓͏ - index.html ͕ੜ͞ΕΔ /about.tsx → /about/index.html - ࣌ར༻Λఆ͍ͯͨࣾ͠ͷϗεςΟϯάઌͰ index.html ʹϑΥʔ ϧόοΫ͞ΕΔ༷ͩͬͨͷͰಛʹϧʔςΟϯάͳͲෆཁʹ ͰNext.jsʹݒ೦͕… Next.js + static exports vite + react-router-dom
·ͱΊ - ϓϩδΣΫτͷঢ়گνʔϜͷεΩϧͳͲલఏ͔݅ΒɺϥΠϒϥϦɾϑ ϨʔϜϫʔΫʹٻΊΔཁٻΛग़ͨ͠ - ཁٻ͕࣮ݱͰ͖ΔߏΛ2Ҋݕ౼ͨ͠ - νʔϜͷεΩϧʹϚον͢Δ Next.js ΛબΜͩ
- ཁ݅Λ࣮ݱ͢ΔͨΊʹ Next.js ͷ͍ํΛগͨ͠͠
։ൃ։࢝ɺϦϦʔε - બఆىҼͰͷΕͳ͘։ൃΛਐߦͰ͖ͨ - ༧ఆͨ͠ʹϦϦʔεͰ͖ͨ - ߇͑Ίͳ͍ํʹͳ͕ͬͨɺ݅ʹ͖߹͍νʔϜϓϩδΣΫτʹϑΟο τ͢Δબఆ͕Ͱ͖ͨͱࢥ͏
Yahoo!ΫΠοΫϚʔτཧը໘ͷݱࡏ - ϑΝʔετϦϦʔεͰམͱͨ͠ཁ݅ͷ։ൃத - ·ͩ·ͩΓͳ͍ػೳ͕ଟ͍ (ొɾߋ৽جຊ CSV ೖߘ…)
ग़લؗͷϑϩϯτΤϯυ - ϑϩϯτΤϯυΛͭϓϩμΫτ͕͍͔ͭ͘ - ग़લؗWEBɺ Ճໍళཧը໘ͳͲ - جຊReactͬͯ·͢ - ग़લؗWEBNext.js
+ BFF (GraphQL) - ৄ͘͠ΧδϡΞϧ໘ஊͰʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠