はじめまして、羽生と申します。
出遅れてしまいましたが、思うところがあり
書かせて頂きます。
Droolsについては5年ほど前にWEB+DB PRESSにて
記事を書かせて頂きました。
その際のバックグラウンドとして、弊社の内部で
検証したのが「バリデーションルールにDroolsを使う」
というものでした。この検証自体は記事にはなっていません。
具体的には、WEB+DBの事例記事になったFX(外為)の
ネット取引のシステムへの適用可能性を検証しました。
結論から言うと、複雑なルールの集合に対しては非常に
開発性・保守性ともに有用と判断しました。
しかしながら、Droolsの仕様に伴う性能のばらつきが
最終的な採用を見送る最大の要因となりました。
以下、順番に説明します。
まず適用を検討したルールというのは、
「新規の買い注文の場合」
「新規の売り注文の場合」
「買いポジションに対する売り注文の場合」
「売りポジションに対する買い注文の場合」
などのように、注文の種別が多数に渡っており、
かつ、それぞれの状態で「金額がn以上であれば」
「有効期限がnであれば」などという項目レベルの
ルールが非常に多く存在するというものです。
真面目に組み合わせを書いていくと、数100通りになります。
これをDroolsのルール記述形式で紋切り型的に
列挙していきました。通常のIF文による記述よりも
断然書きやすく見通しも良かったです。
また修正のしやすさも非常に高かったです。
ここまでが、開発と保守における有用性を実感した部分です。
一方で性能ということですが、これはDroolsに限らず
一般的なルールエンジンに共通しますが、一度評価した
ルールを再度評価するときがあったりします。
要するにルールの総当たりをして、条件に合致しないとなれば
初めて離脱するわけですから、当然です。
ですが、どのルールから適用されるかも一定ではないので
同じデータに対しての評価であっても、0.1秒未満~4秒程度の
ばらつきが確認されました。
このばらつきが相場の変動というものと照らし合わせたときに
リスクになるということで、最終的に採用を見送って苦しみながら
手書きでIF文を書き連ねることで対処しました。
逆に言うと、このばらつきを許容できれば間違いなく採用していた
と断言できます。
以上は5年以上前のことですから、恐らく最新のDroolsであれば
問題をクリアしていることも十分に考えられます。
単純なルールだと正直面倒が先に立ちますが、複雑なものであれば
採用する価値はあると考えます。
蛇足ですが、そのときの経験を活かしてバックトラックしない、
つまり評価順序の一定なルールエンジンというものを作りました。
その一部はOSSとして公開しています。またそれを使って現在も
複雑なバリデーションを実装していますが、お客様に書いてもらった
Excelに少し手を入れるだけできちんと動作するのは、非常に便利です。
バリデーションというのは、間違いなくルールの一種ですから
ルールエンジンに任せるというのは有用だと私は判断します。
以上、多少なりともご参考になれば幸いです。
2008/12/19 23:57 ごとう <
ngo...@gmail.com>:
--
株式会社スターロジック
http://www.starlogic.jp/
羽生 章洋(HABU Akihiro)