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
NIFTY Tech Talk #09 ニフティトップのNext.jsでのキャッシュ戦略を考えた話
Search
ニフティ株式会社
PRO
March 08, 2023
Video
Resources
Programming
0
1.2k
NIFTY Tech Talk #09 ニフティトップのNext.jsでのキャッシュ戦略を考えた話
ニフティ株式会社
PRO
March 08, 2023
Tweet
Share
Video
Resources
SvelteKit, Next.jsの導入事例紹介など 〜ニフティのフロントエンドの今とこれから〜 - NIFTY Tech Talk #9
https://nifty.connpass.com/event/273568/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
2025-04-25 NIFTY's InnerSource Activites
niftycorp
PRO
0
200
外コミュニティ活動や登壇活動が技術 広報として大事だよ、と改めて周囲に伝 えられた件 - EM Oasis 特別会
niftycorp
PRO
0
93
Dify触ってみた。
niftycorp
PRO
1
210
Amazon Bedrockを使用して、 運用対応を楽にしてみた
niftycorp
PRO
1
220
自社製CMSからの脱却:10件のWebサイト再構築に学ぶ運用重視の技術選定 - NIFTY Tech Day 2025
niftycorp
PRO
0
110
エンジニアの殻を破る:インナーソースと社外活動がもたらした成長 - NIFTY Tech Day 2025
niftycorp
PRO
0
73
システム全体像把握の超高速化〜システム関連図を使い倒そう (LT) - NIFTY Tech Day 2025
niftycorp
PRO
0
72
Rust で生成 AI の社内 chatbot をメンテしている話 (LT) - NIFTY Tech Day 2025
niftycorp
PRO
0
76
メタバースは仕事に使える?〜100日間でバーチャルオフィスへの挑戦〜 (LT) - NIFTY Tech Day 2025
niftycorp
PRO
0
67
Other Decks in Programming
See All in Programming
Benchmark
sysong
0
210
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
170
A2A プロトコルを試してみる
azukiazusa1
1
350
Using AI Tools Around Software Development
inouehi
0
1.2k
Gleamという選択肢
comamoca
6
730
FormFlow - Build Stunning Multistep Forms
yceruto
1
180
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
220
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
370
Select API from Kotlin Coroutine
jmatsu
1
170
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
1
550
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
1
120
GoのGenericsによるslice操作との付き合い方
syumai
2
640
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
KATA
mclloyd
29
14k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Writing Fast Ruby
sferik
628
61k
Optimizing for Happiness
mojombo
379
70k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Bash Introduction
62gerente
614
210k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
Transcript
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップのNext.jsでの キャッシュ戦略を考えた話
佐々木 優 会員システムグループ
Copyright © NIFTY Corporation All Rights Reserved. 2 あらためて自己紹介
ニフティ株式会社 佐々木 優 • 新卒入社4年目 • @niftyトップページ開発/運用 • 自転車・国内旅行にハマり中
Copyright © NIFTY Corporation All Rights Reserved. キャッシュとは何か? 3
Copyright © NIFTY Corporation All Rights Reserved. キャッシュとは? •
一度利用したブラウザやサーバー側にあるデータを 一時的に保存する機能 キャッシュの種類 • ブラウザキャッシュ • CDNのキャッシュ など ※CDN = サーバーからの応答を 肩代わりするためのもの 4 キャッシュの概要
Copyright © NIFTY Corporation All Rights Reserved. 5 キャッシュの目的
コスト削減 • 画像などのコンテンツをキャッシュさせることで サーバー側へのリクエストにかかるコストを削減できる インフラリソースの負荷軽減 • ブラウザやCDNを用いることでサーバー側への負荷を肩代 わりできる パフォーマンス向上 • 銀の弾丸ではないがWebページのレスポンスタイムを減らす ことができる
Copyright © NIFTY Corporation All Rights Reserved. 6 キャッシュの目的
コスト削減 • 画像などのコンテンツをキャッシュさせることで サーバー側へのリクエストにかかるコストを削減できる インフラリソースの負荷軽減 • ブラウザやCDNを用いることでサーバー側への負荷を肩代 わりできる パフォーマンス向上 • 銀の弾丸ではないがWebページのレスポンスタイムを減らす ことができる
Copyright © NIFTY Corporation All Rights Reserved. @niftyトップページでも キャッシュ戦略を考えてみました!
7
Copyright © NIFTY Corporation All Rights Reserved. サイトの概要 •
ニフティの会員向けポータルサイト • 月間82万UU、1,989万PV!! ※2023/01実績 • 2022年7月にシステム基盤刷新を行った ◦ ReactベースのNext.js + Serverless Framework + CDN構成 詳細は 『NIFTY Tech Talk #4 レガシーシステムからの脱却』を ご参照ください! https://www.youtube.com/watch?v=Ttium-UNEEU 8 @niftyトップページについて
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイ するために使用) ブラウザキャッシュ • 基本はNext.jsで管理 9 @niftyトップページキャッシュ構成
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイす るために使用) ブラウザキャッシュ • 基本はNext.jsで管理 10 @niftyトップページキャッシュ構成
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイす るために使用) ブラウザキャッシュ • 基本はNext.jsで管理 11 @niftyトップページキャッシュ構成 ブラウザ→CloudFront へのリクエスト料金が発 生💰
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイ するために使用) ブラウザキャッシュ • 基本はNext.jsで管理 12 @niftyトップページキャッシュ構成 ブラウザ→CloudFront へのリクエスト料金が発 生💰
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイ するために使用) ブラウザキャッシュ • 基本はNext.jsで管理 13 @niftyトップページキャッシュ構成 よりユーザーに近い位置でのキャッシュ CDNへのリクエストも軽減できる 💪 ブラウザ→CloudFront へのリクエスト料金が発 生💰
Copyright © NIFTY Corporation All Rights Reserved. どうキャッシュさせるのが良いか?
14
Copyright © NIFTY Corporation All Rights Reserved. キャッシュするもの
• 画像やCSS、JSファイルなどあまり更新されない コンテンツはキャッシュさせる! • 特に画像はデータ転送量が大きいので効果大 • Next.jsでは静的コンテンツはデフォルトでキャッ シュされる設定になっている 15 キャッシュ戦略①
Copyright © NIFTY Corporation All Rights Reserved. キャッシュさせないもの
• APIなどユーザーによって返される内容が異 なるものはキャッシュさせない! • @niftyトップページにはログイン機能があり多 数の枠で利用している • 安全側に倒す方針を採用 16 キャッシュ戦略②
Copyright © NIFTY Corporation All Rights Reserved. 設定はなるべくシンプルに
• まずはシンプルに考える! • CDNとブラウザで同じキャッシュ設定に • できるだけユーザーに近い部分でキャッシュ させる 17 キャッシュ戦略③
Copyright © NIFTY Corporation All Rights Reserved. 無事リリース完了! 一見問題無さそうだが...
18
Copyright © NIFTY Corporation All Rights Reserved. next/imageの画像のブラウザキャッシュが短く設定されて いた
• next/image →Next.jsで画像を最適化してくれる技術 • 本来不要なリクエストが発生 →CloudFrontのコストも増加 • Severless Frameworkのデプロイ時に Next.jsのキャッシュ設定が上書きされててしまう 19 失敗談①
Copyright © NIFTY Corporation All Rights Reserved. 対処 •
Next.jsでブラウザキャッシュを効かせるためのルール を追加 next/imageのブラウザキャッシュを直接指定してみる 20 失敗談② async headers() { return [ { source: '/_next/image:slug*', headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, must-revalidate', }, ], }, } 例) next.config.js
Copyright © NIFTY Corporation All Rights Reserved. 結果 •
無事にnext/imageのブラウザキャッシュが効いた! • CloudFrontへのリクエストが減った! • 1000USD/月 程度のコストを削減できた! 21 どうなったのか?
Copyright © NIFTY Corporation All Rights Reserved. Good •
事前にキャッシュパターンを決めていた Bad • リリース後に正しくキャッシュが設定されているかの チェックが抜けていた • CloudFrontのコスト増加に気づけなかった Try • リリース後にはキャッシュ設定のチェックを行う • 普段からCost Explorerなどでコストを把握する癖をつける 振り返り① 22
Copyright © NIFTY Corporation All Rights Reserved. 振り返り② Learn
• 静的コンテンツはなるべくブラウザキャッシュさせる →更新頻度の低いコンテンツをまとめて管理できる設計 • キャッシュを常に把握できる状態にしておく →今の設定が本当に正しいのか?を検証可能に • 全てを一度に設定しようとしない →キャッシュなしの設定から徐々にキャッシュさせていく 23
Copyright © NIFTY Corporation All Rights Reserved. おわりに まとめ
• @niftyトップページでキャッシュ戦略考えた • キャッシュを正しく把握/設計することでインフラコストの削減に 繋がった • 失敗談から得た知見について 24
Copyright © NIFTY Corporation All Rights Reserved.