JSSを使用する際のベストプラクティス
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
JSSアプリケーションは、通常のJavaScriptアプリケーションがサポートしないユースケースをサポートする必要があります。したがって、JSSアプリケーションを開発するときは、JSSアプリケーションが期待される機能を安全に提供できるように、いくつかのベスト プラクティスに従う必要があります。
一般的な開発のベストプラクティス
一般的な開発のベストプラクティス
JSSアプリケーションを開発するときは、レイアウト、コンテンツ、およびルートに対するコンテンツ作成者の制御を保持する必要があります。
レイアウトのハードコーディングを避ける
コンテンツ作成者管理と互換性のあるアプリを構築するには、コンポーネント階層やテキストや画像などの非コード コンテンツをハードコーディングしないようにする必要があります。代わりに、コンポーネント内でJSSパッケージのコンポーネントを使用します - これにより、コンテンツ作成者によって生成された動的データがコンポーネントに提供されます。
コンポーネントのネストを明示的にハードコーディングしないでください。代わりに、JSSライブラリの <Placeholder> コンポーネントを使用して、コンテンツ作成者が他のコンポーネントをネストできるバスケットをコンポーネントに作成します。
この推奨事項についてアプリケーションを検証するには、エクスペリエンス エディターが期待どおりに動作することを確認します。コンテンツ作成者は挿入できる必要があります。レンダリングを削除および移動します。
フィールドをハードコーディングしないようにする
コンテンツ作成者が制御する必要がある値がコンポーネントにある場合は、TextやImageなどの関連フィールドコンポーネントをJSSライブラリからインポートし、これらの値の代わりにこれらのコンポーネントを使用します。フィールド値をハードコードしたり、他の方法で挿入したりしないでください。
この推奨事項についてアプリケーションを検証するには、エクスペリエンス エディターが期待どおりに動作することを確認します。コンテンツ作成者は、すべてのデータソースフィールドをインラインで編集できる必要があります。
オーサリング要件について問い合わせる
Sitecoreは、強力なマーケティング機能を備えた複雑なアプリケーションを構築するためのツールのコレクションです。
Sitecoreサイトが構築された後、Sitecoreは、エンドユーザーのWebサイトexperienceを分析、育成、およびパーソナライズするためのさまざまなツールと統合をユーザーに提供します。Sitecoreサイト (つまりJSSアプリ) の主なクライアントは、マーケター、Sitecore管理者、コンテンツ作成者です。開発者は、これらのクライアントのビジネス要件を満たすJSSアプリケーションを構築する必要があります。つまり、JSSアプリはSitecoreオーサリング インターフェイスとの互換性を維持し、サイトおよびコンテンツ管理機能を制限する可能性のある技術的な制限を導入しないようにする必要があります。
作成者が制御するカスタムルートのサポートを保持する
Sitecoreでは、コンテンツ作成者は、目的のURL構造に基づいてコンテンツ ツリーを整理することで、各ページのURLを制御できます。JSSアプリは、この機能を完全にサポートすることが期待されています。JSSアプリは、コンテンツ作成者によって制御されるURL構造をサポートする ためのカスタム ルーティング を実装します。
サーバーサイドレンダリングと互換性のあるアプリケーションの開発
サーバーサイドレンダリングと互換性のあるアプリケーションの開発
サーバー・サイド環境には、クライアント・サイド・アプリケーションにはない制限があります。オーサリング環境との互換性を維持し、コンテンツ作成者がグラフィカルユーザーインターフェイスでコンポーネントを編集できるようにするには、実稼動ビルドでクライアント側レンダリングを使用している場合でも、SSR互換のJSSコンポーネントをビルドすることをお勧めします。
選択したフレームワークのSSRガイドとベスト プラクティスに従うことを強くおすすめします。また、JSSアプリで使用するサードパーティ ライブラリのSSR互換性に関する推奨事項も参照してください。
ブラウザ固有のオブジェクトを避ける
SSRの互換性を維持するには、次のようなブラウザー固有のオブジェクトの使用を排除します。
-
window.
-
document.
-
localStorage.
-
sessionStorage.
これらのブラウザー固有のオブジェクトを使用する必要がある場合は、現在の実行コンテキストをチェックする条件でコードをラップするか、SSR中に起動しないライフサイクル メソッドにコードを配置します。
JSSには、アプリが現在Node.jsコンテキストでレンダリングされているかどうかを確認するためのユーティリティ関数isServer() があります。これを制御フローと共に使用して、SSRコンテキストを処理できます。例えば:
サードパーティの依存関係を確認する
プロジェクトでサードパーティの依存関係を使用する場合、SSRをサポートするために追加の構成またはミドルウェアが必要になる場合があります。
SSRの互換性については、ドキュメントを確認してください - 初期化オプション、レンダリング時間パラメータ、SSRに固有のビルド設定などに関する特別なものを探してください。
注意すべき一般的な依存関係は次のとおりです。
-
AxiosやSWRなどのデータフェッチライブラリ。
-
状態管理ライブラリ。たとえば、ReduxやVuexなどです。
-
ApolloなどのGraphQLデータグラフの実装。
-
ルーティング ライブラリ (react-router、vue-router)
-
styled-componentsやemotionなどのCSS-in-JSライブラリ
-
react-helmet.
-
動的に読み込まれるコンポーネント。たとえば、react-loadable.
デプロイとセキュリティ
デプロイとセキュリティ
JSSアプリケーションのデプロイメント手順は、開発ワークフローによって異なります。
本番環境では、ほとんどのアプリがSitecoreファーストのワークフローを使用します。
Sitecoreファーストのワークフローでは、次のような通常のSitecore DevOpsのベスト プラクティスが適用されます。
-
反復可能で完全に自動化されたデプロイ プロセスを用意します。
-
UnicornやTDSなどのアイテム シリアル化ツールを使用して、JSSサイトのアイテムを含む、開発者所有のSitecoreアイテム (テンプレート、レンダリングなど) をソース管理およびデプロイします。
特にJSSの場合は、次のものもお勧めします。
-
フロントエンドとバックエンド間での変更の同期の問題を回避し、開発者が変更を簡単にコミット、テスト、元に戻すことができるように、Sitecoreバックエンド コードとJSSサイト コードを同じソース管理リポジトリに保存することを検討してください。これにより、CIビルド中にJSSサイト アーティファクトをビルドしてSitecoreにデプロイすることも簡単になります。
-
ヘッドレス モードでのSitecoreの更新とJSSサイトの更新のデプロイを1つのビルド プロセスに自動化し、フロントエンドとバックエンドの異なるバージョンのデプロイによる欠陥を回避します。
-
接続情報とデプロイメント情報をデプロイメント変数JSS格納できるようにするには、jss setupコマンドでいくつかのオプションを使用できます。
グローバルnpmパッケージをインストールできない環境でjss CLIコマンドを実行する場合は、代わりにnpm run jss commandを使用してCLIコマンドのエイリアスをnpmにすることができます。
npmで実行するコマンドの引数の前に -- を使用します。例えばnpm run jss deploy items -- --skipPackage
インポートサービス
インポート サービスは、コードファーストのSitecoreアイテム アーティファクトをSitecoreにデプロイするためや、Sitecoreファーストの開発者用スキャフォールディングに使用されます。このサービスは、Sitecoreヘッドレス サービスのインストール時に自動的にインストールされます。
-
デプロイ サービスでは、認証に共有シークレットを使用します。これらは、環境ごとに一意で、randomly generated (パスフレーズなし)、32文字以上である必要があります。共有シークレットは、デプロイされるパッケージを要素としてHMACを使用するため、パッケージが改ざんされておらず、共有シークレットがネットワーク経由で送信されないという署名検証が行われます。
-
インポート サービスを含むすべてのSitecore HTTPサービスは、署名の検証があってもTLSで保護されたチャネルで実行することを強くお勧めします。
-
インポート サービスは、Sitecoreサーバーの役割がローカル開発にStandaloneされていない場合、または運用にContentManagementされていない場合、自動的に無効になります。JSSアプリのインポートは、公開サーバー上で自動的には許可されません。
-
インポートサービスにIPホワイトリストをデプロイする場合は、ネットワークレベルでこれを行うことができます。