---
title: "Experience Edgeスキーマ"
slug: "the-experience-edge-schema"
abstract: "エントリポイント、エンドポイント、テンプレート定義について詳しく学びましょう。"
---
# Experience Edgeスキーマ

Sitecore Experience EdgeはヘッドレスSitecore開発の一般的なフロントエンドユースケースに対応するために、読み取り専用のGraphQLスキーマを持っています。Sitecore項目に関する限定的な情報を公開します。例えば、標準フィールドは利用できません。

以下のクエリがエントリーポイントとして利用可能です:

-   item - パスやIDでアイテムを照会できる。
-   layout - 通常は、そのレイアウトサービスJSONにアクセスする目的で、サイトやルートパスでアイテムを照会できます(rendered)。
-   search - フィールド値や共通プロパティでアイテムを見つけるためのブールフィールド検索クエリの構築が可能です。

詳細については、[例クエリ](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/query-examples.html "Query examples") をご参照し、プレビューエンドポイントIDEのGraphQLテスト用UI内の**Docs**タブをご利用ください。

## テンプレート投影

Experience Edgeスキーマで利用可能なタイプは、公開されたSitecoreインスタンスのテンプレート定義を反映しています。特定のタイプからフィールドを選択するインラインフラグメントを使用することで、強力型テンプレートフィールドを有効にすることができます。

Sitecoreでは、複数のテンプレートが同じ名前を持ち、項目グラフのコアフィールドと競合するフィールド名を持つテンプレートも可能です。GraphQLでは、型とフィールドの名前は一意でなければなりません。命名の衝突が発生した場合、最新の作成日を持つ項目またはフィールド項目が名前に付加 \_{guid} されます。作成日が使われるのは順序が安定している必要があり、グラフタイプ名は参照後に決して変更されてはならないからです。

> !注GraphQL型はHelixのコンテンツ構造に従うテンプレートのみに作成されます。つまり、GraphQL型は以下のルートのテンプレートに対してのみ生成されます。
> 
> -   <foundation>/sitecore/templates/Foundation</foundation>
>     
> -   <feature>/sitecore/templates/Feature</feature>
>     
> -   <project>/sitecore/templates/Project</project>
>     
> -   <userdefined>/sitecore/templates/User Defined</userdefined>
>     

## ページ分け

検索クエリのようなページ分け付きクエリやExperience Edgeスキーマ内のフィールドは、カーソルベースのシステムを使って結果ページを要求します。

ページ付きクエリの場合:

-   クエリの引数にはfirst (返す結果数)とafter (最初のカーソル)が含まれます。 firstのデフォルト値は10です。
    
-   クエリ結果には、hasNext(結果が複数あるかどうか)とendCursor(次のページを得るために使われる)を含むpageInfoが含まれます。
    
-   クエリ結果にはtotal (利用可能な結果の総数を示す)も含まれます。
    
    > !注最初の引数は、Previewスキーマの基盤となるGraphQLライブラリで使われる複雑度計算をクエリする特別な意味を持ちます。特に、Itemグラフタイプのネストされたchildrenフィールドを使用すると、*Queryが実行するには複雑すぎる*というエラーを引き起こすことがあります。以下のセクションでは、クエリ複雑性の扱いに関する推奨事項を含みます。
    

## クエリ複雑性

Experience Edgeのクエリ複雑度は250に制限されています。クエリを実行時環境で使用する前にテストし、複雑さの要件を満たしているか確認することをお勧めします。クエリが複雑すぎる場合は、以下の方法を試してください:

-   複数の小さなクエリに分割します。例えば、1つのクエリでデータセットを取得し、その後のクエリをそのデータセットに適用します。複数のオブジェクトの大規模なクエリはクエリの複雑さを大幅に増加させます。
-   クエリから不要なフィールドを削除してください。

## コンテンツ検索用の利用可能なフィールド

Experience Edgeでは、以下の表に記載されている特殊フィールドに対してGraphQL searchクエリを使用できます。テンプレートにクエリを出す際は、ユーザー定義フィールドと以下の特殊フィールドのみをクエリできます。例えば、サンプルアイテムテンプレートのユーザー定義titleフィールドはクエリできますが、\_Sortorderはできません。

フィールド

概要

\_templates

すべてのテンプレートGUIDを含み、ベーステンプレートも含まれます。階層内でテンプレートを使用するすべてのアイテムを見つけるために使用できます。

\_path

親項目を含み、GUIDによってアイテムの子孫を取得するために使用できます。例えば、contains 節と /home パスのIDを使うと、結果には /home とその子(例: /home/about\_us)が含まれます。

\_parent

そのアイテムの直系親のIDです。

\_name

アイテム名。

\_language

アイテムの言語。

\_hasLayout

アイテムにプレゼンテーションの詳細やレイアウトデータがあるかどうかを示します。

### Search演算子の挙動

searchクエリは以下の演算子をサポートしています。

> !注Searchオペレーターの挙動は、DeliveryエンドポイントかPreviewエンドポイント(トークン化された検索インデックスを使用する)かによって異なります。

-   **EQ (Equals)** - 値が完全に一致するユーザー定義フィールドのみをマッチングします。
    
    -   **Deliveryエンドポイント**では、この演算子は完全に一致するユーザー定義フィールドのみをマッチングします。フィールド全体が検索値と完全に一致しなければならず、部分的なマッチングは返されません。
        
        例えば、EQ演算子で*ipsum*を検索しても*、lorem ipsum dolor sit amet*を含むフィールドにはマッチしませんが、ipsumの値が正確に*ipsum*であるフィールドにはマッチします。
        
    -   **プレビューエンドポイント**では、Solr検索インデックスのすべてのテキストフィールドがデフォルトでトークン化されているため、テキストフィールドのCONTAINS演算子として機能します。つまり、完全に一致すると予想されても複数の結果を返すことがあります。
        
        例えば、EQ演算子で*ipsum*を検索すると、*lorem ipsum dolor sit amet*を含むフィールドの結果が返ってくることがあります。
        
        プレビューエンドポイントのEQと**正確に一致**させるために、SearchQueryFieldMapping機能を使ってトークン化されたフィールドを非トークン化された計算フィールドにマッピングしてください。関連するサポート記事も参照[KB1003665](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003665)。
        
    
    正確な全フィールドマッチングが必要な場合はこの演算子を使いましょうが、プレビューエンドポイントでのトークン化動作には注意してください。
    
-   **CONTAINS** - フィールド内で部分文字列のマッチを行う。
    
    -   **Deliveryエンドポイント**では、トークン化やランキングなしでそのまま値がマッチングされます。
        
        例えば、CONTAINS演算子で*ipsum*を検索すると、テキスト内のどこかに値が現れる任意のフィールド(*例えばlorem ipsum dolor sit amet*)と一致します。
        
    -   プレビュー**エンドポイント**では、CONTAINSオペレーターがトークン化されたフィールド値に基づいて複数の結果を返すことができます。これはプレビューエンドポイントがトークン化された検索インデックスを使用しているためです。
        
    
    このオペレーターは部分的なテキストマッチや、フィールド内の単語やフレーズに基づくコンテンツのフィルタリングに使います。
    

> !注GraphQLの検索フィールドは、全文検索やサイト検索機能の実装ではなく、コンテンツのフィルタリング用に設計されています。より高度な検索機能を求めるなら、専用の検索サービスの利用を検討してください。

### Searchクエリの例

これはユーザー定義フィールド内のCONTAINS演算子を使ってアイテムを検索する例です:

query Search {
 search(
 where: {
 name: "title",
 value: "Sitecore",
 operator: CONTAINS
 }
 ) {
 results {
 id
 name
 }
 }
}

こちらはユーザー定義のフィールドで正確な一致を使ったアイテム検索の例です:

query Search {
 search(
 where: {
 name: "\_parent"
 value: "110D559FDEA542EA9C1C8A5DF7E70EF9"
 operator: EQ
 }
 ) {
 results {
 id
 name
 }
 }
}

以下は複数の節を組み合わせる例です:

query Search {
 search(
 where: {
 AND: 
 {
 name: "\_parent"
 value: "110D559FDEA542EA9C1C8A5DF7E70EF9"
 operator: EQ
 },
 {
 name: "title"
 value: "another"
 operator: CONTAINS
 }
 
 }
 ) {
 results {
 id
 name
 }
 }
}