---
title: "JSSコードファーストインポートプロセスの特徴"
slug: "characteristics-of-the-jss-code-first-import-process"
abstract: "JSSコードファースト/切断インポートプロセスについて知っておくべき重要なこと"
---
# JSSコードファーストインポートプロセスの特徴

コードファースト開発に用いられるJSSインポートプロセスは、Sitecoreから切断された状態でアプリケーションの構造を迅速に設計・定義し、それをSitecoreに公開できるようにします。インポートプロセスでは、テンプレート、プレースホルダー設定、データソース項目、ルート項目、レンダリング項目などのSitecoreアーティファクトが作成されます。

JSSアプリでアプリインポート機能を使用する予定がある場合は、以下の点に注意が必要です:

## インポート過程は冪等的です

同じアプリケーションで同じSitecoreインスタンスにインポートプロセスを複数回実行しても、いくつかの制限があります。

マニフェストで明示的に定義されていない項目のフィールドはそのまま残されます。例えば、Sitecore開発者がインポートしたフィールドのソースを入力した場合、次のインポートでソースはリセットされません。ただし、マニフェストがそのソースの値を定義しない限り。

[インポートがコンテンツ項目やコンテンツ編集者とどのように連携するかは特別な考慮事項です。](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/code-first-development-workflow.html "Code-first development workflow")

## インポートプロセスはSitecoreのシリアル化の代わりにはなりません

インポート形式はSitecoreアイテムの完全な忠実度を表すものではなく、アイテム更新時のすべての状況に対応します。UnicornやTDSのようなSitecoreアイテムをシリアライズするツールの代替ではありません。

インポートプロセスは主に、Sitecoreインスタンスが利用できない場合や、バックエンド開発者がSitecoreをセットアップする前にアプリケーションの開発を始めたいフロントエンド開発者によるレンダリングアプリの設計を可能にします。最終的には、開発プロセスにおいてインポートプロセスを補完または代替し、JSSアプリの状態を維持するために専用に設計されたSitecoreアイテムシリアライゼーションツールで補完または置き換えることを推奨します。ただし、急速に開発されたシンプルなキャンペーンスタイルのアプリを除き、

Sitecoreのアイテムシリアライズツールは、JSSインポートによって作成されたまたは更新されたアイテムをシリアライズできます。これらは他のSitecoreアイテムと同様です。

## インポートプロセスではデフォルトで文字列をIDとして使います

インポートプロセスは文字列名をGUIDでSitecoreアイテムにマッピングするため、インポートファイルの書き込みが容易になります。マッピングはインポートされたアイテムの移動や名前変更を慎重に行う必要があることを意味します。

> !注インポートされたSitecoreのアイテムIDは決定論的です。異なるSitecoreインスタンスに同じアプリをインポートすると、Sitecore内で同じIDのアイテムが作成されます。

### 輸入品名の変更

文字列名でマッチングされるため、すでにインポートされた商品名をマニフェスト(またはSitecore)で変更すると、インポートをやり直すと重複アイテムが作成されます。アイテムの重複を防ぐ方法:

-   SitecoreでマニフェストのIDを既存のインポート済みアイテムIDに明示的に設定し、マニフェスト内で名前を変更します。インポート時に名前が変更されます。
-   表示名を設定し、そのままにするとSitecoreで名前が視覚的に変わります。

### 輸入品の移動

名前でマッチングされるため、インポートしたアイテムを移動すると次のインポート時に重複が生じます。

インポートしたアイテムを移動する必要がある場合は、マニフェスト内の既にインポート済みのSitecore ITEM IDと同じ明示的なIDを設定します。インポートプロセスは名前ではなくIDでアイテムを照会します。したがって、移動後もアイテムはマニフェスト上で知られたままです。

## 輸入プロセスでは未知の品物は除外されません

マニフェストからテンプレートやルートを削除しても、インポートプロセスは次のインポート時にSitecoreから削除しません。

## インポートプロセスは明示的に定義されたマニフェストデータのみの値を設定します

明示的に定義されたマニフェストデータのみがSitecoreで設定された値を上書きします。

例えば、アイコンを定義していないテンプレートをインポートし、Sitecore開発者がそのアイテムにアイコンを設定したとします。この場合、今後のインポートでアイコン値は上書きされません。マニフェストがテンプレートのアイコンを定義している場合、マニフェスト内の値はSitecoreで設定された値を上書きします。

## インポートプロセスにおけるアイテムIDの扱い

Sitecoreアイテムは固有のGUID IDを持っています。デフォルトでは、App Importはマニフェストで定義されたnameを用いて決定 [的なGUID](https://tools.ietf.org/html/rfc4122.html#section-4.3)を導き出し、インポートされたアイテムが常に予測可能なIDを持つようにします。GUIDは *名前スペースで表示*されているため、名前はアプリ内のセクション内でのみ一意であってはならず、アプリ全体にまたがる必要はありませんJSS。

例えば、ルートとテンプレートの両方を*Home* (または異なるレベルで2つのルート)を持つことは合法ですが、*Home*という2つのテンプレートを持つことは違法です。名前空間にはJSSアプリケーション名も含まれているため、複数のJSSアプリが同じ名前のアイテムを持つことができます。

> !重要JSSアプリケーションの名前を変更すると、その項目の期待されるすべてのGUIDが変更されます。

インポートマニフェスト内のすべての品目に対して明 *示的なID*を指定することも可能で、idプロパティをマニフェストの定義に追加できます。

> !重要多言語インポート環境でルートデータに明示的なIDを指定する際は、すべての言語値で同じID値を設定することを必ずしてください。

idは以下のいずれかのタイプである:

-   文字通り使われるGUID値です。これはSitecoreで使われている同じアイテムIDです。
-   決定性GUIDのソースとして使われる文字列値。名前ベースの決定性GUIDとは異なり、 *明示的な文字列IDはJSSアプリ名でのみ名前空間で割り当てられます*。したがって、JSSアプリ内でグローバルに一意でなければなりません。

> !注App Importは、データ損失を避けるために既にインポート済みアイテムのGUIDを変更しません。すでにインポート済みのアイテムにID値を設定すると、そのアイテムを削除してインポートを再実行するか、*フルワイプ* モードでインポートを実行した場合にのみ、新しいIDがSitecoreで有効になります。

サンプルアプリケーションには *、コンテンツ再利用*に関するスタイルガイドの例で明示的なIDを設定する例があります。

> !注マニフェストに*コンポーネント*を追加する際は、renderingIdとtemplateIdの2つのidプロパティを提供する必要があります。JSSコンポーネント定義は2つのSitecore項目を追加するため、両方とも存在しなければなりません。