Next.js ISRによる高速表示

静的生成と自動更新で、ECサイトの表示速度を改善

ISRNext.js静的生成高速化
読了時間: 6分

このプロジェクトについて

ECサイトの運営では、「表示はもっと速くしたい」と「商品情報は常に最新にしたい」という2つの要望がセットでやってきます。ただ、この2つは仕組みのうえでは引っ張り合う関係で、表示を速くするために情報を固定すれば更新が遅れ、常に最新を返そうとすれば表示が重くなります。

このプロジェクトでは、Next.js(ネクストジェイエス。Webサイトを作るための土台になる仕組み)のISRという機能を使って、この両立を実現しました。ISRは、ページをあらかじめ作り置きして高速に配信しながら、決めた間隔で自動的に作り直してくれる仕組み。さらにWebhook(何かが起きたときに自動で通知を送る仕組み)と組み合わせることで、管理画面で商品情報を更新すると、ほどなくサイトに反映される状態を作っています。

実装は、非エンジニアの立場からAIエージェント(AIによる開発支援)に構成を伝えて進めたものです。「どのページを何秒ごとに更新するか」という方針さえ決めれば、仕組みそのものは無理なく組み立てられました。

詳しく知りたい方へ

ISRについて、3つの記事に分けて解説しています。基礎 → 効果 → 仕組みの順で読めるように整理しました。

構成図

従来のSSR(サーバーサイドレンダリング)
ユーザー
リクエスト
サーバー
API呼び出し→HTML生成(毎回処理・待ち時間あり)

従来の方式では、ユーザーがページを開くたびにサーバーがその場でページを組み立てるため、毎回待ち時間が発生します。

ISR(ビルド時)
API
データ取得
静的HTML生成
ビルド
CDNに配置
配信準備完了

公開の前にページを作り置きして、世界各地の配布拠点(CDN)に置いておく流れです。

ISR(ユーザーアクセス時)
ユーザーアクセス
リクエスト
CDN
キャッシュから即座に表示(高速)
revalidate時間経過後
バックグラウンドで更新

ユーザーには作り置きしたページを即座に返し、有効期間が過ぎたら裏側で新しく作り直します。

On-Demand ISR(商品更新時)
Webhook
商品更新通知
API Route
キャッシュ無効化
次回アクセスで再生成
最新データ反映

商品更新の通知をきっかけに古い作り置きを捨て、次のアクセスで最新版に差し替える流れです。

使用技術

  • Next.js (App Router)
  • Vercel (ホスティング・Edge Network)
  • Shopify Storefront API
  • Shopify Webhook