パッケージアイテムをインストールする際、インストール先とインストール元に同一のアイテムIDを持つアイテムが存在すると、アイテムの衝突が発生します。
先日 Sitecore のインストールウィザードでパッケージを適用する際、衝突回避オプションとして「上書き」を選択した結果既存のアイテムが意図せず消失する事象が発生しました。
この経験を踏まえ、本記事では「上書き」オプションがどのような挙動をするのかを改めて整理します。
インストールオプション
パッケージアイテムインストール時の衝突回避オプションは、以下の4種類が用意されています。
本記事では「上書き」のみ詳細に解説するため、他のオプションについては過去記事「アイテムパッケージインストール時のコンフリクト解消オプションについて」をご覧ください。
「上書き」の挙動について
「上書き」オプションでは、パッケージ内アイテムと同一の Item ID を持つアイテムが検出されると、既存のアイテムを一度削除した上で、パッケージ内のアイテムが再生成されます。
この削除処理により、対象アイテム配下に存在していたサブアイテムもすべて削除されます。
再生成時にパッケージ内に含まれていなかったアイテムは復元されず、そのまま失われます。
サンプルアイテムによる「上書き」動作の確認
例として、インストール前の状態(画像1)と、パッケージに含めたアイテム構成(画像2)を用意しました。
画像1(インストール前のアイテムツリー)
画像2(パッケージに含まれるアイテムツリー)
画像2では、Sample2 配下に Sample6 が追加されており、Sample3 は既存のままパッケージに含まれています。
一方、Sample4 配下には Sample7 が追加されていますが、Sample5 はパッケージには含まれていません。
画像1 のアイテムツリーに対して、画像2 の内容を含むパッケージをインストールし、衝突回避オプションとして「上書き」を選択します。
結果として、インストール後のアイテムツリーは画像3の状態となります。
画像3(インストール後のアイテムツリー)
インストール後は Sample6、Sample7 が新しく作成されており、パッケージに含まれていなかった Sample5 は削除されています。
このように、「上書き」オプションでは、パッケージに含まれていない既存アイテムは保持されず削除されることが確認できます。
「上書き」を選んでいいケース/ダメなケース
「上書き」は「結合」と異なり、パッケージに含まれていないサブアイテムは保持されません。
そのため、既存アイテムを保持したい場合は、基本的には「結合」オプションを選択することが望ましいと考えられます。
以下に、「上書き」を選択しても問題ないケースと、選択すると影響が大きくなる可能性があるケースをまとめました。
選んでいいケース
-
新規環境(初回セットアップ)
-
破棄前提の Local環境
-
完全に同一状態へ戻したい場合
選ぶと危険なケース
-
既に運用中の CM / CD
-
手動変更が入っている環境
-
「念のため更新」レベルの作業
まとめ
「上書き」オプションは、既存アイテムを保持したまま更新するためのものではなく、パッケージ内の定義を正とした状態へ置き換えるためのオプションです。
そのため、選択する際には「消えて困るものが存在しないか」を事前に確認する必要があります。
以下は、「上書き」オプションを選択する前に確認しておきたい主なポイントです。
-
対象アイテム配下に、サブアイテムが存在しないか
-
環境ごとに個別設定されている値(URL、ID、設定項目など)が含まれていないか
-
パッケージに含まれていないが、保持すべきアイテムが存在しないか
-
本番・検証環境など、既に運用されている環境ではないか
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。