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
Next.js を選定した ZOZOTOWN のフロントエンドリプレイス、その全体像 / zo...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yuya takei
June 08, 2023
Technology
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Next.js を選定した ZOZOTOWN のフロントエンドリプレイス、その全体像 / zozotown frontend replacement project
yuya takei
June 08, 2023
More Decks by yuya takei
See All by yuya takei
TypeScript AST を活用した 設計差分抽出の紹介 / Introduction to Design Difference Extraction Using TypeScript ASTあ
takewell
0
190
ZOZOTOWNリプレイスにおけるWebフロントエンドのこれから / The future of web frontend in ZOZOTOWN replacement
takewell
0
910
コンポーネント化とHeadlessCMSを用いた ECプロモーションの効率化
takewell
0
2k
Other Decks in Technology
See All in Technology
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
130
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
200個のGitHubリポジトリを横断調査したかった
icck
0
120
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
130
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
880
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
130
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
560
やさしいA2A入門
minorun365
PRO
12
1.8k
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
140
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
880
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
130
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
Being A Developer After 40
akosma
91
590k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
The Curious Case for Waylosing
cassininazir
1
380
Code Review Best Practice
trishagee
74
20k
Exploring anti-patterns in Rails
aemeredith
3
400
Designing for Performance
lara
611
70k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
Transcript
Next.js を選定した ZOZOTOWN のフロント エンドリプレイス、 その全体像 株式会社ZOZO ZOZOTOWN開発本部 武井
勇也 Copyright © ZOZO, Inc. 1
© ZOZO, Inc. 2 株式会社ZOZO ZOZOTOWN開発本部 ZOZOWEB部 リプレイスバックエンドブロック 武井 勇也
2020年4月 新卒入社 ZOZOTOWN 開発本部に配属 2021年10月 フロントエンドリプレイスを担当開始 2023年4月 リプレイスバックエンドチーム異動 ZOZOTOWNのWebのリプレイスを担当 Twitter : @takewell_ Zenn : @takewell
© ZOZO, Inc. 目次 • Next.js でのリプレイスに至った経緯 • フロントエンドリプレイス •
Next.js をプロダクション投入するためのレンダリング • 振り返り • 今後について • まとめ 3
© ZOZO, Inc. 4 Next.js でのリプレイスに至った経緯
© ZOZO, Inc. リプレイス開始前 5 • 一つのアプリケーションにすべての責務を集 約したモノリシックな構成 • Classic
ASP/VBScriptで実現できない機能 は独自ライブラリを作成し対応 • スケールに成功し日本最大級のファッション 通販サイトとして成長 ※ 説明のため簡略化しています
© ZOZO, Inc. さらなる成長のための課題 6 • 技術スタックが時代的に一般的ではなくなってきているため • クラウド化が困難 •
OSSやSaaSのSDK導入が困難 • 人材採用が困難 • モノリシックなため • 責務が集中し、ロジックが密結合なため変更コストが高い • 開発組織のスケールが困難
© ZOZO, Inc. リプレイスの目的 7 これを達成できる組織にする
© ZOZO, Inc. 8 柔軟なシステム 開発生産性 技術のモダン化 採用強化 • セールなどの高負荷時
にスケール可能 • 技術情報のアウト プットによるプレ ゼンス向上 • レガシー技術による 独自実装の減少 • 汎用ミドルウェア、 SaaSを利用可能 • 並行開発 • リリースの自動化 リプレイスの効果
© ZOZO, Inc. フロントエンドリプレイス前の構成 9 ※ 説明のため簡略化しています • 達成 •
ビジネスロジックをマイクロサービスに移譲 • クラウド化 • 人材採用の加速 • インフラ基盤のベースを構築 • 未着手 • Webサーバーのリプレイス
© ZOZO, Inc. 10 フロントエンドリプレイス
© ZOZO, Inc. ホーム画面のリプレイスをフロントエンドリプレイス Phase1 と設定 11 Phase1 の狙い •
新フレームワークの導入 • インフラ基盤を構築する ホーム画面から始めた理由 • ホーム画面で利用しているAPIは、大部分が新BFF(Backend For Frontend) API から提供されており、レガシーシステムへの依存が比較的少ない • アクセス数や機能が多く、開発や運用のナレッジを蓄積しやすい • サービスの象徴的ページであり、開発のモチベーションが湧きやすい
© ZOZO, Inc. 新フレームワークは Next.js を選定 12 選定理由 • Reactでの開発をwebpackの細かい設定なしに始められる
• ページごとの SSR/SG などのレンダリング手法を柔軟に切り替えることができる • ルーティングとビルドコード分割の提供している • 数々のパフォーマンス最適化など新機能が毎年リリースされており、アクティブに開発され ているため将来性も期待できる 開発生産性◎ パフォーマンス◎ 人材採用のポテンシャル◎
© ZOZO, Inc. フロントエンドリプレイス後のシステム構成 13 • (1) ホーム画面のパスをリプレイス後のシステムへ、ホーム画面以外のパスは既存 システムへリクエストをルーティング •
(2) リプレイス後のシステムと既存オンプレミスのIISサーバーとセッションデータ共有 や、既存システムとの通信も可能にしている
© ZOZO, Inc. 14 Next.js をプロダクション 投入するためのレンダリング
© ZOZO, Inc. レンダリング 15 • Next.js には様々なレンダリング手法があるが、SSRするか否かがポイント • SSR
が必要な理由 • メタタグに動的データが必要 • ファーストビューに表示されるUIはローディングなどを挟まず表示したい • セールやキャンペーンの開始や終了のタイミングに合わせて時限式に切り替わるUIを 提供したい • SEO は極めて重要、懸念はないようにしたい
© ZOZO, Inc. レンダリングを選ぶためのフローチャート 16 • SEO効果に影響するコンテンツ • メタタグ •
ファーストビューに表示される • 検索エンジンにクローリングして欲しいものか • キャッシュ可能なコンテンツ • ユーザーによって変化しない • 時間で動的に切り替わる
© ZOZO, Inc. SSR の問題点 17 • アプリケーションを監視するエンジニアのオンコール体制の構築が必要 • サーバーの費用的なコストが生じる
• Node.js はシングルスレッド故に SSR のようなCPUバウンドな処理を同時処理された場 合、イベントループがブロックされ、性能が低下する可能性がある ZOZOTOWN はセールのタイミングなどリクエストがスパイクすることが あります。 快適に買い物してもらうためには、この高負荷に耐えられる必要があります
© ZOZO, Inc. SSR の問題点に対する対策 18 • リクエスト(req/sec) の見積もりと、負荷性能試験の実施 •
CDN を用いたキャッシュ • SEOに無関係な場合、CSR を積極的に利用していく • Node.js のマルチプロセス化によるコスト最適化
© ZOZO, Inc. 19 振り返り
© ZOZO, Inc. 必要となるスキル 20 ハードスキル • マークアップ : CSS,
アニメーション, アクセシビリティー • FEアプリケーション : ステート管理, レンダリング設計, ミドルウェアのノウハウ • BFFレイヤー : Node.js SSR/SG などの設計 マイクロサービスAPIのノウハウ • FE インフラ : Docker, GitHub Actions, CDN, 開発環境基盤のノウハウ • 既存システム : VBScript, 独自ミドルウェアのノウハウ ソフトスキル • 未知の知識を幅広く・早く吸収できる探索学習力 • 他部署と共通認識を形成できるコミュニケーション力・推進力 • 現場特性から最適なソリューションを判断・提案できる力
© ZOZO, Inc. よかった取り組み 21 • 他プロジェクトの兼任をやめてリプレイス専属FEチームを発足させた • やらないことを決めた •
ビックバンリリースはしない • 大きい機能改修はしない • レスポンシブサイトにはしない • 技術顧問古川さんに定期的に相談し、客観的に設計レビューをいただく
© ZOZO, Inc. 22 今後について
© ZOZO, Inc. 23 ~2021 Webフロントエンド リプレイス マイクロサービス 2022 2023
2024 HOME 会員基盤Phase1 カートリプレイス Phase2 お気に入り 会員基盤Phase3 検索結果 商品詳細 会員基盤Phase2 カート決済面リプレイス 1Q 2Q 3Q 4Q 1Q 2Q 3Q 4Q 1Q 2Q 3Q 4Q 現行システムの 完全削除に向けた後始末 商品API拡充 会員登録情報 カート決済面 一覧系、その他 検索結果残対応 注文リプレイス 注文履歴リプレイス 商品基盤構築 2025 1Q 2Q 3Q 注文リプレイス Phase1.0 注文処理の非同期化 事前調査 事前調査 注文履歴 検索系APIリプレイス 検索バッチリプレイス サイトリプレイス ロードマップ 遂行 フロントエンドリプレイスPhase1 完了 未着手 進行中
© ZOZO, Inc. Core Web Vitals の向上 24 Desktop Mobile
改善しているが、劇的な変化には至らず...! 伸び代まだまだあります! Before After
© ZOZO, Inc. その他やる可能性のあるもの 25 • パフォーマンス改善 • アクセシビリティー対応強化 •
デザインシステム構築 • マイクロフロントエンドな設計
© ZOZO, Inc. まとめ 26 • ホーム画面のNext.js化をフロントエンドリプレイス Phase1 というマイルストーンに設定した •
Next.js 化のプロダクション投入するためにはレンダリング設計が肝 • システムリプレイスは多岐にわたるスキルが必要となる。加えて、心構えやそれに至るまでのステップも 重要
None