えちょ記

語らないブログ

ルールエンジン

うかべん大阪#3は毎度無事に終了いたしました。しかし人が集まればいくらでもネタが出てくるものなんですねえ。どれもこれも興味がそそられるお話で、終わったときはいつも創作意欲フル充電になる楽しいイベントでした!

さて、全体の感想などはほかの人にお任せするとして、私が取り上げたいのはさとーさんのお話。イベント駆動型のプログラムでは、ある特定のイベント(ここでは1秒に1階発生する定例イベント)に対してやたらとたくさんの条件分岐が鬼のように発生することがあります。その超スパゲティコードを何とかしようとするお話でした。

本講義においては複数同時平行に状態遷移する各タスクを、リアルタイムOSで見られる優先順位つきタスクマネージャに投入することで複雑な記述を整理する手法を紹介されていました。

ここで紹介するのはルールエンジンという手法。この手の問題は銀行の勘定系などでも多発しており、やはり膨大な条件文のためにメンテナンスが困難になるという問題に直面しました。

ルールエンジンとは、一つ一つの仕事を「ルール」という形で演算優先度をつけた計算式に構成しなおし、多数の小さなルールをルールエンジンが再構成し実行することで全体として複雑な条件遷移システムに構成しなおすものです。

各ルールは変数を共有しつつ独立した状態で記述されているので、そのまま何も考えずに全ルールを実行していると膨大な計算が発生します。ルールエンジンはそれら複数のルールの依存関係を整理し、「Aという変数が変更された、だからA変数を使ったルールだけ再計算しよう」と言った感じで全体の演算量を抑えつつ大量のルールを駆動することができるように実装されます。

ルールエンジンはJavaで組まれているDroolsが有名です。またMicrosoftも、.NET3.0において「ウィンドウズワークフローフレームワーク(WF)」内において、ルールエンジンを提供しています。

もしルール駆動をSAORI実装するならば、このあたりの成果物からよさげな物を引っ張ってこれないかなぁ‥‥?と思いながら講義を聴いていたのでした。