こんにちは、Sitecore技術担当の蛭川です。
Sitecoreでは同階層に大量のアイテムが存在すると、コンテンツツリーが非常に重くなることがあります。その問題を解消し、パフォーマンスの低下を防ぎながら大量のアイテムを管理できる「バケット」という機能が存在します。 バケットはアイテムを自動で階層化し、コンテンツツリー上に表示するアイテムを非表示にすることで、パフォーマンスの低下を防ぎます。
バケットの使い方
バケット化の方法
まず、バケットを使わない通常の状態から見てみます。Productフォルダの下に製品アイテムが10個あります。今はまだ製品数が多くありませんが今後徐々に増加し、みるみるうちにコンテンツツリーが重く、フォルダ内が混沌とすることが想定されます。
ここでバケットの出番です。バケットは、既に作成済みのアイテムに対しても簡単に導入することができます。
バケット化したいアイテムのテンプレートのスタンダードバリューにて、[アイテムバケット]セクションの[バケット化を許可]フィールドにチェックを入れます。
バケット化したいアイテムを含むフォルダを選択し、リボンの[設定] > [アイテム バケットに変換]をクリックするとアイテムがバケット化されます。 フォルダを開くと10件あったアイテムが非表示になり、下図のような表示に変化します。
リボンの[表示] > [バケット]にチェックを入れると、階層化された状態を見ることができます。
[バケット化を許可]フィールドにチェックしたテンプレートを使用し、バケット化したフォルダ配下にアイテムを作成すると、次からは自動で階層化されます。また、バケット化を許可していないアイテムも同時に保持することも可能です。
階層構造を持つアイテムをバケット化したい場合は、バケット化したいアイテムのテンプレートのスタンダードバリューにて、[アイテムバケット]セクションの[階層構造を維持してバケット管理を行わない]フィールドにチェックを入れる必要があります。
ルールの設定
先程は特にルールを設定せずにバケット化を行ったため、デフォルトのルールでフォルダ分けされました。デフォルトのルールはSitecore.Buckets.config
の中に設定されています。
<setting name="BucketConfiguration.BucketFolderPath" value="yyyy\/MM\/dd\/HH\/mm"/>
このconfigのルールを書き換えるのではなく、Sitecore上の設定アイテムから別のルールを設定することができます。
設定を行うアイテムは通常のSitecoreとSXAで異なります。
- 通常:/sitecore/system/Settings/Buckets/Item Buckets Settings
- SXA:/sitecore/content/【テナントフォルダ名】/【テナント名】/【サイト名】/Settings
上記設定アイテムの[設定]セクションに[バケット フォルダー Path を解決するためのルール]フィールドがあるので、ここからルールを追加します。
バケット化したアイテムの検索
バケット化されたアイテムは、複数フォルダに階層化されており使い勝手が悪そうにも見えます。
この中から目的のアイテムを探すのは恐らくとても面倒です。
Sitecoreによると、バケット化したアイテムは「Sitecore検索機能」を使って検索することを想定しているとのことです。
バケット化したフォルダの[検索]タブを開くと、検索フィルターを使ってバケット内のアイテムを検索できます。検索対象はバケット化したアイテムと通常アイテムを含むフォルダ以下全てのアイテムとなります。
検索で絞り込んだアイテムに対して、一括で以下の操作を行うことができます。
- タグの追加
- 検索と置換
- クローンの作成
- コピー
- 削除
- パブリッシュ など
タグを使った検索
検索フィルターには「タグを指定して検索」というものがあります。これはアイテム側にタグを設定しておくと、同じタグが設定されたアイテムだけを検索で絞り込むことができる機能です(コンテンツエディター上においてのみ)。
数百万単位でのアイテムが存在する場合は、タグでの検索が一番高速となります。
新しくタグを追加する場合は、以下を右クリックして挿入オプションから「タグ」を追加します。/sitecore/system/Settings/Buckets/TagRepository
バケット化したアイテムの[タグ]セクション > [セマンティクス]フィールドからタグを追加するか、検索で絞り込んだアイテムに対して一括でタグの追加を行います。これでタグを使った検索ができるようになります。
バケット化のメリット・デメリット
バケット化するとコンテンツツリー表示時のパフォーマンス低下を防ぎながら、大量のコンテンツを管理することが可能になります。その代わり、アイテムに到達する手段が「Sitecore検索機能」となるため、"ツリーを手で展開してアイテムを編集する"という従来の使い方は出来なくなる(完全に不可能ではありませんが非常に煩雑)と考えた方が良さそうです。 Sitecoreのドキュメントには以下のように記載されているため、階層で管理する必要があるアイテムを保存することには向いていないと考えられます。
アイテム バケット機能は、主に階層的に保存する必要のないコンテンツ アイテムを保存するために設計されています。
上記のようなデメリットもあるので、導入する場合は検索方法も含めて要件を満たすことができるか、慎重に考える必要があります。
おわりに
デメリットも存在しますが、例えば以下のような場合にバケットを使うと恩恵を受けられるのではないかと考えています。
- 日次バッチのデータ連携で取り込むマスターアイテムなど、人の手による編集を想定していない大量のアイテムを管理したい場合
- 今後編集予定のない大量の記事をアーカイブとして保存しておきたい場合
Sitecore検索機能を併せて使いこなせば、より便利にアイテムを管理することが出来るので、状況に応じてバケットを使用してみて下さい。