Tailwind Logo

Vercel の非本番環境でのプレビュー表示の調整

Vercel

公開日: 2024-11-08

Starter Kit を利用して Vercel にサイトを展開した際に、サイトのプレビューでスタイルシートが表示されないことがあります。今回はこれを改善する手順を紹介します。

Preview 環境の確認

Headless SXA のスターターキットを利用して Preview 環境を展開した場合ですが、ドメインを設定している場合は以下のような表示となります。

vercelpreview01.png

この環境の際に、Build をした .vercel ドメインのサイトにアクセスすると以下のように正しく表示されています。

vercelpreview02.png

ただし、プレビューの際に毎回同じ URL でアクセスをしたいため設定をした Preview のためのドメインでアクセスをすると以下のように表示が崩れてしまいます。

vercelpreview03.png

これは Build をした時に取得したサイトの URL を保管してページが生成されているため、独自ドメインの URL ではスタイルシートを読み込むことができない形となっています。

vercelpreview04.png

これは Preview の環境に関しては標準で Deployment Protection が入っているためであり、別のドメインのスタイルシートを読み込めていないために発生しています。

Next.js の設定を変更する

上記の動作は、Next.js で提供されている機能を利用しており、assetPrefix の項目を利用しています。公式文書での紹介は以下のようになっています。

実際に Starter Kit のコードを参照すると、以下のようになっています。

JavaScript
const jssConfig = require('./src/temp/config');
const plugins = require('./src/temp/next-config-plugins') || {};

const publicUrl = jssConfig.publicUrl;

/**
 * @type {import('next').NextConfig}
 */

const nextConfig = {
  // Set assetPrefix to our public URL
  assetPrefix: publicUrl,

  // Allow specifying a distinct distDir when concurrently running app in a container
  distDir: process.env.NEXTJS_DIST_DIR || '.next',

  // Make the same PUBLIC_URL available as an environment variable on the client bundle
  env: {
    PUBLIC_URL: publicUrl,
  },

ではこの assetPrefix の項目をコメントアウトするとどうなるでしょうか?

vercelpreview05.png

スタイルシートに関して、相対パスとなり正しく表示されるようになりました。

まとめ

今回は Vercel に展開をしている Preview の環境において、スタイルシートの読み込みのところでうまく動かないケースに関して、Next.js の設定を変更して回避する方法を紹介しました。

関連タグ