---
title: "ランニングコンテナとアイテムを同期させる"
slug: "sync-items-with-a-running-container"
abstract: "Sitecoreのアイテムをランニングコンテナと同期する方法を説明しています。"
---
# ランニングコンテナとアイテムを同期させる

このトピックでは、コンテナ内でローカルなSitecore環境が稼働している場合に、シリアライズされたアイテムをどのようにプッシュ・プルするかについて説明します。Sitecoreのアイテムをシリアライズする方法と、Sitecoreソリューションの開発・展開時にシリアライズを使う方法をすでに知っている必要があります。

## Sitecore CLI / Sitecoreコンテンツシリアライズ

Sitecore 10以降で利用可能な[Sitecore CLI](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/sitecore-command-line-interface.html "Sitecore Command Line Interface")は、リモートSitecoreインスタンスとの相互作用に最適化されています。 sitecore ser pull、sitecore ser push、sitecore ser watchなどのコマンドは、他のSitecoreインスタンスと同様にコンテナ内で動くSitecore環境でも使えます。

## Sitecore TDS

Sitecore TDS HTTPベースのサービスを介して通信するため、Sitecore環境がコンテナ中であっても他のSitecoreインスタンスと同様に全く同じ動作をします。コンテナ環境とプロジェクトをTDS Visual Studioで設定する方法を理解しておく必要があります。そうすればTDSがコネクターをCMコンテナに正常にインストールできるようにしましょう。

[Helix。GitHubのサンプルリポジトリ](https://github.com/Sitecore/Helix.Examples)には完全な例が含まれています。

### コンテナ向けのTDSプロジェクトの設定

Sitecore TDSドキュメントには詳細がありますが、基本的な手順は以下の通りです。

1.  Visual Studioのビルドと同様に、 [CM](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/deploying-files-into-running-containers.html "Deploying files into running containers")コンテナのDockerfileとエントリーポイントをランタイムファイル展開用にセットアップします。
2.  TDSプロジェクトの *Sitecore Web Url* を、Sitecoreコンテナ環境でCMサービスに使うホスト名に設定してください。
    -   Docker例リポジトリでは、これは *[https://cm.dockerexamples.localhost](https://cm.dockerexamples.localhost)* です。
    -   httpsを忘れ**ないでください。**
3.  TDSプロジェクトの *Sitecore Deploy Folder* を、Sitecore CMファイル展開のためにマウントされたパス、例えばdocker\\deploy\\websiteフォルダに設定してください。パスはTDSプロジェクトの位置に対して相対的でなければなりません。
4.  TDSプロジェクトの「 *コンテナデプロイメントを有効にする*」オプションを確認してください。これにより、コンテナベースの環境向けにTDSサービスインストールの挙動の一部が最適化されます。
5.  TDSプロジェクトの *Install Sitecore Connector* オプションを確認してください。

このようにTDSを設定することで、実行時のファイル展開に適した場所にコードビルドをデプロイできるようになります。

### TdsGlobal.configでの設定

TdsGlobal.config設定ファイルを使用している場合は、必要な値を次のように設定できます:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
 <SitecoreWebUrl>https://cm.dockerexamples.localhost</SitecoreWebUrl>
 <SitecoreDeployFolder>..\\..\\docker\\deploy</SitecoreDeployFolder>
 <InstallSitecoreConnector>True</InstallSitecoreConnector>
 <EnableContainerDeployment>True</EnableContainerDeployment>
 <!-- Your access GUID here: -->
 <SitecoreAccessGuid>00000000-0000-0000-0000-000000000000</SitecoreAccessGuid>
 </PropertyGroup>
</Project>

![Setting options in TDS.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/TDS-Container-Configuration.png)
## ユニコーンの設定

> !重要UnicornはSitecoreサポートによってサポートされていないサードパーティ製のオープンソースツールです。これらの指示は、Unicornユーザーの便宜を図るためのあくまでガイドとして提供されています。

[Unicorn](https://github.com/SitecoreUnicorn/Unicorn)はSitecoreプラットフォームと連携して進行中で動作し、ファイルシステムから直接アイテムをプッシュ・プルします。開発中は [、バインドマウント](https://docs.docker.com/storage/bind-mounts/) を使ってUnicorn(CMコンテナ内で動作)がソリューションのソースコード内のシリアライズされたアイテムを更新できるようにします。

[Helix。GitHubのサンプルリポジトリ](https://github.com/Sitecore/Helix.Examples)には完全な例が含まれています。

### シリアルアイテムをマウントする

通常、Sitecore構成でUnicorn syncに使うベースファイルシステムパスを「sourceFolder」というsc.variableで設定します。この値は環境変数から入力できます:

<sc.variable name="sourceFolder" value="$(env:ITEM\_SYNC\_LOCATION)" />

ビルド時にすでにシリアル化されたアイテムをCMコンテナにコピーしているなら、そのパスを設定する際に使う環境変数と同じでなければなりません。開発時に、docker-compose.override.yml内の環境変数を、ソリューションからマウントしたパスに設定できます:

cm:
 ...
 environment:
 ITEM\_SYNC\_LOCATION: c:\\items-mounted
 volumes:
 - ${LOCAL\_ITEM\_PATH}:c:\\items-mounted

その後、.envファイルで設定されたLOCAL\_ITEM\_PATH変数を、解のUnicornアイテムルートの相対パスに設定できます:

LOCAL\_ITEM\_PATH=.\\src

設定されると、コンテンツエディター内のUnicorn通知はCMコンテナ内のアイテムのパスを表示しますが、それらのアイテムの変更はコンテナホスト(開発環境)のファイルシステムにも反映されます。

![The Content Editor.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/Unicorn-Content-Editor-Notification.png)

### 透過同期の設定

Unicornの[Transparent sync](https://kamsar.net/index.php/2015/10/Unicorn-Introducing-Transparent-Sync/)は、例えば機能ブランチを切り替えたり、ソース管理から最新を取得したりする際に、明示的にプッシュする必要がなく、シリアライズされたアイテムを扱うことを可能にします。ただし、本番環境などではこの機能を無効にしたいかもしれません。

この場合も環境変数を使ってUnicornを設定できます:

<unicorn role:require="Standalone or ContentManagement">
 <defaults>
 <dataProviderConfiguration set:enableTransparentSync="$(env:UNICORN\_ENABLE\_TRANSPARENT\_SYNC)" />
 </defaults>
</unicorn>

この値はdocker-compose.override.ymlで設定でき、.env:

cm:
 ...
 environment:
 UNICORN\_ENABLE\_TRANSPARENT\_SYNC: ${UNICORN\_ENABLE\_TRANSPARENT\_SYNC}

UNICORN\_ENABLE\_TRANSPARENT\_SYNC=true