Business Automation Manager Open Edition メモ - (1) 概要

# はじめに
IBMから提供されるBusiness Automation Manager Open Editionという製品があります。これはいわゆる"Business Automation"と呼ばれる分野に関連する機能を提供する製品ということになります。製品機能としては、BRMS(Business Rule Management System)としての機能や、BPMS(Business Process Management System)としての機能を含みますが、このシリーズでは、BRMS("意思決定管理機能")の部分を中心に見ていきたいと思います。
まずは概要編。

## 関連記事
[Business Automation Manager Open Edition メモ - (1) 概要](https://qiita.com/tomotagwork/items/31f5ad04b0efa193809e)
[Business Automation Manager Open Edition メモ - (2) KIE Server, Business Central 構成](https://qiita.com/tomotagwork/items/92362b8a2d9f4cfd3219)
[Business Automation Manager Open Edition メモ - (3) Business Centralを使用したルール開発](https://qiita.com/tomotagwork/items/e0a680f62baf2900f7a1)
[Business Automation Manager Open Edition メモ - (4) KIEサーバー上のルール呼び出し](https://qiita.com/tomotagwork/items/092f221dd3a84214102b)
[Business Automation Manager Open Edition メモ - (5) Embedded形態でのルール開発(DRL編)](https://qiita.com/tomotagwork/items/c0a670845b499c6e2de3)
[Business Automation Manager Open Edition メモ - (6) Embedded形態でのルール開発(DMN編)](https://qiita.com/tomotagwork/items/c7d2ff45d102484a1df9)
[Business Automation Manager Open Edition メモ - (7) kogitoでのルール開発(スタンドアローン)](https://qiita.com/tomotagwork/items/1a16377d882e3886f69f)
[Business Automation Manager Open Edition メモ - (8) kogitoでのルール開発(OpenShiftへのデプロイ)](https://qiita.com/tomotagwork/items/8b23cf90d25505edf45a)

# 製品の位置づけ

IBMはCloud Pak for Business Automation や、ODM(Operational Decision Manager)、BAW(Business Automation Workflow)といった"Business Automation"関連の製品を提供しています。
[IBM Cloud Pak for Business Automation](https://www.ibm.com/jp-ja/cloud/cloud-pak-for-business-automation)
[IBM Business Automation Workflow(BAW)](https://www.ibm.com/jp-ja/products/business-automation-workflow)
[IBM Operational Decision Manager(ODM)](https://www.ibm.com/jp-ja/products/operational-decision-manager)

Qiita記事書いたものもあるので一応...
[Business Automation Study](https://qiita.com/tomotagwork/items/ff4afefa1669aa5917b7)
[IBM Operational Decision Manager メモ](https://qiita.com/tomotagwork/items/2bdcc13cc5a896b6a3a1)

一方でRed Hatからも"Business Automation"関連製品は提供されています。
[Red Hat Process Automation Manager](https://www.redhat.com/ja/technologies/jboss-middleware/process-automation-manager)
[Red Hat Decision Manager](https://www.redhat.com/ja/technologies/jboss-middleware/decision-manager)

2019年にIBMがRed Hatを買収したこともあり、Red Hatから提供されていたBusiness Automation製品もIBMの冠がついた製品として提供されることになりました。それが、「IBM Business Automation Manager Open Edition」です。
[IBM Business Automation Manager Open Editions 8.0 発表レター](https://www.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/8/760/JAJPJP22-0278/index.html)
[IBM Business Automation Manager Open Editions 8.0 Documentation](https://access.redhat.com/IBM-docs/ibm-business-automation-manager-open-edition)

IBM Business Automation Manager Open Edition には、機能としてはRed Hat Process Automation Manager (PAM)、および、Red Hat Decision Manager(DM)が含まれるようです。
IBM Business Automation Manager Open Edition は、Red Hat PAM/DM の後継製品という位置づけになります。つまりIBMから同じカテゴリーの製品が2系統提供されるということになります。

※まだ新しいせいかこの製品の略称があまり見られません。製品名が長ったらしいのでとりあえずここではBAM OEと略して表記します。

# 関連用語/技術

BAM OEに関連する用語、技術について触れておきます。

## ルール・エンジン関連

### Drools
[Drools](https://www.drools.org/)

DroolsはBRMS機能を提供するOSSです。
DroolsをベースにRed HatがDecision Managerという商用製品を提供しており、その後継がIBM Business Automation Manager Open Editionということになります。
Droolsには主要なコンポーネントとして、ルールやプロセスの開発/管理を支援するBusiness Central、ルールやプロセスのランタイム環境を提供するKIE Serverが含まれます。

### Kogito
[Kogito](https://kogito.kie.org/)
[Kogitoとは](https://www.redhat.com/ja/topics/automation/what-is-kogito)
[Kogitoを使用してアプリケーションにルール・エンジン機能を追加する](https://ja.quarkus.io/guides/kogito-drl)

"コジト"と発音するらしいです。("コギト"ではないのね...)
Kogitoはクラウド・ネイティブの考え方でビジネス・プロセス・ベースのアプリケーションやルール・ベースのアプリケーションを実行するための機能を提供するOSSです。ビジネス・ルールやビジネス・プロセスをマイクロサービスとして稼働させることを想定したインフラを提供します。
BAM OEではKogitoをベースにしたルール実行環境**も**提供しています。
KogitoはJavaのフレームワークを使用して実装されているようで、Quarkus もしくは Spring Bootを使用することになります。(推奨はQuarkusとなっています)

[Kogito Documentation - 1.4. Kogito on Quarkus and Spring Boot](https://docs.jboss.org/kogito/release/latest/html_single/#con-kogito-quarkus-springboot_kogito-docs)
>The primary Java frameworks that Kogito supports are Quarkus (recommended) and Spring Boot.

Kogitoのルール・エンジンのコアの部分はDroolsが使われているようです。KogitoはDroolsを拡張したもの、という関係性のようです。
参考: [From Drools to Kogito Rule Engine](http://www.mastertheboss.com/bpm/kogito/from-drools-to-kogito-rule-engine/)

### Quarkus
[Quarkus](https://ja.quarkus.io/)
[Quarkus とは](https://www.redhat.com/ja/topics/cloud-native-apps/what-is-quarkus)

コンテナやサーバーレスの環境で稼働することを想定した軽量/高速なJavaフレームワークです。OSSとして提供されています。Kogitoのベースのフレームワークとして使われます。


## ルール開発関連
### DRL(Drools Rule Language)
[DRL Rules](https://docs.drools.org/7.73.0.Final/drools-docs/html_single/index.html#drl-rules-con_drl-rules)

Drools上で実行するルールを記述する言語。when/thenで条件とアクションの組み合わせを定義していきます。

```drl:sample
rule "Underage"
  salience 15
  agenda-group "applicationGroup"
  when
    $application : LoanApplication()
    Applicant( age < 21 )
  then
    $application.setApproved( false );
    $application.setExplanation( "Underage" );
end
```

### DMN(Decision Model and Notation) 
[Decision Model and Notation (DMN) ](https://docs.drools.org/7.73.0.Final/drools-docs/html_single/index.html#drools.DMN)

Drools上で実行するルールをグラフィカルに記述するための表記法。
OMGにより標準化が進められているようです。
参考: [OMG - Decision Model and Notation](https://www.omg.org/spec/DMN)

サンプル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/97b86d43-ed58-a16e-5729-f49a7e7afcbe.png)

## その他
[KIE community](https://www.kie.org/about/)
KIEというコミュニティがDroolsやKogitoなどのオープンソースのプロジェクトをリードしているようです。KIEは"Knowledge is Everything"の頭文字らしい。

# BAM OE の Decision Manager機能
BAM OEに含まれるDecision Manager機能について整理します。

## ランタイム構成

BAM OEで提供されるビジネス・ルール実行のためのランタイムの形態としてはいくつかのバリエーションがあります。大きく分けると組み込み型とサーバー型に分かれます。

### 組み込み型(Embedded)
ルールを呼び出すクライアント・プログラムにルール部分(ルール実行用のランタイム・ライブラリも含む)を組み込んでパッケージングするイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/0f37e78a-69b1-84e9-f94b-b90d44762fd0.png)

### サーバー型
ルールを実行する専用のサーバーを立ててそれをREST経由でクライアント・プログラムから呼び出すイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/6b8da5fc-b031-3fd8-d8ea-db5d5380a48d.png)

このタイプのルール・エンジンの実装についてもバリエーションがあります。

**KIE Server**
KIE Serverと呼ばれるルールエンジンが提供されています。このKIE ServerをJBossやWASなどのWebアプリケーション・サーバー上で稼働させることで、ルール・エンジンとしてのサービスを提供することができます。(以前から提供されているコンポーネント)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/54e010ee-dc14-0586-74f0-a4f76a0b35b9.png)

**Kogito**
先に示したKogitoというオープンソースをベースにしたルール・エンジンも提供されています。(比較的新しいコンポーネント)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bd897568-f68b-b58e-5e96-57de0fd2b5a8.png)

いずれもコンテナとして稼働させることもできるので、OpenShiftやKubernetes上にデプロイすることも可能です。

## ルール開発環境

BAM OEで稼働するルールを開発するための環境について整理します。

### Red Hat CodeReady Studio
Eclipseベースの開発環境として Red Hat CodeReady Studioというツールが提供されていて、広く使われていたようです。
しかし、このツールは <font color="red">Red Hat Decision Manager V7.11からサポート終了</font> となっています。
参考: [Red Hat Decision Manager 7 Supported Configurations ](https://access.redhat.com/articles/3354301)

### Business Central

Business Centralは、BAM OEの各種管理機能や開発ツールを提供するコンポーネントで、Webアプリケーションとして実装されています。JBossなどのWebアプリケーション・サーバー上で稼働し、ブラウザーのインターフェースを提供しています。ユーザーはブラウザーのインターフェースを使用してルールプロジェクトの開発や管理を行うことができます。

BAM OEではルールをなるべく簡単な形式で作成できるように、表形式でルールを記述するための機能(Guided Decision Table)や、ガイドに従ってルールを記述できる機能(Guided Rule)などが提供されています。GUIのインターフェースが提供されていてガイドに従って記述していくと、最終的にはDRLのコードが生成されることになります。

Guided Decision Tableイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/aaf41ee6-3207-d511-d892-83bb2a9f70eb.png)

Guided Ruleイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b51668d1-5fb9-311e-a0f5-97d265fbb86e.png)

ルールの簡易的なテスト機能も提供されています。

テスト実行イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e9f3d8d4-837c-9382-d440-ca24a37b3e22.png)


ルールをグループ化して実行順序を制御するフローを作ることができますが、その場合はBPMNのフロー開発の機能を利用することができます。

ルール・フロー開発イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/88ee30c6-ac1c-9392-bef8-5e2c9ea78845.png)

### VS Code

BAM OE固有の機能ではありませんが、以下のようなVS Code Extensionが提供されていますので、これらを利用することができそうです。

DRLでの開発:
[Drools VS Code Extension](https://marketplace.visualstudio.com/items?itemName=jim-moody.drools)


DMNでの開発:
[Red Hat Business Automation Bundle](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-extension-red-hat-business-automation-bundle)
[KIE Business Automation Bundle](https://marketplace.visualstudio.com/items?itemName=kie-group.vscode-extension-kie-ba-bundle)
[Kogito Bundle](https://marketplace.visualstudio.com/items?itemName=kie-group.vscode-extension-kogito-bundle)



### Excel

Business Centralで提供されているGuided Decision Tableのように、決められたフォーマットでExcel上の表にルールを記述することで、DRL形式に変換できる機能が提供されています。
Excelでルールを表形式で記述しプロジェクトに取り込む、といったことことができるようです。
参考: [Part IV. Designing a decision service using spreadsheet decision tables](https://access.redhat.com/documentation/en-us/ibm_business_automation_manager_open_editions/8.0/html-single/developing_decision_services_in_ibm_business_automation_manager_open_editions/index#assembly-decision-tables)


# まとめ

Business Automation系の製品として、結局IBMは2系統の製品を提供する状況になっています。
1つは元々IBM製品として提供していたODMやBAWなど(Cloud Pak for Business Automationにも含まれて提供される)。
もう1つはRed Hatの製品として提供されていたDM, PAMの後継にあたるBAM OE。

IBM ODMとRed Hat DMという観点で見ると...
ODMは管理ツール(Decision Center)や開発環境(Rule Designer)が充実していて、特に業務寄りのユーザーがルール開発や管理しやすい仕組みが整っている印象。一方で仕組みが大仰でサクッととりあえず動かしてみるというところまで持っていくにはハードルが高いイメージ。
Red Hat DMはDRLでのルール記述がベースなので、業務寄りのユーザーがルール開発やメンテナンスを行うのはちょっとハードルが高い。GUIっぽいサポートツールはあるが、基本DRLを吐くためのツールであり内部の動きをある程度意識して開発しなければならない。DMNはなかなか便利そうではありますが複雑なことをやろうとするとちょっとハードルが高いのではないかという印象。一方、ルール稼働環境としてはスタンドアロンでの構成やコンテナとしての提供もあり環境面での小回りは効きそうな感じ(ODMはルールを格納するのにデータベース・サーバーが必要だが、Red Hat DMだとデータベース・サーバーは基本的に不要です)。

かなり大雑把なすみ分けとしては、ゴリゴリDRL、DMNでルール書いてメンテできるプロジェクト/あるいはExcelだけでルール書けば済むようなプロジェクトであればRed Hat DM系、業務寄りのユーザー含めてルールをきっちりメンテ/管理したいプロジェクトであればIBM ODM系を選択する、というのが一つの基準になるんでしょうか...。