【ITニュース解説】Getting fields from a "linked" Sitecore rendering parameter - good news, bad news
2025年09月20日に「Dev.to」が公開したITニュース「Getting fields from a "linked" Sitecore rendering parameter - good news, bad news」について初心者にもわかりやすく解説しています。
ITニュース概要
Sitecoreで、表示部品の設定に外部データを使う際、通常はIDしか受け取れない。特定設定を有効にすれば表示名などが得られるが、今度はIDが取れなくなる問題がある。この設定は全ての表示部品に影響するため、使い方に注意が必要だ。
ITニュース解説
Webサイトの構築にはCMS(コンテンツ管理システム)が広く使われている。コンテンツの作成から公開までを効率的に管理できるため、多くの企業が利用している。Sitecoreもその一つで、高度な機能を持つCMSとして知られている。Webページは通常、様々な部品、つまりコンポーネントで構成されており、これらのコンポーネントの動作は「レンダリングパラメータ」と呼ばれる設定値によって細かく制御できる。レンダリングパラメータは、コンポーネントに渡す設定シートのようなもので、例えば「この検索コンポーネントでは、特定のカテゴリの商品だけを表示する」といった指示を出すときに利用される。
あるプロジェクトで、Sitecoreが提供する検索機能を使ってWebサイトの検索結果を表示するコンポーネントがあった。このコンポーネントでは、顧客の要望に応じて、表示する検索結果を特定のフィールドの値で絞り込みたいという要件が発生した。例えば、「カテゴリ」というフィールドが「テクノロジー」という値を持つアイテムだけを表示するといった具体的な条件で絞り込む必要がある。
この絞り込み条件(「カテゴリ」のようなキーと、「テクノロジー」のような値)は、Sitecoreのシステム内にあらかじめ登録されている分類データ(タクソノミー)を利用することにした。そして、これらのキーと値をレンダリングパラメータとしてコンポーネントに渡すために、「ドロップリンク」という特別なフィールドタイプを選択した。ドロップリンクは、Sitecore内の他のデータ項目(アイテム)への参照を保持する機能だ。このフィールドタイプを選ぶことにはメリットがある。参照先のデータ項目がシステム内で移動したり名前が変わったりしても、ドロップリンクは常に正しい参照を追跡し続けるため、データの一貫性を保ちやすい。
しかし、ここで一つの問題に直面した。レンダリングパラメータとしてドロップリンクフィールドの値をコンポーネントに渡そうとした際、デフォルトでは参照先のデータ項目そのものではなく、その「ID」しか取得できなかったのだ。Sitecoreの検索機能は通常、絞り込み条件として「テクノロジー」のような具体的なテキスト値を期待する。ところが、渡されるのは意味不明な文字列の「ID」だけでは、どのカテゴリを指すのか検索機能が直接判断できない。つまり、コンポーネントが本当に必要としているのはテキスト値なのに、システムからはIDしか提供されないというミスマッチが発生したのである。
この問題を解決するために、SitecoreにはLayoutService.DetailedRenderingParamsという特別な設定が存在することが分かった。この設定をtrue(有効)にすることで、レンダリングパラメータとして出力されるドロップリンクの値が、IDではなく参照先のデータ項目から抽出された具体的な「テキスト値」として表示されるようになった。これにより、検索機能が期待するテキスト値を直接コンポーネントに渡せるようになり、一見すると問題は解決したかに見えた。簡単にマッピングできるようになったことで、開発はスムーズに進むと思われた。
ところが、この設定変更が新たな課題を生むことになった。LayoutService.DetailedRenderingParamsをtrueにすると、確かにテキスト値は取得できるようになったものの、今度は参照先の「ID」自体がレンダリングパラメータから取得できなくなってしまったのだ。さらに、参照先のデータ項目の「名前」や「パス」といった情報も、この設定では同時に取得することはできなかった。別のシナリオでは、レンダリングパラメータで受け取ったドロップリンクのIDを、別の外部システムへのAPI呼び出しに利用する必要があったため、IDが取得できなくなったことは非常に不都合だった。テキスト値とIDの両方が必要な場合、現状ではどちらか一方しか取得できないというジレンマに陥ってしまったのである。
筆者は、IDが必要な別のシナリオを優先せざるを得ず、一時的にフィールドタイプを、IDとテキストの両方を扱える別のもの(例えば、選択肢が限定された「ドロップリスト」と自由な文字列を入力できる「テキストフィールド」の組み合わせ)に変更することで対応した。この状況は理想的とは言えないため、将来的にはこれらの基本的な情報(ID、名前、パス、具体的なテキスト値)がレンダリングパラメータとして同時に取得できるようになることを期待し、Sitecoreの機能改善を要望している。
このLayoutService.DetailedRenderingParamsの設定をtrueにする際には、重要な注意点がある。この設定は、システム全体、つまりすべてのレンダリングパラメータに影響が及ぶのだ。特に「ドロップリンク」や「ツリーリンク」といった、他のデータ項目を参照するタイプのフィールドをレンダリングパラメータとして既に使っている箇所は、その値の取得方法がIDからテキスト値に変わってしまうため、既存の実装が正しく動作するかどうか、徹底的な「回帰テスト」を行う必要がある。予期せぬ不具合を防ぐためにも、広範囲な影響を考慮し、慎重な検証が不可欠だ。また、将来的にIDも取得できるようになるとしても、単純にパラメータの値を取得するだけでなく、データ構造を理解し、取得したIDやテキスト値を適切なデータモデルにマッピングするなどの対応が引き続き求められるだろう。