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
Webアプリケーションのアーキテクチャパターンから読み解くNext.js
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
pvcresin
November 06, 2020
Programming
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Webアプリケーションのアーキテクチャパターンから読み解くNext.js
Eight Engineer Meetup #1
pvcresin
November 06, 2020
More Decks by pvcresin
See All by pvcresin
プロポーザルを書いてもらう
pvcresin
0
610
関係性から理解する"同一性"の型用語たち
pvcresin
2
740
リセットCSSを1行消したらアクセシビリティが向上した話
pvcresin
4
610
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
980
text-box-trim について 1 分で
pvcresin
0
170
Web IDEの進化とそれを支える技術
pvcresin
0
150
ステップアップOSSコントリビュート
pvcresin
0
520
Eight WebフロントエンドのDX向上に関する取り組み
pvcresin
0
210
TS 未経験者が 社内向け JS ライブラリを TS に置き換えている話
pvcresin
0
440
Other Decks in Programming
See All in Programming
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
4
3.7k
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
110
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
330
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.9k
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Intent as Code
shoppingjaws
4
640
ALB ログから Trace を気合で繋げる技術
fohte
7
880
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
480
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
180
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Automating Front-end Workflow
addyosmani
1369
210k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Discover your Explorer Soul
emna__ayadi
2
1.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Designing Experiences People Love
moore
143
24k
Transcript
Webアプリケーションの アーキテクチャパターンから読み解くNext.js @pvcresin 2020-11-06 Eight Engineer Meetup #1
鳥山 らいか / Raika Toriyama Sansan 株式会社 > Eight 事業部
> Eight Career 部 > エンジニア (新卒 2 年目) • @pvcresin • 好きなこと:散歩・お笑い・断捨離 • 好きな言語:TypeScript, Kotlin, (Rust)
• Web アプリケーションアーキテクチャのパターンを簡単に 振り返りつつ、Next.js の良さについて考える • Next.js の大まかな思想を理解する 今日の話
• Classic SSR • SPA • BFF • SSR •
SSG • ISR • おまけ Contents
• サーバサイドフレームワーク + テンプレートエンジン • リクエストに応じて HTML を生成して返す デメリット •
毎回画面更新 Classic SSR (Server Side Rendering) SSR Server Client Request Request
• CSR (Client Side Rendering) + Ajax • サーバから返される空の HTML
をもとに、 JS でルーティング・UI 構築・通信を行う • 初期表示以降、必要なデータだけを API から取得するため 画面遷移が高速 • React などの View 用コンポーネントライブラリの台頭 SPA (Single Page Application) Client 初回 Ajax Empty CSR JSON API Server
デメリット • アプリケーションが複雑になるにつれて JS のコードも肥大化 • 完璧なコンテンツが 表示されるまでの時間が長い • スペックが劣るデバイスでは
操作性を損なう可能性 がある • (SEO ?) SPA (Single Page Application) API Server Client 初回 Ajax CSR JSON Empty
• フロントエンドのためのバックエンド(サーバ) • バックエンドの API サーバ化・マイクロサービス化の潮流 • UI 構築 /
Data 操作 の関心の分離 • 役割 ◦ API Gateway ◦ Session 管理 ◦ SSR(後述) BFF (Backends For Frontends) BFF Client micro service API Server micro service micro service Front-end Back-end
• SPA においてクライアントで行っていた UI 構築ロジックを BFF側 (Node.js) でも利用 • 初回アクセス時にサーバから完璧なコンテンツが
表示された HTML が返される • View 用ライブラリ ≒ テンプレートエンジン SSR (Server Side Rendering) SSR BFF Client 初回
• 多くの場合、「初期表示を SSR + その後は SPA」 • 初期表示までの時間短縮・ページ遷移の高速化 • Next.js
初期の思想 デメリット • リクエストを受けてから HTML を生成するので マシンリソースを消費 する SSR BFF Client SSR (Server Side Rendering) CSR 初回 Ajax JSON Next.js
• ビルド時に全ての HTML ファイルを生成 • ファイルを CDN から返すためレスポンスが高速 • 更新頻度の低い、ブログ・ドキュメント等に向く
• Next.js も途中から対応 デメリット • 全ての HTML ファイルを再生成・デプロイし直す必要 = 時間がかかる SSG (Static Site Generation) CDN Client Server Deploy SSG
• 従来は SSG か SSR のプロジェクトのどちらか一方を選択する必要があった • ページごとに SSG /
SSR を選べるように (Next.js v9.3~) • SSR (同期的) ➡ SSG (非同期的) に SSG + SSR Hybrid
• Next.js v9.5~ • 初回アクセス ◦ 初めて HTML を生成 •
再度アクセス ◦ キャッシュされた HTML を返しつつ、 裏で再生成(Stale-While−Revalidate) • 全ての HTML を生成する必要がないため、ビルド時間が短縮 ISR (Incremental Static Regeneration) CDN Client Server SSG 初回 2回目
おまけ
• 初回リクエスト時に 画像(+ の表示)を最適化してくれるコンポーネント (Next.js v10~) ◦ 元画像より小さいサイズの画像を生成して返却 ◦ 最適な画像フォーマットに自動変換
(WebP 等) • 必要なときに必要な分だけ処理 • (CDN の役割な気も...) next / image
• Next.js はデメリットを少しずつ乗り越えながら進化している • 昨今のフロントエンドのカバー範囲の増加は UX 向上を追求した結果 • パフォーマンス向上のためにはリクエストをサーバまで到達させない まとめ