私の認識したS2Buri

 これは、ワークフローエンジンですね。私はフロー制御ライブラリかと思っていたのですが、違ったようです。状態を管理するのがメインで、フロー制御はおまけみたいですね。

 で、実際の業務で使ったら何がうれしいのか。機能毎に見ると、以下のような感じでしょうか。

  • 状態管理:データの現在の状態を保持する。
  • フロー制御:業務フローをif文ではなくフローのまま扱う。
  • ルールエンジン:業務ルールをif文ではなくデシジョンテーブルのような形で扱う。

 1つひとつ見ていきましょう。

状態管理

 通常、業務システムで扱うのは、業務を手でやっていた時でいうところの伝票になると思います。伝票で仕事をするとしたら、例えば受注伝票であれば伝票を書いて(受付)、与信を確認した上で受注承認をもらうために部長の席に置きます(受注承認待ち)。受注承認が下りたら、出荷係に伝票が渡されます(出荷待ち)という感じで伝票が流れます。

 このカッコ内に書いたのが、伝票の状態です。アナログな処理をしていれば、部長の席には帳票トレイがあることでしょう。このトレイに乗っているのが承認待ち状態ですね。

 S2Buriでは、この状態を管理してくれます。S2Buriが無かったら、これらの情報は伝票の情報と一緒にテーブルに書かれることになります。どこかで管理しておかないとシステムから状態がわからなくなりますので。

 S2Buriが管理することで、データベース設計がシンプルになります。イメージとしては、伝票の項目をそのままテーブルに設計し直すだけという感じでしょうか。例えば受注伝票には発注者や受注した物の明細がかかれています。

 ところが、S2Buriが無かったら、これに受注状態というような列を追加し、10が受付、20が承認待ち、30が出荷待ち…といった感じのデータを持つということになります。この情報は、例えば承認が複雑になって、500万円以上の場合は社長承認が必要という新しいルールができたときに、25 社長承認待ちといった状態を追加しなければ行けないと言うことです。今回は10ずつ飛ばしてあったので間に追加できましたが、この対応には限界があります。

 S2Buriでは、この状態管理を肩代わりしてくれるというわけです。これによって、必要なときに承認待ちの一覧を取得して、承認画面に一覧表示すると言ったことができるのです。

フロー制御

 業務フローでいうところのif文と、画面から見ると1つのロジックだけど、実際には複数の機能から構成されるといったものを表現することができます。

 業務フローのif文というのは、例えば「もし受注金額が500万円未満であれば部長承認、そうでなければ社長承認」といったような内容です。この条件は将来「もし受注金額が100万円未満であれば承認不要、あるいは100万円以上500万円未満であれば部長承認、そうでなければ社長承認」という風に変更になる可能性があります。

 このくらいであればプログラムコードでもいいのですが、フローの状態で管理できた方が、見通しがよくなるかなと思います。条件が複雑になればなるほど、この効果は大きくなるのではないでしょうか。

 もう1つの画面からは1つのロジックだけど、実際には複数の機能から構成される物というのは、例えば登録画面から見た登録処理と確認メール送信処理のような関係でしょうか。登録処理のなかに確認メール送信処理を書くこともできますが、本来であれば役割が別々です。また、メールの送信は、あとから要件として追加されるかもしれません。その場合もテスト済みのコードを修正するのではなくフローに追加するだけで対応したいですよね。

ルールエンジン

 上のフロー制御をさらに強力にサポートする機能です。フローで条件分岐に使う値をExcelファイルとして作ることができるというものです。Excelファイルなのでメンテナンスがしやすいと思います。あと将来はゴニョゴニョしてエンドユーザでも書きやすい記述方式になるとか(´・ω・`)

テーブルピックアップ

 この機能が面白かったです。おそらく、ルールエンジンと同じ仕組みを使っているのだと思いますが、プログラムコード上からS2Buriを通してExcelの表を読めます。このとき、OGNLを使って読み込むべきレコードを選択できるので、Excel上に条件式と、その式に一致したときの値をセットにしてレコード作っておくことで、引数として渡した値が該当する条件文に対応する値をExcelから取得できます。

 少し伝わりにくいですね。例えば、Excelに以下のようなレコードがあると思ってください。ただし、この例は見やすくするため、動かないと思います。

条件式 割引率
受注額 >= 500,000 && 受注額 < 1,000,000 3%
受注額 >= 1,000,000 && 受注額 < 5,000,000 5%
受注額 >= 5,000,000 7%

 このExcelファイルをS2Buri経由で取得するわけです。引数としては受注額を与えます。そうすることS2Buriが該当するレコードを選択して、この例でいう割引率を返してくれるというわけです。

 これによって、割引率が変わったり、条件が増える(例えば1000万以上は10%割引になる)といったことにも対応しやすくなるわけです。


 以上、私が今日の説明でつかんだ範囲です。目指すところは、業務の変更や用件ヒアリングの漏れにより、後から変更(発覚)する部分をプログラムから設定などに切り離しておくことで、変更に強くするということだと思います。変化への柔軟性は、こういうところから作り込むのでしょうね。