---
title: "Sitecoreコンテンツシリアライゼーションの構造概要"
slug: "sitecore-content-serialization-structural-overview"
abstract: "Sitecoreコンテンツシリアライゼーション(SCS)構造の概要。"
---
# Sitecoreコンテンツシリアライゼーションの構造概要

Sitecore Content Serialization(SCS)システムを使って、Sitecoreインスタンス内でのコンテンツ項目をシリアライズします。これは、どのコンテンツ項目を含めるか、どれを除外するか、そしてその項目に対してどの操作を行うかを設定することで行われます。

SCSシステムはコンテンツ項目をプロジェクトフォルダにYAMLファイルとしてシリアライズします。デフォルトパスはモジュールファイルに対して \\serializationですが、任意のパスに対して [相対的なシリアライズパスを設定](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/configure-the-relative-serialization-path.html "Configure the relative serialization path") できます。

## プロジェクト設定ファイル

プロジェクト設定ファイルはsitecore.jsonと名付けられています。関連する[Sitecore Content Serializationモジュール](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/create-a-sitecore-content-serialization-module.html "Create a Sitecore Content Serialization module")を参照するmodulesプロパティを含むいくつかのプロパティがあります。

プロジェクトの最も単純な形での構成は次のようになります。

{
 "$schema": "./.sitecore/schemas/RootConfigurationFile.schema.json",
 "modules":  "src/\*/\*.module.json" 
}

## 手動および自動のシリアライズ

手動または自動でシリアライズできます:

-   Sitecoreインスタンスに対して、またはデマンドでコンテンツをプッシュまたはプルしたいときは手動のシリアライゼーションを使います。
-   CLIやSVSを使ってwatch コマンドを有効にすることができます。これによりSitecoreの変化を監視し、シリア化されたアイテムを自動的にディスクに引き出します。

## コンテンツの含め方と除外

*インクル*や*ルール*でコンテンツ項目のサブセットをシリアライズのために選びます。これは、コンテンツアイテムツリーの特定の部分を繰り返しシリアライズする際に有用です。

Project.module.jsonなどのモジュールファイルで、コンテンツ項目のシリアライズから何をどのように含み除外するかを設定できます。すべてのモジュールファイルにシリアライズ設定を配置・*オーバーライド*できます。

> !注コンテンツアイテムはすべてのモジュールで一度だけ含まれます。

各includeには、ファイルシステム内のフォルダ名となるnameプロパティと、コンテンツアイテムツリーのどの部分をシリアライズするかを指定するpathプロパティが必要です。

例えば、コンテンツアイテムツリー全体をファイルシステムのserialization\\content\\ フォルダにシリアライズするには、これをProject.module.jsonファイルに追加し、sitecore ser pullコマンドを実行します。

"items": {
 "includes": 
 {
 "name": "content",
 "path": "/sitecore/content/home"
 }
 
}

> !重要インクトゥルの順序は重要です。もしコンテンツ項目が同じモジュール内のテンプレートに依存している場合、インクルーズのテンプレートが最優先でなければなりません。

含まれるプロパティおよびルールプロパティの完全なリストについては、[Sitecore Content Serialization設定リファレン](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/sitecore-content-serialization-configuration-reference.html "Sitecore Content Serialization configuration reference") スを参照してください。

> !注インクルートプロパティは *ルート* プロパティと呼ばれ、ルート *名* や *ルートパス*のように言われます。

### ルール

ルールはコンテンツアイテムツリーのシリアライズを設定するために使われます。ルールはルートパスに対してパスを設定し、影響を与えるコンテンツ項目の範囲、そして許可されるプッシュ操作の変更を行います。

例えば、/sitecore/content/home/products/ パスとその子孫を同期させたい場合、legacy/ パス以外のすべての子孫を同期させたい場合は、以下のようにインクトゥルを追加します。

"items": {
 "includes": 
 {
 "name": "content",
 "path": "/sitecore/content/home",
 "rules": 
 {
 "path": "/products/legacy",
 "scope": "ignored"
 },
 {
 "path": "/products",
 "scope": "ItemAndDescendants",
 "allowedPushOperations": "createUpdateAndDelete"
 },
 {
 "path": "\*",
 "scope": "ignored"
 }
 
 }
 
}

ルールシステムは「 *先勝* 制」の原則に基づいており、コンテンツがルールに合致すると、その後のすべてのルールは無視されます。

-   最初のルールは、SCS /sitecore/content/home/products/legacy パス内のすべてのコンテンツ項目を無視するように指示します。
-   2つ目のルールは、 /sitecore/content/home/products パス内のすべてのコンテンツ項目をシリアライズするようSCS指示します。すべてのサブコンテンツ項目はスコープが ItemAndDescendantsされているため含まれています。
-   3つ目のルールは、これ以上コンテンツ /sitecore/content/home SCSシリアライズするのを防ぎます。このルールのワイルドカードパスは、前のルールでマッチしないすべてのコンテンツ項目と一致し、 ignored スコープによってそれらのコンテンツがシリアライズされるのを防ぎます。

ルールを設定する際には以下の点を念頭に置いてください:

-   ルールの経路が重ならないよう。もし重複する場合は、最も具体的なルールを優先しなければなりません。
-   親のパスのルールは、子供や子孫のパスのルールを上書きします。
-   ルールスコープはルートスコープよりも包括的にはなりません。例えば、ルートスコープが ItemAndChildrenの場合、ルールスコープは ItemAndDescendantsできません。
-   ルール内の alias プロパティは、この特定のルールのルート name プロパティ(ファイルシステム内のフォルダ名)を置き換えます。
-   aliasプロパティ*と*scopeプロパティを設定し、ignored値を設定している場合は、スコープが使われます。無視されるスコープのコンテンツはエイリアスの影響を受けません。

すべての設定可能なルールプロパティについては、[Sitecore Content Serialization Configuration Reference](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/sitecore-content-serialization-configuration-reference.html "Sitecore Content Serialization configuration reference")を参照してください。

## SCSパッケージ内のフィールドの除外

> !注除外されたフィールド機能はCLI 4.0以降から利用可能です。

sitecore.json設定ファイルや任意の\*modules.json fileで指定することで[、シリアライズからフィールドを除外](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/configure-excluded-fields.html "Configure excluded fields")できます。

> !注同期操作は常に除外されたフィールドを無視します。したがって、Sitecoreでそれらのフィールドを変更しても、CLIは変更を検出せず、データをプッシュしても上書きされません。YAMLファイルに除外されたフィールドがある場合、それらは含まれるフィールドの変更後か、手動で除外を削除してpull操作を行う場合にのみ削除されます。

excludedFields性質は、2つの性質を持つ除外フィールドの配列を含みます:fieldIdとdescription。

CLIコマンドの除外フィールドをpackage、watch、diff設定することもできます。