Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DMM ブックスを Next.js 化している話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shimizu
November 10, 2025
Programming
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DMM ブックスを Next.js 化している話
shimizu
November 10, 2025
Other Decks in Programming
See All in Programming
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
Jetpack Compose Mechanisms
skydoves
3
820
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
ChromeでローカルLLM
ryu1013
0
140
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.3k
A better future with KSS
kneath
240
18k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
67k
How to make the Groovebox
asonas
2
2.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How STYLIGHT went responsive
nonsquared
100
6.3k
How to Talk to Developers About Accessibility
jct
2
580
Designing for humans not robots
tammielis
254
26k
Transcript
DMM ブックスを Next.js 化している話 Think FrontEnd by DMM #09
電子書籍開発部 基盤開発グループ フロントエンドエンジニア 清水 恭子 - 好き: 漫画/映画/旅行/お酒/辛い物 - 苦手:
日焼け/甘い物 - 推し: リヴァイ兵長/クロス元帥 - 性格: タフ & ポジティブ & マイペース
DMM ブックス
Think FrontEnd by DMM #03
当時(4年前)にやってたこと
色々あり、こうなっていた ・リプレースと機能開発を交互に実施していたので フロントエンド領域は 新旧環境が混在し続けている ・API は別環境に分離
今日の話
DMM ブックスを Next.js 化している話
背景課題 ・UX が良くない (遅い・レイアウトシフト激しい) 改善施策を打っていたが、リアーキテクトして抜本的な解決がしたい ・FE 開発体感 改善の余地あり React 化したが
Routing は BE の持ち物のまま変わらず 一つのリポジトリに全てが混在 目的 ・UX 向上(MPA, CSR -> SPA, SSR ) ・FE 開発体感の向上 (Routing を FE 領域へ、 FE/BE 分離) Next.js 化リプレース目的
DMM ブックスを Next.js 化している話
UX 改善+開発体感向上 のために DMM ブックスを Next.js 化している話
PoC ・PHP FW で実装されていた機能が移行 可能か? ・UX 改善にどういった効果があるか? ・Next.js AppRouter の採用
事前に技術選定と PoC をしていた ・仕様は原則 変えない ・ページ単位 で開発&リリースをしていく リプレース開発の大方針
移植に注力したかったので 現状は部分的な SC, SSR 化 のみ対応 ・レンダリング、ルーティング: Next.js AppRouter SPA
化による回遊時の UX 改善、 レンダリング手法の改善やキャッシュ機構の活用による速度改善を期待して採用 ・スタイリング: Styled-Components, CSS Module 旧環境が Emotion を採用しており 移植コスト低減のために Styled-Components との併用 ・データ管理: TanStackQuery データキャッシュ、ステート管理、 prefetchQuery & HydrationBoundary を使った SSR ・カスタムサーバー: fastify middleware のアクセスログを収集する用 主な技術スタック
前提 ・既存品質を落とさないこと (仕様、UX、セキュリティ、 SEO) ・安定したサービス提供をすること ・計画 やることの整理、リリース計画の策定 ・開発(移植、 UX改善) PHP
FW が持っていた Routing を Next.js に追加開発 既存環境から React コンポーネントを Next.js に移植 UX 改善のために Next.js と API 両方で改善検討と実施 ・検証 品質担保 : 機能テスト /UX検証/脆弱性診断 /SEO検証 安定性担保 : 負荷試験 ・リリース /監視 カナリアリリースと A/B テストの実施 NewRelic を使った監視 リプレース開発でやっていること
基盤構築と2画面リリースが完了 次のリプレース計画中 今の状況
ここまで進めてみてふりかえり
・移植開発 を進めながら API の改善検討 をしていた 旧環境をベースにした改善検討になっており、 移植完了後に新たな速度ボトルネックが見つかった ・リリースを 全部まとめた 改善サイクルが回せなかった
施策単位での効果検証が難しかった ビックバンリリース 次からは、、 ・移植 と 改善はなるべく 直列に実施 したい ・リリースはなるべく 最小単位 で実施したい 反省点: 移植と UX 改善の並走
よかったこと : 安定的なリリース ができた ・事前に 負荷試験 を実施した 検証でわかったパフォーマンスをもとにインフラ設定をした ・カナリアリリース を採用し段階的なユーザー公開をした
( 0% -> 1% -> 10% ,,, ) リスクを抑えながらユーザー公開することができた ・NewRelic ダッシュボード の作成と 日時監視 を行った 全員が同じ指標を見ていた 異常検知した際にすぐにチームや SRE との連携できた
・基盤構築 とページリプレース のリリースを分けた 計画が立てやすかった 基盤構築・ページの移植開発それぞれに集中することができた ・極力既存 React コンポーネントを流用( リファクタ我慢 )
OK: 技術スタックの変更による修正や構造の変更 NG: ロジックやコンポーネントの I/F 修正 計画通りに開発が進んだ、デグレートが最小限に抑えられた よかったこと : 移植開発の 効率化
リリースしたものはどうなった?
目的 ・UX 向上(MPA, CSR -> SPA, SSR ) ・FE 開発体感の向上
(Routing を FE 領域へ、 FE/BE 分離) Next.js 化リプレース目的
最善ではないが、、 視覚的 + 指標(LCP,CLS) が改善 し 以前より早く安定した 画面提供ができるようになった Reactバンドル読込 UX改善:
Next.js + SSR + API改善による初期描画の変化 Before:画面真白 → 全体スケルトン → ファーストビュー → 書影読込 → 他要素表示 After:ファーストビュー → 書影読込 → 他要素表示 データ fetch 中
UX改善: SPA 化 による回遊時の変化 Before After
・BE から脱却 した FE の新環境を構築した! ・新環境を品質落とさずにリリースして安定稼働させた! 開発体感の向上 : 新環境の構築と安定リリース
・(当たり前なことかもですが、、) 色々なことを一気にやらない ・UX は今後も改善の余地あり 活用しきれてない Next.js AppRouter の機能を試したい (Data cahce,
レンダリングの最適化 etc..) ・二画面のリリースを経てノウハウ溜まってきたので、 全画面リプレース に向けて頑張る まとめ