XM Cloudで直接変更したアイテムをソースコード管理システムにあるシリアル化したアイテムに戻す

samatsu 4/26/2023 297 N/A Sitecore XMCloud

XM Cloudの開発をしている際、GitHub上で、開発系のアイテム(テンプレートやレンダリング定義など)をテキストにシリアル化して管理できます。GitHubのソースコードを使用してXM Cloudにアプリケーションをデプロイする際、xmcloud.build.json の deployItems プロパティを設定することで、そのアイテムをXM Cloud環境に復元してデプロイすることができます。ビルドのコンフィグレーションに関してはこちらを参照して下さい。

この手順には少し注意点があります。それは、アイテムのシリアル化はSerializationプラグインを使用して行われているのですが、XM Cloudにアイテムをデプロイする際、Items as Resources プラグインが使用されます。Serializationプラグインでデプロイされると思っていたのですがそうではないようです。このプラグインは何をするのかというと、Sitecoreの標準のアイテムが格納されている手法と同じファイルを作成してデプロイします。

これにより、XM Cloud環境上で同じアイテムが更新されていると、ソースコード管理システム上で管理された最新のアイテム情報がXM Cloudで利用されなくなるという動作になります。

この動きを理解するには、Sitecore 10.1以降、Sitecoreが標準のアイテムをどのように管理しているのかを理解する必要があります。

アイテムリソースファイルについて

Sitecore 10.1 以降、master , web, core データベース用の標準のアイテムはDB上にはなく、アイテムリソースファイル(Protocol Buffer形式) としてファイルシステム上にファイルとして保存されています。App_Data\itemsフォルダーの items.master.dat のようなファイルです。なので、コンテンツツリーに表示されているアイテムは、DBではなくリソースファイルに保存されたアイテムが表示、使用されます。このとき、もし標準のアイテムをコンテンツエディターなどで変更すると、リソースファイル内のアイテムの内容をコピーして、masterデータベースに更新された情報とともにアイテムの情報が保存されます。以降は、そのアイテムの情報はmasterデータベースから取得されるようになり、リソースファイルのデフォルトのアイテムの情報は利用されなくなります。

XM CloudにGitHub上のシリアル化されたアイテムをデプロイする場合もアイテムリソースファイルが作成されXM CloudのCMサーバーのインスタンスにファイルとしてアイテムがデプロイされるため、XM Cloud上で同じアイテムが更新されていると、リソースファイルのアイテムの情報は無視されことになり、結果的に開発環境での変更はXM Cloudのアイテムに反映されなくなるという動作をします。

これは、記事作成時点の動作なので将来変更される可能性があります。

XM Cloudで上書きしたアイテムをリソースファイルのデータにリセット

前置きが終わったので、XM Cloudで上書きしたアイテムをソースコード管理システムで管理されたシリアル化されたアイテムにリセットする方法について記載します。

XM Cloudで上書きされたアイテムを開発環境で変更した内容で上書きしたい場合は、 dotnet sitecore ser push -n <環境名> コマンドを直接ローカル環境からXM Cloudのインスタンスに対して実行することができます。シリアル化プラグインのコマンドについては、こちらを参照してください。

また、最近、新たに他の方法も利用できるようになりました。Item as Resourceプラグインが5.1.30以降(Sitecore.DevEx.Extensibility.ResourcePackage@5.1.30) の場合は、dotnet sitecore itemres cleanup -n <環境名> -force というコマンドも使用できるようになっています。このコマンドにより、リソースファイルに存在するアイテムがXM Cloud上で上書きされていた場合、そのアイテムの定義をリセット(DB上で削除)され、リソースファイルの内容が使用されるようになります。実際試す場合は、 -w オプションも使ってどのアイテムがリセットされるか確認して下さい。詳細はドキュメントを参照してください。 

XM Cloudのインスタンスでアイテムを更新すると、ソースコード管理システムのアイテムのデータで上書きできなくなる理由にたどり着くのにかなり時間がかかったので参考までに覚書を記載しました。