---
title: "述語"
slug: "predicates"
abstract: ""
---
# 述語

述語とは、特定の接触の側面、例えば好みの言語や特定のキャンペーンを一度にトリガーしたかどうかなどに関連する条件やセグメントクエリを定義するクラスです。述語インターフェースや基本クラスは存在しません。条件クエリとセグメントクエリの組み合わせが述語を構成します。

述語は以下のインターフェースを実装します:

-   Sitecore.Framework.Rules.ICondition は条件を定義します
-   Sitecore.XConnect.Segmentation.Predicates.IContactSearchQueryFactory はセグメンテーションクエリを定義します

条件クエリやセグメンテーションクエリの使用はコンテキストによって決まります。例えば:

-   List Managerは述語をセグメンテーションエンジンに渡し、セグメンテーションエンジンは IContactSearchQueryFactory を使ってマッチするコンタクトのリストを取得します。
-   マーケティングオートメーションエンジンは ICondition を評価し、その結果を使ってコンタクトが計画内でどこに進むべきかを判断します。

![predicates1.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-platform/images/predicates1.png)

> !注ある述語ではICondition 、こうした実装が理にかなっている場合だけが理にかなっています。例えば、「連絡先のメールアドレスが\_\_\_\_\_\_\_\_\_\_\_と一致した場合」(Sitecore.XConnect.Segmentation.Predicates.Contacts.EmailAddressMatches)というロジックは、セグメンテーションクエリには適していません。なぜなら、返される連絡先は1つだけだからです。

## Sitecore。ルールとSitecoreの違い。フレームワーク。ルール

Sitecore.RulesSitecore.Framework.Rulesはルールエンジンの全く別の実装であり、重複しません。しかし、両方の条件タイプはルールエディター UIで利用可能です。以下の例では、ハイライトされた条件がIConditionを実装しています:

![rules1.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-platform/images/rules1.png)

> !注コンポーネントのパーソナライズはIConditionをサポートしていません。同じロジックをコンポーネントパーソナライズとマーケティングオートメーションに使いたい場合は、マーケティングオートメーション用のICondition実装とコンポーネントパーソナライズ用のRuleCondition<T>whereT:RuleContext実装を作成する必要があります。

## 例:AddressCityMatches

以下の例では、AddressCityMatchesがIContactSearchQueryFactoryとIConditionの両方を実装しています。

-   マーケティングオートメーションの文脈では、 Evaluate() はコンテキストの連絡先の都市が提供された都市と一致しているかどうかによって真または偽を返します。
-   セグメンテーションの文脈では、 CreateContactSearchQuery() はセグメンテーションクエリの一部となる式を作成します。

using System;
using System.Linq.Expressions;
using Sitecore.Framework.Rules;
using Sitecore.XConnect.Collection.Model;

namespace Sitecore.XConnect.Segmentation.Predicates.Contacts
{
 public class AddressCityMatches : ICondition, IContactSearchQueryFactory
 {
 public string City { get; set; }

 public StringOperationType Comparison { get; set; }

 // Used for marketing automation
 public bool Evaluate(IRuleExecutionContext context)
 {
 var contact = context.Fact<Contact>();

 return Comparison.Evaluate(contact.Addresses()?.PreferredAddress?.City, City);
 }

 // Used for segmentation
 public Expression<Func<Contact, bool>> CreateContactSearchQuery(IContactSearchQueryContext context)
 {
 return contact => Comparison.Evaluate(contact.Addresses().PreferredAddress.City, City);
 }
 }
}