---
title: "JSSを用いたMVCアプリの静的生成における制限と回避策"
slug: "limitations-and-workarounds-for-static-generation-of-mvc-apps-with-jss"
abstract: "JSSおよびヘッドレスサービスを用いた静的生成MVCアプリケーションの制限と回避策"
---
# JSSを用いたMVCアプリの静的生成における制限と回避策

既存のMVCアプリケーションをヘッドレスJSSアプリケーションに変換するプロセスにはいくつかの制限があります。

## Next.jsアプリケーションのエクスポート

[Next.js with next exportが提供する静的エクスポート機能](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/walkthrough--export-a-jss-next-js-app-to-static-html-files-with-next-export.html "Walkthrough: Export a JSS Next.js app to static HTML files with next export")の使用に適用されるすべての制限があります。

next exportは多言語アプリをサポートしていないため、languageEmbeddingを無効にする必要があります。

languageEmbeddingを無効にするには:

-   Sitecore設定を変更し、languageEmbeddingの値をneverに設定してください:
    
    <configuration>
     <sitecore>
     <links>
     <urlBuilder>
     <languageEmbedding>never</languageEmbedding>
     </urlBuilder>
     </links>
     </sitecore>
    <configuration>
    

さらに、画像をレンダリングするMVCコンポーネントがある場合は、Sitecoreサーバー上のメディアファイルへの全パスを提供する必要があります。

> !注Sitecore Experience EdgeはメディアファイルのCDNを提供し、すでに画像のサーバーURLを埋め込んでいます。

メディアソースURLにサーバーURLを含めるには:

-   Sitecore設定を修正してMedia.AlwaysIncludeServerUrl:
    
    <setting name="Media.AlwaysIncludeServerUrl" set:value="true" />
    

## Sitecore AnalyticsとPersonalization

JSSアプリにおける[Sitecoreの分析やパーソナライズ](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/tracking,-analytics,-and-personalization-with-jss.md "Tracking, analytics, and personalization with JSS") に関するすべての制限が適用されます。

## セッションベースの機能

サーバー側のセッション情報(ASP.NETやクッキー)に依存する機能、例えばアカウントログイン、カート情報、GDPR準拠などは、Next.jsの静的生成では使用できません。

セッションベースの機能を使用するには、以下のいずれかを行う必要があります。

-   Next.jsのサーバーサイドレンダリングルートを使用してください。この方法はExperience Edgeでは機能しません。
    
-   Next.jsのリライトを使って、Sitecore CDへの完全なパススルーをインクリメンタル戦略として行ってください。例えば、サイトのアカウントセクション全体を延期することができます:
    
    {
     source: '/account/:path\*',
     destination: \`${jssConfig.sitecoreApiHost}/account/:path\*\`,
    }
    
-   アプリケーションをクライアントサイド方式でリファクタリングします。これは、ヘッダーの条件付きLogin/LogoutやGDPR準拠の承認など、サイトの全ページに表示されるコンポーネントに対して好まれるアプローチである可能性が高いです。
    

## Sitecoreフォーム

既存のMVCフォームをJSSアプリケーションで動作させるには、MVCフォームラッパーがHTMLとしてレンダリングされ、Next.jsアプリケーションがフォームに必要なリダイレクトを持つように調整が必要です。

> !重要Sitecore FormsはRESTレイアウトサービスとサーバー側レンダリングを使う場合のみNext.jsと連携します。

MVCフォームラッパーをHTMLとしてレンダリングするには:

-   MVCフォームラッパーについては、 [SitecoreレイアウトサービスでHTMLを出力するように設定](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/configure-the-sitecore-layout-service-to-output-html-for-mvc-renderings.html "Configure the Sitecore Layout Service to output HTML for MVC renderings")してください。

フォーム固有のリダイレクトを設定するには:

-   Next.js JSSアプリのnext.config.jsファイルのredirectsセクションで、以下のルールを追加してください:
    
    // Sitecore forms
    {
     source: '/sitecore%20modules/:path\*',
     destination: \`${jssConfig.sitecoreApiHost}/sitecore%20modules/:path\*\`,
    },
    {
     source: '/formbuilder',
     destination: \`${jssConfig.sitecoreApiHost}/formbuilder\`,
    },
    

> !ヒント[Next.jsアプリケーションにフォームを実装](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/implement-a-sitecore-form-in-a-jss-next-js-app.html "Implement a Sitecore form in a JSS Next.js app")することを検討してください。