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
株式会社出前館
March 18, 2025
Technology
0
28
Yahoo!クイックマート管理画面でNext.js + static exportsを選んだ理由
Findy社主催
【Next.js特集】フロントエンド技術選定の裏側 〜直面する技術的課題とは?〜
での登壇資料です。
株式会社出前館
March 18, 2025
Tweet
Share
More Decks by 株式会社出前館
See All by 株式会社出前館
出前館を支えるJavaとKotlin
demaecan
0
180
滑らかなユーザー体験も目指す注文管理のマイクロサービス化〜注文情報CSVダウンロード機能の事例〜
demaecan
0
170
出前館アプリにおけるFlutterアプリ設計とそれを支えるCICD環境の進化
demaecan
0
680
出前館のマルチプロダクト戦略を支えるアーキテクチャ 〜技術的負債を解消しながら事業を多角化する〜
demaecan
1
180
新卒1年目の自分に伝えたかったエンジニアの成長に役に立つ話
demaecan
0
1.8k
新卒エンジニアが0からNon-BlockingなgPRCサーバーを作った話
demaecan
1
500
出前館におけるFlutter活用事例
demaecan
0
510
出前館アプリにおける Flutterアプリ設計
demaecan
2
920
プロダクト本部紹介資料
demaecan
0
11k
Other Decks in Technology
See All in Technology
Рекомендации с нуля: как мы в Lamoda превратили главную страницу в ключевую точку входа для персонализированного шоппинга. Данил Комаров, Data Scientist, Lamoda Tech
lamodatech
0
640
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
700
改めて学ぶ Trait の使い方 / phpcon odawara 2025
meihei3
1
610
AWSのマルチアカウント管理 ベストプラクティス最新版 2025 / Multi-Account management on AWS best practice 2025
ohmura
4
230
AIエージェント開発における「攻めの品質改善」と「守りの品質保証」 / 2024.04.09 GPU UNITE 新年会 2025
smiyawaki0820
0
440
AWSLambdaMCPServerを使ってツールとMCPサーバを分離する
tkikuchi
1
2.8k
Classmethod AI Talks(CATs) #20 司会進行スライド(2025.04.10) / classmethod-ai-talks-aka-cats_moderator-slides_vol20_2025-04-10
shinyaa31
0
150
はじめてのSDET / My first challenge as a SDET
bun913
1
230
20250411_HCCJP_AdaptiveCloudUpdates.pdf
sdosamut
1
110
Creating Awesome Change in SmartNews
martin_lover
1
260
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
3
310
Spice up your notifications/try!Swift25
noppefoxwolf
2
350
Featured
See All Featured
Designing for humans not robots
tammielis
252
25k
Automating Front-end Workflow
addyosmani
1369
200k
Optimizing for Happiness
mojombo
377
70k
The Language of Interfaces
destraynor
157
24k
We Have a Design System, Now What?
morganepeng
52
7.5k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Speed Design
sergeychernyshev
29
890
Practical Orchestrator
shlominoach
186
10k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Docker and Python
trallard
44
3.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
How GitHub (no longer) Works
holman
314
140k
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) - ৄ͘͠ΧδϡΞϧ໘ஊͰʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠