Microsoft Rules Composer を使ってルールを作成する (プレビュー)

適用対象: Azure Logic Apps (Standard)

重要

この機能はプレビュー段階にあり、「Microsoft Azure プレビューの追加使用条件」が適用されます。

ルールによって、ビジネス プロセスのしくみに関するビジネス ロジックを制御します。 Azure Logic Apps Rules Engine プロジェクトで使うこうしたルールの作成を支援するために、Microsoft Rules Composer には、ルール セットとボキャブラリの作成とバージョン管理を行うためのビジュアル ツールが用意されています。

この攻略ガイドでは、ルールのしくみの概要と、Microsoft Rules Composer を使ってルールを作成する方法について説明します。

前提条件

  • Microsoft Rules Composer をダウンロードしてインストールします。

  • 作業したい既存のルール セットがある場合は、そのルール セットを含む XML ファイルが必要です。 そうでない場合は、新しいルール セットを作成し、XML ファイルとして保存する方法をこのガイドで説明します。

    重要

    既存の XML ファイルが .NET アセンブリに依存している場合、またはファクトを追加するために使うアセンブリに他の依存関係がある場合は、それらすべてのファイルを同じフォルダーに保持し、Microsoft Rules Composer のローカル ディレクトリに配置してください。

ルールとは

"ルール" とは、条件とその条件が評価されるアクションを含む、宣言型のステートメントです。 ルール セットが true の場合、ルール エンジンは 1 つ以上のアクションを実行します。 Azure Logic Apps Rules Engine のルールの構文は、次の形式で定義されます。

IF <条件> THEN <アクション>

次のルールの例では、トランザクション金額と割引の形式を使用するデータまたはファクトに対して 2 つの通貨値を比較することで、トランザクションを実行するかどうかを決定し、ビジネス ロジックを適用します。

IF 購入金額が数量より大きい THEN 顧客に追加の割引を与える

  • "条件": ファクトに適用される 1 つまたは複数の述語を含む、true または false のブール式。 述語とは、動詞が含まれ、主語について何かを述べる句です。 この例では、述語 "より大きい" がファクト "購入金額" に適用されます。 この条件は、常に true または false のいずれかに評価されます。 論理演算 ANDORNOT を使って複数の述語を組み合わせ、長い論理式を作成することもできますが、それは必ず true または false に評価されます。

  • "アクション": アクションは、条件評価の機能的な結果です。 ルールの条件が満たされると、対応する 1 つまたは複数のアクションが開始されます。 この例では、"追加の割引を与える" がアクションであり、これは "IF 購入金額が $1,000 より大きい" という条件が true の場合にのみ発生します。 Azure Logic Apps Rules Engine でのアクションは、メソッドの呼び出し、オブジェクトのプロパティの設定、または XML ドキュメントに対する set 操作の実行によって表されます。

  • "ファクト": ファクトとは、ルールが適用される世界に関する個別の情報です。 この例では、"金額" と "数量" がファクトです。 ファクトは、イベント システム、ハイブリッド アプリケーション内のオブジェクトなど、数多くのソースから得られますが、次のいずれかの要素を使って Azure Logic Apps のルール エンジンに渡す必要があります。

    • .NET オブジェクト (メソッド、プロパティ、フィールドなど)。
    • XML ドキュメント (要素、属性、ドキュメントのサブセクションなど)。
  • "ボキャブラリ": 条件とアクションで使用されるファクトのフレンドリ名。 詳しくは、ボキャブラリの作成と管理に関する記事を参照してください。

次の図と以下のセクションは、条件、アクション、ファクトがどのように組み合わされるかを説明しています。

Microsoft Rules Engine を示す概念図。

Microsoft Rules Composer

Microsoft Rules Composer を使って、ルールの作成、変更、バージョン管理、保存を行うことができます。 これらのタスクをプログラムで実行することもできます。 Rules Composer には、次の UI 要素が含まれています。

ウィンドウ 説明
RuleSet エクスプローラー 1 つ以上のルールを含むルール セットを作成します。
条件エディター ルールの条件を作成します。
アクション エディター 条件が true と評価された場合に実行するアクションを作成します。
ファクト エクスプローラー XML と .NET のファクトを参照し、それらのファクトを条件エディターまたはアクション エディターにドラッグします。

Microsoft Rules Composer を示す概念図。

ルール セットを作成して管理する

"ルール セット" とは、ドメイン、境界付けられたコンテキスト、またはビジネス境界に基づいてグループ化したルールのセットです。 ルール ストアでルール セットとルールを管理するには、RuleSet エクスプローラーを使います。 ルール セットとそのルールを作成、変更、テスト、または削除することができます。

  1. Microsoft Rules Composer[ルール ストア] メニューを開き、[読み込み] を選択します。

  2. 開きたいルール ストアが含まれている XML ファイルを探して選択します。

  3. RuleSet エクスプローラー ウィンドウで、[RuleSets] ショートカット メニューを開き、[Add New RuleSet] を選択します。

    Microsoft Rules Composer により、既定のバージョンとして 1.0 のルール セット バージョンを持つ新しい空のルール セットが作成されます。

  4. ルール セットを保存します。 [ルール ストア] メニューの [保存] を選択すると、ルール セットの XML ファイルが作成されます。

ルール セットの操作に使用できる RuleSet エクスプローラーのその他のコマンドを次の表に示します。

タスク command
新しいルール セットを作成します。 Add New Ruleset
選択したルール セットの新しい空のバージョンを作成します。 他のバージョンからルールをコピーし、新しいバージョンに貼り付けることができます。 新しいバージョンの追加
選択したルール セットのバージョンをクリップボードにコピーします。 コピー
ルール セットのバージョンとその内容を選択したルール セットに貼り付けます。 貼り付け
選択したルール セットのバージョンを削除します。 削除
選択したルール セットとそのすべてのバージョンを削除します。 親ルール セット レベルで [削除]
選択したルール セットのバージョンとそのバージョンのルールを再度読み込みます。そのバージョンに加えた作業中の変更を破棄し、ルール ストアからその内容を復元するオプションがあります。 再読み込み
選択したバージョンとそのバージョンのルールに加えた変更をすべて保存します。 および
選択したルール セットのバージョンをルール エンジン プロジェクトで使う前にテストします。 Test Ruleset

次の表では、ルール セットのバージョンのプロパティについて説明します。

プロパティ
名前 ルール セットの名前。

: この値は、ルール セットのバージョンではなくルール セットの Name プロパティを更新することによってのみ変更できます。
現在のバージョン RuleSet エクスプローラーで現在選択されているルール セットのバージョン。
ファクト取得コンポーネント ルール セットのバージョンにファクトを提供するために使うファクト取得コンポーネント。

Microsoft Rules Composer では、ファクト取得コンポーネントを作成し、それを使ってファクトを提供する機能がサポートされています。 詳しくは、次のドキュメントをご覧ください。

- ルール セットに関する高度なタスクを実行する
- ファクト作成コンポーネントとファクト取得コンポーネントを作成する
実行ループの最大の深さ 実行ループの例外がスローされない順行連鎖アルゴリズムの最大の深さです。

既定のループ数は 65,536 回です。
変換の継続期間 ルールの変換について、変換のタイムアウト例外がスローされない最大時間です。

既定の継続期間は 60,000 ミリ秒です。
Translator ルールの変換に使うトランスレーター。

現在、Microsoft Rules Composer では既定の組み込みトランスレーターのみがサポートされていますが、トランスレーターをさらに追加するための拡張性もサポートされています。
バージョンの説明 現在のバージョンの説明です。

ルール セットの操作について詳しくは、ルール セットに関する高度なタスクの実行に関する記事を参照してください。

ルールを作成して管理する

  1. Microsoft Rules Composer で、[ルール ストア] メニューから [読み込み] を選択します。

  2. 作業するルール ストアを含む XML ファイルを探して選択します。

  3. RuleSet エクスプローラー ウィンドウで、ルールを追加したいルール セットのバージョンを見つけます。

  4. ルール セットのバージョンのショートカット メニューを開き、[新しいルールの追加] を選択します。

    ルール エディターが開くので、条件アクションを追加できます。

ルールを変更できる各方法を次に一覧表示します。

  • ルール セットの新しいバージョンを作成します。

  • 既存のルール セットのバージョンを直接編集します。 個別のルールを変更するか、新しいルールを追加するか、既存のルールを削除することができます。

ルールの操作に使用できる RuleSet エクスプローラーのすべてのショートカット コマンドを次の表に示します。

タスク ショートカット コマンド
選択したルール セットのバージョンの新しいルールを作成します。 新しいルールの追加
選択したルールをクリップボードにコピーします。 コピー
選択したルールをクリップボードにコピーし、そのルールを削除します。 切り取り
選択したルール セットのバージョンにルールを貼り付けます。 貼り付け
選択したルールを削除します。 削除

次の表に、ルールのプロパティを示します。

プロパティ
名前 ルールの名前。
アクティブ ルールが有効になっているか、無効になっているかを示します。
優先順位 ルール セット内におけるそのルールの優先度。 値が大きいほどルールの優先度は高くなります。 優先度が高いルールのアクションが先に実行されます。

既定値は 0 で、中程度の優先度を表します。 正の値と負の値を使用できます。 詳しくは、ルール エンジンの最適化に関する記事を参照してください。

ルールを無効または有効にする

ルールを非アクティブ化して、ルール セットの実行時に実行されないようにすることができます。また、非アクティブ化したルールを再アクティブ化することができます。

  1. RuleSet エクスプローラーで、ルールを選択します。

  2. [プロパティ] ウィンドウで、Active プロパティを次のいずれかの値に設定します。

    • False: 無効
    • True: 有効

ルールの優先度を設定する

ルールに優先度を設定することにより、別の優先度を持つ別のルールのアクションが実行される前または後にそのルールのアクションを実行させることができます。 優先度は相対的であるため、特定の優先度を持つルールのすべてのアクションは、それよりも優先度の低いルールのすべてのアクションより先に実行されます。

  1. RuleSet エクスプローラーで、ルールを選択します。

  2. [プロパティ] ウィンドウで、[優先度] を目的の整数値に設定します。

条件を作成または編集する

ルールをトリガーする条件を作成、編集、または表示するには、ルール エディターの一部である条件エディターを使います。 条件を作成するには、次のタスクを実行します。

  • 組み込みの述語またはユーザー定義の述語 (存在する場合) を追加します。

  • [ファクト エクスプローラー] ウィンドウから項目をドラッグして、述語の引数を定義します。

  • 引数のリンクを選択して、引数の値をインラインで入力します。

  • 条件内で述語と論理演算子を移動します。

    Note

    述語と論理演算子を並べる順序によってそれらが評価される順序が決まることはありません。

  • 条件から述語と論理演算子を削除します。

条件に述語を追加する

  1. RuleSet エクスプローラーで、ルールを選択します。

  2. 条件エディターである [IF] ウィンドウの [条件] ショートカット メニューを開き、次のいずれかを選択します。

    • 論理演算子を選択します。 演算子のショートカット メニューから、評価したい述語または入れ子になった論理演算子を追加します。

      論理演算子の設定について詳しくは、ルールへの算術演算子と論理演算子の追加に関する記事を参照してください

    • [述語] ショートカット メニューから、組み込みの述語またはユーザー定義の述語 (存在する場合) を選択します。

    [述語] ショートカット メニューから選択できる述語式を次の表に示します。

    組み込みの述語 説明
    変更後 "time1 が、時系列で time2 より後かどうか" という質問に答える時間的述語です。
    変更前 "time1 が、時系列で time2 より前かどうか" という質問に答える時間的述語です。
    次の値の間 "time1 が、時系列で time2 と time3 の間にあるかどうか" という質問に答える時間的述語です。
    等しい 等価関係演算子です。
    Exists "指定した XML 要素または属性が存在するかどうか" という質問に答える存在の述語です。
    GreaterThan "より大きい" 関係演算子です。
    GreaterThanEqual "以上" 関係演算子です。
    LessThan "未満" 関係演算子です。
    LessThanEqual "以下" 関係演算子です。
    Match 指定された入力文字列内に、正規表現と一致する文字列が存在するかどうかを調べます。
    NotEqual 非等価関係演算子です。
    範囲 値が範囲内に存在するかどうかを判定します。

条件の述語の引数を指定する

こちらの手順に従います。これはアクションの関数の場合と同じです。

条件の論理演算子または述語を移動する

条件エディターで、次のいずれかの手順を実行します。

  • 論理演算子または述語を、別の論理演算子または [条件] ノードにドラッグします。

  • 論理演算子または述語のショートカット メニューを開き、[上へ移動] または [下へ移動] を選択して、項目をそれぞれ 1 つまたは 1 レベル移動させます。

アクションを作成または編集する

条件が満たされたときに実行するアクションを作成、編集、または表示するには、ルール エディターの一部であるアクション エディターを使います。 アクションを作成するには、次のタスクを実行します。

  • 組み込みの関数またはユーザー定義の関数 (存在する場合) を追加します。
  • [ファクト エクスプローラー] ウィンドウから項目をドラッグして、関数の引数を定義します。
  • 引数のリンクを選択して、引数の値をインラインで入力します。
  • アクション内で関数を移動します。

関数を追加する

  1. RuleSet エクスプローラーで、ルールを選択します。

  2. アクション エディターである [THEN] ウィンドウで、[アクション] ショートカット メニューを開き、組み込み関数を選択してアクションと引数を追加します。

    [アクション] ショートカット メニューから選択できる関数を次の表に示します。

    関数 説明
    Assert 新しいファクトをルール エンジン インスタンスのワーキング メモリに追加します。
    Clear ルール エンジン インスタンスのワーキング メモリと議題をリセットします。 ワーキング メモリと議題について詳しくは、ルール エンジンの最適化に関する記事を参照してください。
    Halt ルール処理を終了します。
    Retract ファクトをルール エンジン インスタンスのワーキング メモリから削除します。
    RetractByType 指定した種類のファクトをルール エンジン インスタンスのワーキング メモリから削除します。
    更新プログラム ルール エンジン インスタンスのワーキング メモリ内のファクトを更新します。

詳しくは、制御関数を使ったルールの最適化に関する記事を参照してください。

アクションの関数の引数を指定する

こちらの手順に従います。これは条件の関数の場合と同じです。

アクションの関数を移動する

ルール内のアクションは、指定した順序に基づいて実行されます。ただし、ルール エンジンの制御関数は例外で、他のアクションの後に実行されます。

  • アクション エディターで、アクションのショートカット メニューを開き、[上へ移動] または [下へ移動] を選択して、アクションをそれぞれ 1 つまたは 1 レベル移動させます。

条件の述語またはアクションの関数の引数を指定する

条件エディターまたはアクション エディターのうち該当する方で、次のいずれかの手順を実行します。

  • 述語または関数で、既定の引数を選択し、必要な値を入力するか、利用できる場合は一覧から選択します。

  • [ファクト エクスプローラー] ウィンドウで、引数として使いたい用語があるタブを選択し、その用語を該当するエディターの述語または関数の引数にドラッグします。

    用語の型は、述語または関数で想定されている型と一致する必要があります。 そうしないと、エラーが発生します。

  • 引数を空の文字列値に置き換えるには、引数のショートカット メニューを開き、[空の文字列に設定] を選択します。

  • 引数を null 定数の定義に置き換えるには、引数のショートカット メニューを開き、[Null に設定] を選択します。

    Note

    引数の型が null に設定できる型でない場合、このオプションは表示されないことがあります。

  • 引数に算術演算子または論理演算子を追加するには、ルールへの算術演算子と論理演算子の追加に関する記事を参照してください。

条件またはアクションの項目のソースを見つける

条件エディターまたはアクション エディターのうち該当する方で、次のいずれかの手順を実行します。

  • ファクト エクスプローラーで、条件の述語、アクションの関数、または引数のいずれかを作成するために使ったボキャブラリの定義を見つけるには、その述語、関数、または引数のショートカット メニューを開き、[ボキャブラリに移動] を選択します。

  • ファクト エクスプローラーで、条件の述語、アクションの関数、または引数のいずれかを作成するために使った .NET メンバーまたは XML 要素を見つけるには、その述語、関数、または引数のショートカット メニューを開き、[ソース ファクトに移動] を選択します。

述語、論理演算子、またはアクションを削除する

条件エディターで、次のいずれかの手順を実行します。

  • 項目を選択して、Delete キーを押します。

  • 述語、論理演算子、アクションなどの項目を選択し、[<項目の種類> の削除] を選択します。

  • 引数と入れ子になった引数をすべて削除し、既定の定義を復元するには、引数のショートカット メニューを開き、[引数の再設定] を選択します。

ルールにファクトを追加する

データ ソース参照を指定できます。この参照はルール ストアに保存され、ルールやボキャブラリのファクトとして後で使用できます。 クラスとクラス メンバーを持つ .NET アセンブリ、または XML ドキュメント要素と属性を持つ XSD スキーマを指定できます。

  1. .NET アセンブリや XSD スキーマから、またはボキャブラリ定義として既に追加したデータを参照するには、[ファクト エクスプローラー] ウィンドウで、必要なデータが存在する場所に応じて [ボキャブラリ] タブ、[XML スキーマ] タブ、または [.NET クラス] タブを選択します。

  2. 対応するタブから、条件エディターの条件内またはアクション エディターのアクション内の必要な場所にデータをドラッグします。

.NET ファクトのデータ ソースとして .NET アセンブリを追加する

  1. [ファクト エクスプローラー] ウィンドウで、[.NET クラス] タブを選択します。

  2. [.NET アセンブリ] ノードのショートカット メニューを開き、[参照] を選択します。

  3. 使用する .NET アセンブリを見つけて開きます。

    次のように、[.NET アセンブリ] の下に、選択したアセンブリがそのクラスとメンバーと共に表示されます。

    Microsoft Rules Composer のファクト エクスプローラー、クラス、クラス メンバーを示すスクリーンショット。

重要

ローカル ディレクトリで .NET アセンブリを更新しても、Microsoft Rules Composer によって .NET アセンブリが自動的に更新されることはありません。 更新したアセンブリへの参照を更新する手順については、「.NET アセンブリ参照の更新」を参照してください。

.NET アセンブリ参照の更新

  • 名前またはバージョンが異なる新しい .NET アセンブリを追加する場合は、新しいアセンブリを参照するようにルール セットを更新する必要があります。 このタスクを実行するには、Microsoft Rules Composer で新しいルール セットのバージョンを作成し、クラス、メソッドなどの新しいアセンブリへの参照を更新する必要があります。 更新したアセンブリを読み込むには、必ず Microsoft Rules Composer を再起動してください。

  • 更新した .NET アセンブリで同じ名前やバージョン番号などを使用する場合は、新しいアセンブリを Azure Logic Apps Rules Engine 関数プロジェクトに追加するだけで済みます。

データ ソースとしての .NET アセンブリを削除する

  1. [ファクト エクスプローラー] ウィンドウで、[.NET クラス] タブを選択します。

  2. [.NET アセンブリ] で、アセンブリのショートカット メニューを開き、[削除] を選択します。

XML ファクトのデータ ソースとして XML スキーマを追加する

  1. [ファクト エクスプローラー] ウィンドウで、[XML スキーマ] タブを選択します。

  2. [スキーマ] ノードのショートカット メニューを開き、[参照] を選択します。

  3. [スキーマ ファイル] ボックスで、XML スキーマ (.xsd) ファイルを見つけて選択し、[開く] を選択します。

    次のように、[スキーマ] の下に、XML スキーマがその XML 要素と共に表示されます。

    Microsoft Rules Composer、ファクト エクスプローラー、XML 要素を示すスクリーンショット。

引数で使われる XML 要素のバインド

ビジネス ルール フレームワークでは、TypedXmlDocument クラスは XML ドキュメント型を表す Microsoft .NET 準拠のクラス ライブラリであり、ITypedFact インターフェイスを実装するクラスの 1 つです。 これらのクラスは、"型指定されたファクト" と呼ばれます。

XML ドキュメントのノードをルールの引数として使う場合は、使うノードに基づいて、"セレクター バインド" と "フィールド バインド" という 2 つの XPath 式が作成されます。

  • ノードに子ノードがある場合は、そのノードにセレクター バインド (XmlDocument バインドとも呼ばれます) が作成されますが、フィールド バインドは作成されません。

  • ノードに子ノードがない場合は、そのノードの親ノードにセレクター バインド (XmlDocument バインドとも呼ばれます) が作成されます。 XmlDocumentMember バインドとも呼ばれるフィールド バインドは、そのノード自体に作成されます。 このフィールド バインドはセレクター バインドと相対的な関係にあります。

XML ノードをルールの引数にドラッグする前に、XML ノードに対する既定の XPath 式を変更することもできます。これにより、新しいバインド情報がルール セットに含められます。

Note

Microsoft Rules Composer でスキーマが再読み込みされた場合は、Microsoft Rules Composer で XPath 式に加えた編集内容を再入力する必要があります。

たとえば、次のような XML スキーマがあるとします。

Microsoft Rules Composer、ファクト エクスプローラー、XML 要素とその属性を示すスクリーンショット。

  • 引数で Income ノードを使う場合は、セレクター バインドのみが作成されます。このノードには子ノードがあるためです。

    [プロパティ] ウィンドウでは、ノードの [XPath セレクター] プロパティに、次の既定の XPath 式が含まれています。

    /*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']/*[local-name()='Income' and namespace-uri()='']
    
  • 引数で Name ノードを使う場合は、セレクター バインドとフィールド バインドの両方が作成されます。

    [プロパティ] ウィンドウでは、ノードのバインド情報は次のように表示されます。

    プロパティ
    XPath フィールド *[local-name()='Name' and namespace-uri()='']
    XPath セレクター /*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']