---
title: "オーサリング操作のクエリ例"
slug: "query-examples-for-authoring-operations"
abstract: "GraphQLを使ってSitecoreアイテムを作成、更新、削除"
---
# オーサリング操作のクエリ例

以下のGraphQLタイプに対してクエリやミューテーションを用いてオーサリング操作を行うことができます:

-   アイテム
-   メディア
-   Search
-   遺跡
-   テンプレート

利用可能な種類や操作の完全なリストについては、GraphQL IDEの組み込みドキュメントを参照してください。

## Search criteria

以下のセクションでは、クエリに適用できる検索条件について説明します。

### 正確な{ .notintoc }

検索基準はクエリ語の正確な一致です。例えば、「apple」と検索すると、正確な値が「apple」である結果のみが返ってきます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_group",
 "value": "227473f1dc3f4d3a8558865f49b4f64f",
 "criteriaType": "EXACT"
 }
 
 }
 }
}

### StartsWith { .notintoc }

指定された検索基準で始まるフィールド値を返します。例えば、「app」で検索すると「apple」と「application」の両方が返されます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_group",
 "value": "227473f1dc3f4d3a8558",
 "criteriaType": "STARTSWITH"
 }
 
 }
 }
}

### { .notintoc } を含みます

指定された検索基準を含むフィールド値を返します。例えば、「app」で検索すると「apple」「application」「happen」が返されます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_group",
 "value": "c3f4d3a8558",
 "criteriaType": "CONTAINS"
 }
 
 }
 }
}

### EndsWith { .notintoc }

指定された検索基準で終わるフィールド値を返します。例えば、「ple」を検索すると「apple」と「maple」の両方が返されます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_group",
 "value": "65f49b4f64f",
 "criteriaType": "ENDSWITH"
 }
 
 }
 }
}

### ワイルドカード { .notintoc }

検索基準にワイルドカードを含めます。例えば、「a\*e」で検索すると「apple」と「angle」の両方が返されます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_group",
 "value": "227\*f64f",
 "criteriaType": "WILDCARD"
 }
 
 }
 }
}

### Search { .notintoc }

値内の全文フレーズを検索します。例えば、「apple pie」で検索すると、「We made apple pie」の値が返ってきます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_name",
 "value": "Unlock",
 "criteriaType": "SEARCH"
 }
 
 }
 }
}

### レンジ { .notintoc }

数値および日付フィールドの値の範囲を検索します。例えば、1から5までの任意の値を検索できます。この基準を適用する際には、括弧内にクエリ範囲を定義する文字列であるvalueも入力してください。 valueを入力する際には、以下の点に注意してください。

-   括弧の種類によって範囲が包括的か排他的かが決まります。正角括弧は包含範囲を示し、丸括弧は排他的範囲を示します。例えば、1つのクエリで括弧タイプを混ぜることができます。例えば、値が 10 TO 20)なら10は含み、20は除外します。
-   文字列 TO で最小値と最も高い値を分けます(大文字を区別)。
-   制限のない値(上限も制限もない)を示すにはアスタリスク\*を付けます。例えば、値が (10 TO \*)の場合、10は除外され、上限はありません。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_\_boost",
 "value": "1 TO 5",
 "criteriaType": "RANGE"
 }
 
 }
 }
}

### Fuzzy { .notintoc }

検索語に似たマッチを見つけるために使われ、誤字や綴りの違いなどの細かな違いを許容します。類似度parameters (0と1の間の値)を用いて、マッチングが検索語にどれだけ近いかを判断します。値が高いほど、より厳密なマッチングが行われます。例えば、類似度パラメータが0.8の「example」を検索すると「exampel」や「exmple」が一致することがあります。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_name",
 "value": "secuty",
 "criteriaType": "FUZZY",
 "parameters": "0.5"
 }
 
 }
 }
}

### Proximity { .notintoc }

検索語が他の単語で区切られている可能性のある文書を見つけるために使われます。分離語の数はparametersで示されます。例えば、「apple pie」を近接パラメータ5で検索すると「apple is not a pie」が返ってきます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_name",
 "value": "collection",
 "criteriaType": "PROXIMITY",
 "parameters": "0"
 }
 
 }
 }
}

### RegEx { .notintoc }

正則表現(RegEx)を適用する検索語。例えば、「a.\*e$」で検索すると「apple」と「angle」が返ってきます。

{
 "model": {
 "index": "sitecore\_master\_index",
 "searchStatement": {
 "criteria": 
 {
 "field": "\_name",
 "value": "\\\\w\*configuration",
 "criteriaType": "REGEXP"
 }
 
 }
 }
}

## クエリの例

以下のセクションでは、オーサリング操作の例となるクエリを紹介します。

### アイテム

#### アイテムを作成してください { .notintoc }

createItem変異を持つアイテムを作成できます。

##### クエリ { .notintoc }

mutation {
  createItem(
    input: {
      name: "Sitecore Authoring and Management API"
      templateId: "{76036F5E-CBCE-46D1-AF0A-4143F9B557AA}"
      parent: "{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}"
      language: "en"
      fields: 
        { name: "title", value: "Welcome to Sitecore" }
        { name: "text", value: "Welcome to Sitecore" }
      
    }
  ) {
    item {
      itemId
      name
      path
      fields(ownFields: true, excludeStandardFields: true) {
        nodes {
          name
          value
        }
      }
    }
  }
}

##### 結果 { .notintoc }

{
  "data": {
    "createItem": {
      "item": {
        "itemId": "30a8616da7c6411db307d4f2c9684e76",
        "name": "Sitecore Authoring and Management API",
        "path": "/sitecore/content/Home/Sitecore Authoring and Management API",
        "fields": {
          "nodes": 
            {
              "name": "Text",
              "value": "Welcome to Sitecore"
            },
            {
              "name": "Title",
              "value": "Welcome to Sitecore"
            }
          
        }
      }
    }
  }
}

#### アイテムを削除してください { .notintoc }

deleteItemミューテーションを使ってアイテムを削除できます。アイテムIDまたはパスを指定することができます。両方指定するとパスパラメータは無視されます。リクエスト入力でpermanentlyパラメータ値をtrueに設定することで、永久削除をリクエストできます。

##### クエリ { .notintoc }

mutation {
  deleteItem( input: { 
      path: "/sitecore/content/Home/Sitecore Authoring and Management API"
      permanently: true
    }
  ) {
    successful
  }
}

##### 結果 { .notintoc }

{
  "data": {
    "deleteItem": {
      "successful": true
    }
  }
}

#### アイテムを入手してください { .notintoc }

itemクエリを使ってアイテムを取得することができます。このクエリは、サポートされている識別子引数(例えばitemId)に基づいて単一のアイテムを取得します。

##### クエリ { .notintoc }

query {
 item(
 where: {
 database: "master",
 itemId: "{A58AAB49-FE07-4GT5-B03F-927C581E74D7}"
 }){
 itemId
 name
 path
 fields(ownFields: true, excludeStandardFields: true) {
 nodes {
 name
 value
 }
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "item": {
 "itemId": "a58aab49fe074gt5b03f927c581e74d7",
 "name": "Sitecore Authoring and Management API",
 "path": "/sitecore/content/Home/Sitecore Authoring and Management API",
 "fields": {
 "nodes": 
 {
 "name": "Text",
 "value": "Welcome to Sitecore"
 },
 {
 "name": "Title",
 "value": "Welcome to Sitecore"
 }
 
 }
 }
 }
}

### アイテムの更新

updateItemミューテーションを使ってアイテムフィールドを更新できます。

#### クエリ

mutation {
 updateItem(
 input: {
 fields: 
 { name: "Title", value: "My new page", reset: false }
 { name: "Content", value: "Lorem Ipsum", reset: false }
 
 database: "master"
 itemId: "{59C9BA60-6483-451C-A435-B60BED2DBA75}"
 language: "en"
 path: "/sitecore/content/mycollection/mysite/Home/PageTest"
 version: 1
 }
 ) {
 item {
 name
 itemId
 fields(ownFields: true) {
 nodes {
 name
 value
 }
 }
 }
 }
}

#### 結果

{
 "data": {
 "updateItem": {
 "item": {
 "name": "PageTest",
 "itemId": "59c9ba606483451ca435b60bed2dba75",
 "fields": {
 "nodes": 
 {
 "name": "Title",
 "value": "My new page"
 },
 {
 "name": "Content",
 "value": "Lorem Ipsum"
 }
 
 }
 }
 }
 }
}

### アイテムをコピーする

copyItem突然変異を使って既存のアイテムのコピーを作成できます。

#### クエリ

mutation {
 copyItem(
 input: {
 itemId: "{SOURCE\_ITEM\_ID}"
 targetParentId: "{TARGET\_PARENT\_ITEM\_ID}"
 copyItemName: "Copied Sample Item"
 }
 ) {
 item {
 itemId
 name
 path
 parent {
 itemId
 path
 }
 }
 }
}

#### 結果

{
 "data": {
 "copyItem": {
 "item": {
 "itemId": "ad15387ecce14faabf27866ec06fe045",
 "name": "Copied Sample Item",
 "path": "/sitecore/content/Home/Copied Sample Item",
 "parent": {
 "itemId": "110d559fdea542ea9c1c8a5df7e70ef9",
 "path": "/sitecore/content/Home"
 }
 }
 }
 },
 "extensions": {}
}

### テンプレート

#### テンプレート項目を作成 { .notintoc }

createItemTemplateミューテーションを使ってアイテムテンプレートを作成できます。

##### クエリ { .notintoc }

mutation {
  createItemTemplate(
    input: {
      name: "NewTemplate"
      parent: "{B29EE504-861C-492F-95A3-0D890B6FCA09}"
      sections: {
        # Create a new template section if the ID is empty, otherwise update the template section
        name: "newSection"
        fields: 
          # Create a new template field if the ID is empty, otherwise update the template field
          { name: "Field 1", type: "Single-Line Text" }
          { name: "Field 2", type: "Rich Text" }
        
      }
    }
  ) {
    itemTemplate {
      name
      ownFields {
        nodes {
          name
          type
        }
      }
    }
  }
}

##### 結果 { .notintoc }

{
  "data": {
    "createItemTemplate": {
      "itemTemplate": {
        "name": "NewTemplate",
        "ownFields": {
          "nodes": 
            {
              "name": "Field 1",
              "type": "Single-Line Text"
            },
            {
              "name": "Field 2",
              "type": "Rich Text"
            }
          
        }
      }
    }
  }
}

#### テンプレート項目とそのフィールドを更新してください { .notintoc }

updateItemTemplateミューテーションを使ってアイテムテンプレートを更新できます。

##### クエリ { .notintoc }

mutation {
  updateItemTemplate(
    input: {
      templateId: "{A597BE8E-3DD6-483F-B474-A18AF0560E89}"
      name: "UpdatedTemplate"
      sections: 
        {
          # Create a new template section if the ID is empty, otherwise update the template section
          templateSectionId: "{C8076CA2-FDDE-423C-A819-B6C7573B3FF2}"
          name: "Updated Section 1"
          fields: 
            {
              # Create a new template field if the ID is empty, otherwise update the template field
              fieldId: "{59B88198-5C5B-4E64-A051-3D5ADD003884}"
              name: "Updated Field 1"
            }
            { name: "Create New Field", type: "Single-Line Text" }
          
        }
        { name: "Create New Section 2" }
      
    }
  ) {
    itemTemplate {
      name
      ownFields {
        nodes {
          name
          type
        }
      }
    }
  }
}

##### 結果 { .notintoc }

{
  "data": {
    "updateItemTemplate": {
      "itemTemplate": {
        "name": "UpdatedTemplate",
        "ownFields": {
          "nodes": 
            {
              "name": "Updated Field 1",
              "type": "Single-Line Text"
            },
            {
              "name": "Field 2",
              "type": "Rich Text"
            },
            {
              "name": "Create New Field",
              "type": " Single-Line Text "
            }
          
        }
      }
    }
  }
}

### メディア

#### Upload media { .notintoc }

uploadMediaミューテーションを使って事前署名されたアップロードURLを取得することができます。事前に署名されたアップロードURLを使ってメディアファイルをSitecoreにアップロードします。

##### クエリ { .notintoc }

mutation
{
  # The itemPath parameter should not include the Sitecore media library obsolete path
  # The media item name should be included in the itemPath
  uploadMedia(input: { itemPath: "Default Website/new media" }) {
    presignedUploadUrl
  }
}

##### 結果 { .notintoc }

{
  "data": {
    "uploadMedia": {
      "presignedUploadUrl": "https://xmcloudcm.localhost/sitecore/api/v1/authoring/media/upload?token=dFh6hm\_yH2DrUppd2v7zAU4kvIHk7CgMsXgg2ieaeQzKCU7v7q\_W\_L9mBY7wGyPw0"
    }
  }
}

> !注**XM Cloudは現在SitecoreAIです**エンジニアリング資産が更新されている間、一部のコード例、画像、UIラベルは引き続きXM Cloudを使用する場合があります。

> !注事前署名されたアップロードURLのクエリで「 *指定されたキーはこのアルゴリズムの有効なサイズでない*」というエラーが返された場合、GraphQL.UploadMediaOptions.EncryptionKey設定に値があるか確認してください。例えば:
> 
> もし合わなければ、設定しなければなりません。

レスポンスから事前署名済みのアップロードURLを取得したら、POSTリクエストを送ってメディアファイルをSitecoreにアップロードできます。

例えば、curlクライアントを使うと:

curl --request POST "https://<your\_server>/sitecore/api/v1/authoring/media/upload?token=dFh6hm\_yH2DrUppd2v7zAU4kvIHk7CgMsXgg2ieaeQzKCU7v7q\_W\_L9mBY7wGyPw0"
--header "Authorization: Bearer <JWT\_TOKEN>" --form =@<path\_to\_your\_file>

リクエストへの応答は、メディアアイテムのID、名前、そして成功したメディアアップロード時のフルパスを含むJSON形式の応答です。

### 遺跡

#### 設定済みのサイト{ .notintoc}を入手してください

特定のサイトについて、そのサイトの名前で情報を検索することができます。

##### クエリ { .notintoc }

query {
  site(siteName: "website") {
    name
    domain
    rootPath
    startPath
    browserTitle
    cacheHtml
    cacheMedia
    enablePreview
  }
}

##### 結果 { .notintoc }

{
"data": {   
 "site": {     
 "name": "website",     
 "domain": "extranet",    
 "rootPath": "/sitecore/content",     
 "startPath": "/home",     
 "browserTitle": "Website - Sitecore",     
 "cacheHtml": true,     
 "cacheMedia": true,     
 "enablePreview": true   
 }
 }
}

### Search

#### Searchは特定のパス{ .notintoc }

searchクエリを使ってすべての項目を検索できます。示した例に加えて、\_name、\_template、\_templatenameなどのシステムフィールドもクエリに利用できます。

##### クエリ { .notintoc }

query {
  search(
    query: {
      index: "sitecore\_master\_index"
      searchStatement: {
        criteria: 
          { criteriaType: SEARCH, field: "Title", value: "sample item" }
          {
            operator: MUST
            field: "\_path"
            value: "110d559fdea542ea9c1c8a5df7e70ef9"
          }
        
      }
    }
  )
 {
    results {
      innerItem {
        path
        field(name: "Title") {
          value
        }
      }
    }
  }
}

##### 結果 { .notintoc }

{  "data": {
    "search": {
      "results": 
        {
          "innerItem": {
            "path": "/sitecore/content/Home/Sample Item1",
            "field": {
              "value": "Sample Item1"
            }
          }
        },
        {
          "innerItem": {
            "path": "/sitecore/content/Home/Sample Item2",
            "field": {
              "value": "Sample Item2"
            }
          }
        }
      
    }
  }
}

#### 検索結果を作成日{ .notintoc}で並べ替え

検索結果はフィールド値でソートできます。

##### クエリ { .notintoc }

query {
 search(
 query: {
 index: "sitecore\_master\_index"
 sort: { field: "\_\_smallcreateddate", direction: DESCENDING }
 searchStatement: {
 criteria: 
 {
 operator: MUST
 field: "\_template"
 value: "76036f5ecbce46d1af0a4143f9b557aa" # Sample Item template ID
 }
 
 }
 }
 ) {
 results {
 innerItem {
 name
 path
 field(name: "\_\_Created") {
 value
 }
 }
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "search": {
 "results": 
 {
 "innerItem": {
 "name": "NewestItem",
 "path": "/sitecore/content/Home/NewestItem",
 "field": {
 "value": "20241114T120709Z"
 }
 }
 },
 {
 "innerItem": {
 "name": "OldItem",
 "path": "/sitecore/content/Home/OldItem",
 "field": {
 "value": "20230512T110132Z"
 }
 }
 }
 
 }
 }
}

#### 検索結果をページング { .notintoc } で設定してください

デフォルトではクエリは最初の10個の検索結果を返します。ページングパラメータを追加することでこれを変更することができます。

そのためには、以下のパラメータを使用します。

-   pageSize - ページあたりの結果数。
-   skip - スキップすべき結果の数。
-   pageIndex - 検索結果ページのインデックス名を返す。

##### クエリ { .notintoc }

query {
 search(
 query: {
 index: "sitecore\_master\_index"
 paging: { pageSize: 3, skip: 0, pageIndex: 0 }
 searchStatement: {
 criteria: 
 {
 operator: MUST
 field: "\_template"
 value: "76036f5ecbce46d1af0a4143f9b557aa" # Sample Item template ID
 }
 
 }
 }
 ) {
 results {
 innerItem {
 name
 path
 }
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "search": {
 "results": 
 {
 "innerItem": {
 "name": "One",
 "path": "/sitecore/content/Home/One"
 }
 },
 {
 "innerItem": {
 "name": "Two",
 "path": "/sitecore/content/Home/Two"
 }
 },
 {
 "innerItem": {
 "name": "Three",
 "path": "/sitecore/content/Home/Three"
 }
 }
 
 }
 }
}

### 検証

#### アイテムテンプレートの検証結果を取得する { .notintoc }

フィールドテンプレート内のフィールドの検証エラーの可能性については、validation項目をクエリすることで詳細を得られます。

##### クエリ { .notintoc }

query fieldValidation {
 item(where: { itemId: "{F704D058-D53C-490A-8803-37249B4F4031}" }) {
 field(name: "Title") {
 value
 validation {
 mode
 results {
 nodes {
 message
 result
 valid
 validator
 }
 }
 }
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "item": {
 "field": {
 "value": "Page",
 "validation": 
 {
 "mode": "FieldRegexValidation",
 "results": {
 "nodes": 
 {
 "message": "Only numbers are allowed!",
 "result": "Error",
 "valid": false,
 "validator": "Field RegEx validator"
 }
 
 }
 }
 
 }
 }
 },
 "extensions": {}
}

## 複数クエリの例

このセクションでは、コンテンツ管理のための一連のオーサリング操作について説明します。

### すべてのページのコンテンツを入手できます

以下の3つのクエリでページ内の全内容を取得することができます。これは、[Sitecore Marketplace](https://doc.sitecore.com/mp/en/developers/marketplace/en/introduction-to-sitecore-marketplace-for-custom,-public,-and-beta-apps.html)アプリのようなカスタムソリューションを構築している場合に便利です。例えば、ページからテキスト内容や、最後に編集した日付や編集したユーザーなどの詳細を取得する必要があります。

##### クエリ { .notintoc }

まず、利用したいサイトの経路をsitesに問い合わせることができます:

query GetSites {
 sites {
 name
 rootPath # Get site path
 rootItem {
 itemId
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "sites": 
 {
 "name": "<SITE\_NAME>",
 "rootPath": "<SITE\_PATH>",
 "rootItem": {
 "itemId": "<SITE\_ID>"
 }
 }
 
 },
 "extensions": {}
}

##### クエリ { .notintoc }

次に、サイトパスを使ってすべてのサイトページ、ページIDやパスを検索・取得できます。

query GetSitePages {
 search(
 query: {
 index: "sitecore\_master\_index"
 searchStatement: {
 criteria: 
 {
 criteriaType: STARTSWITH
 field: "\_fullpath"
 value: "<SITE\_PATH>" # Replace with your site path
 }
 { operator: MUST, field: "\_templatename", value: "Page" }
 
 }
 paging: { pageSize: 100, pageIndex: 0 }
 }
 ) {
 totalCount
 results {
 innerItem {
 itemId # Get the page ID
 name
 path # Get the page path
 }
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "search": {
 "totalCount": 127,
 "results": 
 {
 "innerItem": {
 "itemId": "<PAGE\_ID>",
 "name": "<PAGE\_NAME>",
 "path": "<PAGE\_PATH>"
 }
 }
 
 }
 },
 "extensions": {}
}

##### クエリ { .notintoc }

最後に、ページIDとパスを使ってページの内容(データソースを含む)を取得することができます。

query GetPageContents {
 # Replace itemId with your page ID
 page: item(where: { itemId: "<PAGE\_ID>" }) {
 itemId
 name
 path

 fields(ownFields: true, excludeStandardFields: true) {
 nodes {
 name
 value
 }
 }
 }

 # Query the Data folder directly using the page path + /Data
 dataFolder: item(
 where: {
 path: "<PAGE\_PATH>/Data" # Replace with your page path
 }
 ) {
 itemId
 name
 path
 template {
 name
 }

 # Get all data source items under the Data folder (Text 1, Text 2, etc.)
 dataSources: children {
 nodes {
 itemId
 name
 path
 createdField: field(name: "\_\_Created") {
 value
 }
 modifiedField: field(name: "\_\_Updated") {
 value
 }
 createdByField: field(name: "\_\_Created by") {
 value
 }
 updatedByField: field(name: "\_\_Updated by") {
 value
 }
 template {
 name
 }

 # Get all fields from data source items
 fields(ownFields: true, excludeStandardFields: true) {
 nodes {
 fieldId
 name
 value
 }
 }
 }
 }
 }
}

##### 結果 { .notintoc }

{
 "data": {
 "page": {
 "itemId": "<PAGE\_ID>",
 "name": "<PAGE\_NAME>",
 "path": "<PAGE\_PATH>",
 "fields": {
 "nodes": 
 {
 "name": "Title",
 "value": "<PAGE\_TITLE>"
 }
 
 }
 },
 "dataFolder": {
 "itemId": "<DATA\_ITEM\_ID>",
 "name": "Data",
 "path": "<DATA\_PATH\_ID>",
 "template": {
 "name": "Page Data"
 },
 "dataSources": {
 "nodes": 
 {
 "itemId": "<DATASOURCE\_ID>",
 "name": "<DATASOURCE\_NAME>",
 "path": "<DATASOURCE\_PATH>",
 "createdField": {
 "value": "<DATASOURCE\_CREATED\_DATETIME>"
 },
 "modifiedField": {
 "value": "<DATASOURCE\_MODIFIED\_DATETIME>"
 },
 "createdByField": {
 "value": "<CREATED\_BY\_USER>"
 },
 "updatedByField": {
 "value": "<UPDATED\_BY\_USER>"
 },
 "template": {
 "name": "Text"
 },
 "fields": {
 "nodes": 
 {
 "fieldId": "<FIELD\_ID>",
 "name": "Text",
 "value": "<div class=\\"ck-content\\"><p>Example text content on the page</p></div>"
 }
 
 }
 }
 
 }
 }
 },
 "extensions": {}
}