OpenRules は オープンソースのBRMS (BDMS)。もっとも、商用のnon-GPLライセンスも用意しており、基本は商用のツールと考えてよいかと思います。ただそれだけに実績もあり、トムソン・ロイターやコメルツバンクなどなど海外の大手企業でも使われているようです。OpenRulesは、Excelで書いたデシジョンテーブルをそのまま実行できるなど、ビジネスユーザでもルールを書きやすく作られているのが特徴ですが、この(超)入門では、ルール記述の具体的な感触をつかむために、Droolsでも用いた旅費規程のサンプルを実行することを目標としてみました。まず最初は、インストールと付属のサンプルの実行からはじめてみましょう(ちなみに以下はWindows上での実行例です)。
OpenRulesインストールのための前提要件
OpenRulesをインストールするには、
- JDK 1.5以上
- Apache Ant 1.6以上
が必要です。これらのインストール方法については、他にたくさんサイトがあるので詳しくは省略しますが、ダウンロードおよび適当な場所に展開した後、JAVA_HOME、ANT_HOME、またPATHを設定しておいてください。
インストールが正常に完了したかどうかは、コマンドプロンプトで、それぞれ
- java -version
- ant -version
を実行して、意図したとおりのバージョンが表示されるのが確認できればOKです。
OpenRulesのダウンロード
OpenRulesのダウンロードサイトは Complete version の場合、
http://openrules.com/download.htm
になります(evaluation versionは、別のページ (download_eval.htm) です)。
Complete version をダウンロードするには、多少料金(nominal fee)がかかりますが、ちょっとお高めの専門書を買ったと思って私は、Complete versionを使いました。
ユーザの情報を登録すると、しばらくして(というか、人手で確認しているのか一晩くらいかかりました)ダウンロードのためのキー情報が送られてきます。 この後、最新のComplete versionのダウンロード画面( download.htm のページの下の方にリンクがあります)に行き、openrules_X.X.X.decisions.zipをダウンロードします。ダウンロードの際にキー情報の入力が要求されますが、その際に送られてきたキー情報を入力することでダウンロードできます。
openrules_X.X.X.decisions.zip を適当な場所に解凍してみましょう。解凍すると、中に openrules.decisions というフォルダができていて、その下にはたくさんのサンプルプロジェクトが展開されています。これで、サンプルを実行する準備ができました。
サンプルプロジェクトの実行
簡単なサンプルとして openrules.decisions の下の DecisionHelloを試しに実行してみましょう。このサンプルプロジェクトは、顧客に対し、そのときの時刻や顧客属性に合わせたあいさつを生成するプログラムです。
DecisionHelloのフォルダを開き run.bat をダブルクリックして起動してみましょう。
コマンドプロンプトに結果が表示されています。
サンプルプロジェクトの内容
サンプルプロジェクト内の主要なファイルを中心に、ざっと内容を概観してみましょう。
・run.bat
プログラムを起動するバッチファイルになります。中身は、antを呼んで、build.xml 内の run を実行しています。
・build.xml、build.properties
ant の 振る舞いを記載した定義ファイルです。 build.xml のうち、 起動のトリガー(main)となる java ソースファイル(ランチャー-launcher-)、同じく Excel のメインのファイルの指定は、build.properties という別の定義ファイルとして切り出してあります。
・compile.bat
コンパイル用のバッチファイル
・src\hello\main.java
このプロジェクトのjavaのランチャー。まずは、この中のmainが動きます。
・rules\main\Decision.xls
メインとなるテーブル、環境設定のテーブルなどを集めたExcelファイル
・rules\include\Data.xls
・rules\include\Glossary.xls
・rules\include\Rules.xls
それぞれ、テストデータと、そのデータ構造を定めたExcelファイル、 ルールに用いる用語を定めたExcelファイル、ルールを記述したExcelファイルになります。なお、Excelのファイルは上記のように必ずしも分ける必要はなく、それぞれのテーブルの1行目のキーワードがきちんと記載されていれば、すべて一緒のファイル、一緒のシートに集めてしまっても、わかりやすいように分けても自由なようです。
OpenRulesのテーブルキーワード
OpenRulesでは、ほとんどのことが Excel のテーブルで記述されます。したがって、OpenRulesのテーブルにつく、キーワードは非常に重要です。ここでは、このキーワードの主要なものをあげてみましょう。
・Decision
ルール実行の最初に起動されるテーブルです。javaで言えば main メソッドにあたるテーブルで、上から順番に実行されます。 1列目はデシジョンの名前で自由に記述でき、2列目が実行される内容になります。DecisionHelloプロジェクトの例では、この2列目には javaっぽい記述もちらほら見られますが、多くの場合実行されるデシジョンテーブル(DecisionTable)を指定することになります。デシジョンテーブルは、次にあげるキーワード ”DecisionTable” で定義されますが、これを実行するためには、テーブル名の前後に、それぞれ := と () をつけます。たとえば、 DefineGreetingというデシジョンテーブルを実行するためには、2列目に、:= DefineGreeting() と記述することになります。
・DecisionTable
OpenRulesでは、ルールはデシジョンテーブル(DecisionTable)で書かれます。形式としてはDecisionTableの他にもさまざまなバリエーションはあるのですが、入門段階では、DecisionTableを覚えておけばよいかと思います。テーブル中のCondition列がIf、Conclusion列がThenにあたります。
・Environment
実行するための、インクルードファイルなどの指定を行います。javaで言えば、クラスパスの指定と言えばわかりやすいでしょうか。
デシジョンテーブルの判断に使われている用語(変数)を列挙したテーブル。 1列目が用語(変数)、2列目がBusiness Conceptを表し、3列目が実際のシステム上の属性になります。 データモデルの用語を使ったアナロジーで言うと1列目、2列目は概念あるいは論理データモデルの世界を表し、3列目は、実装を意識した物理データモデルの世界になります。 Business Conceptはいわゆるエンティティにあたるでしょうか。
システム上の属性(2列目)に対し、javaのデータ型(1列目)を対応させるテーブル。
テストオブジェクト(テストデータ)のテーブル。複数のデータを配列として保持する。
ひとつのテストオブジェクトをあらわすテーブル。
Glossaryテーブルで定義されたBusiness Concept に対し、具体的なテストオブジェクトを対応させるテーブル。