JSS Next.js アプリでのプリレンダリング メソッドとデータ フェッチ戦略

Version: 20.x
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Next.js アプリには、プリレンダリングとデータ フェッチの間に強い関係があります。

JSS Next.js サンプル アプリケーションに基づいて作成された JSS アプリケーションは、Next.js アプリケーションでサポートされるすべてのプリレンダリング フォームをサポートし、通常の Next.js アプリと同様に、プリレンダリング フォームごとに異なるデータ フェッチ戦略を使用します。

静的 (サイト) 生成 (SSG/SG) またはサーバー側レンダリング

JSS Next.js アプリを作成するときに、アプリケーションは既定のオプションで初期化されます。既定のプリレンダリング メソッドは静的サイト生成 (SSG) ですが、--prerender パラメーターに SSR の値を指定することで、サーバー側レンダリング (SSR) を選択できます。

選択したプリレンダリング フォームにより、データ フェッチ戦略が決まります。JSS Next.js アプリをスキャフォールディングすると、オプションのキャッチオール ルート /src/pages/[[...path]].tsx のデータ フェッチ機能がアプリの作成時に選択したプリレンダリング メソッドに合わせて調整されるか、既定のメソッドである SSG となります。

JSS Next.js サンプル アプリケーションには、両方のデータ フェッチ戦略の例が含まれています。

既定のオプションを使用するか、--prerender SSG を指定して JSS Next.js アプリを作成する場合、アプリ作成スクリプトはファイル src/pages/[[..path]].tsx をコピーし、関数 GetStaticPaths および GetStaticProps を実装します。GetStaticPaths の実装は、GraphQL サイトマップ サービス を使用して静的に生成する必要があるパスのリストを生成します。

--prerender SSR を指定して JSS Next.js アプリを作成する場合、アプリ作成スクリプトはファイル src/pages/[[..path]].SSR.tsx をコピーし、src/pages/[[..path]].tsx という名前に変更します。このファイルは関数 GetServerSideProps を実装します。

GetStaticProps および GetServerSideProps の実装は、src/lib/page-props-factory.ts ファイルの SitecorePagePropsFactory 定義を活用します。

ヒント

アプリの作成後、別のメソッドに切り替えられます。

ページ データの準備

クラス SitecorePagePropsFactory は、context に基づき、ページ (props) をレンダリングするために必要なすべてのデータをフェッチするメソッド create(context: GetServerSidePropsContext | GetStaticPropsContext) を公開します。

メソッドは、次の構造を使用して型 SitecorePageProps のオブジェクトを返します。

RequestResponse
export type SitecorePageProps = {
  locale: string;
  layoutData: LayoutServiceData | null;
  dictionary: DictionaryPhrases;
  componentProps: ComponentPropsCollection;
  notFound: boolean;
};

ページ データを準備するには、SitecorePagePropsFactoryJSS Layout API および JSS Dictionary API を使用して、props ページ内のページで使用できるようにデータをフェッチします。

次の表で、ページ props データを説明します。

プロパティ

説明

locale

ファクトリは、ファイル next.config.jsi18n エントリーで設定されたコンテキスト ロケールを取得します。取得しない場合は、package.json ファイルで定義された config.language を使用します。

layoutData

layoutData プロパティには LayoutServiceData が保管されます。これは、JSS RestLayoutService を使用する Sitecore レイアウト サービス REST API か、JSS GraphQLLayoutService を使用する Sitecore GraphQL Edge スキーマからのものです。

SSR のコンテキストでは、コンテキスト要求とコンテキスト応答を送信して、Sitecore のトラッキングと分析を使用する機能を提供します。

dictionary

dictionary プロパティには、Sitecore ディクショナリ サービス REST API (RestDictionaryService) または Sitecore GraphQL Edge スキーマ (GraphQLDictionaryService) の DictionaryPhrases が含まれています。

componentProps

componentProps プロパティには、 ComponentPropsService でフェッチしたデータが含まれています。ComponentPropsService によって、関数を実装するコンポーネントに関数 getStaticProps/getServerSideProp が実行されます。componentProps の構造は、{ [renderingUID]: data } という形式の鍵-値マッピングです。

notFound

レイアウト サービスがページ ルートに 404 ステータスを返した場合は、notFound の値が true に設定され、カスタムの NotFound ページが正しい 404 ステータスとともにトリガーされます。

編集モードでページをリクエストしている Next.js プレビュー コンテキスト

Sitecore エディターでの作業中に、JSS Next.js アプリケーションがプレビュー モードになると、SitecorePagePropsFactoryeditingDataService を使用して、編集リクエストで送信した layoutDatadictionarylanguage のデータを取得します。

増分静的再生 (ISR)

JSS Next.js ページを統計的に生成すると、既に本番用のアプリケーションをビルドした後で、増分静的再生を使って統計ページを更新することができます。ISR を使用するには、そのページの GetStaticProps 実装にある revalidate プロパティを定義します。

ハイブリッド レンダリング

JSS Next.js アプリケーションで新規ページを作成することも、動的ルートを使用することもできます。たとえば、記事の索引を示すページを src/pages/articles/index.tsx ファイルに追加することも、1 つの記事を表示するページを src/pages/articles/[id].tsx に追加することもできます。

静的に生成されたアプリでは、動的コンテンツを含むページをサーバー側でレンダリングすることでメリットが得られます。これは一般的な目的として、そのようなページへの公共アクセスを可能にし、検索エンジンによりインデックスを作成し、Sitecore エディターで編集可能にすることが考えられるためです。さらに、かなりの数の記事がある場合は、静的生成を使用するとビルド プロセスが長くなる可能性もあるためです。

JSS Next.js アプリケーションでのプリレンダリングとデータ フェッチは、双方向の関係にあります。サーバー側で新しいページをレンダリングするには、GetServerSideProps 関数を実行してページの初期データを取得し、ページで定義または使用されているコードに SSR との互換性があることを確認するだけです。その他すべてのデータは引き続き、増分静的再生を含む SSG データ フェッチ戦略を使用できます。

サーバー側レンダリングで生成されるページと静的に生成されるページが混在するハイブリッド アプリケーションの場合、静的 HTML 生成との互換性がある場合は、Next.js は静的 HTML ファイルとして getStaticProps を使用するルート/ページを自動的にレンダリングします。

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、