Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Drools 入門
Search
Toshiya Kobayashi
December 11, 2019
Technology
0
2.5k
Drools 入門
2019 日本 JBoss ユーザ・グループ勉強会のスライドです
https://ossbyredhat.connpass.com/event/153523/
#jjbug #drools
Toshiya Kobayashi
December 11, 2019
Tweet
Share
More Decks by Toshiya Kobayashi
See All by Toshiya Kobayashi
Event-driven business automation powered by cloud native Java
tkobayas
1
760
Other Decks in Technology
See All in Technology
“プロダクトを好きになれるか“も QAエンジニア転職の大事な判断基準だと思ったの
tomodakengo
0
140
評価の納得感を2段階高める「構造化フィードバック」
aloerina
1
210
Copilot Agentを普段使いしてわかった、バックエンド開発で使えるTips
ykagano
1
1.2k
2025/6/21 日本学術会議公開シンポジウム発表資料
keisuke198619
2
390
Rubyで作る論理回路シミュレータの設計の話 - Kashiwa.rb #12
kozy4324
1
310
ユーザーのプロフィールデータを活用した推薦精度向上の取り組み
yudai00
0
410
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
24
8.8k
DB 醬,嗨!哪泥嘎斯基?
line_developers_tw
PRO
0
230
生成AIをテストプロセスに活用し"よう"としている話 #jasstnano
makky_tyuyan
0
170
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
2
230
自分を理解するAI時代の準備 〜マイプロフィールMCPの実装〜
edo_m18
0
110
AWS全冠したので振りかえってみる
tajimon
0
140
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Six Lessons from altMBA
skipperchong
28
3.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Typedesign – Prime Four
hannesfritz
42
2.7k
Raft: Consensus for Rubyists
vanstee
140
7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Faster Mobile Websites
deanohume
307
31k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Transcript
DROOLS 入門 DROOLS 入門 Toshiya Kobayashi
DROOLS って何? DROOLS って何? オープンソース、Java で書かれたルールエンジン 宣言的にルールを記述する Excel スプレッドシートなど複数のフォーマットで記 述可能
クラウドネイティブにも対応(Kogito) Red Hat Decision Manager のアップストリーム
どういうときに使う? どういうときに使う? Input(POJO) をルールで処理し、Output を出力する 普通の Java でロジックを記述するのとどう違う? 宣言的(Declarative)にルールを記述する ->
実行、最適化はエンジンに任せる -> ルールのみ書けばよいのでメンテナンス性が向上 -> プログラマとビジネスアナリストの分業が容易 ルールの量が多い場合は Drools がはまる
やってみよう やってみよう rule "高額商品" when $p : Person( age >=
12 ) $o : Order( consumer == $p, itemPrice > 100000 ) then System.out.println( $p.getName() + "さん、 " + $o + " の注文をご確認 end rule "高額商品 子ども" when $p : Person( age < 12 ) $o : Order( consumer == $p, itemPrice > 5000 ) then System.out.println( $p.getName() + "さん、、 " + $o + " の注文を保護 end
DRL DRL when に条件、then にアクション(Java)を書く ルールは並列に並べるだけ ksession.insert() で ファクト(POJO) をインプット
ksession. reAllRules() でルール実行
RETE MODEL : ルールの内部表現 RETE MODEL : ルールの内部表現
デシジョンテーブル デシジョンテーブル
デシジョンテーブル デシジョンテーブル 上段にルールのテンプレートを書き、セルで値を埋めて いく プログラマとビジネスアナリストの分業が容易 スプレッドシートの1行が1ルール(DRL)に変換される
推論 推論 rule "春のキャンペーン" when $o : Order(consumer.memberCreatedAt >= "2019-04-01"
&& consumer. then System.out.println("実行 : " + kcontext.getRule().getName()); $o.setExtraPoint($o.getExtraPoint() + 2000); update($o); end rule "高額商品キャンペーン" when $o : Order(itemPrice > 100000) then System.out.println("実行 : " + kcontext.getRule().getName()); $o.setExtraPoint($o.getExtraPoint() + 4000); update($o); end
推論 推論 ルールの then でファクトを insert や update 出来る 変更をもとにルールが再評価される
変更されたプロパティが影響するルールのみ やりすぎ注意
KJAR KJAR ルールやPOJOをまとめて jar にする kie-maven-plugin Maven リポジトリから取得してルール実行
ワークベンチ(DECISION-CENTRAL) ワークベンチ(DECISION-CENTRAL) GUI でルール、ファクト、テストシナリオなどを作成 リソースは git で管理 kie-server (後述) 管理
KIE-SERVER KIE-SERVER ルール実行サーバー REST で insert, reAllRules Web アプリケーションとルールエンジンを分離
KOGITO KOGITO Drools、jBPM をクラウドネイティブに 起動が速い、メモリ消費が少ない kogito.kie.org
ほかにもいろいろ ほかにもいろいろ DMN (Decision Model and Notation) ルール記述、図表現の標準 PMML (Predictive
Model Markup Language) Machine Learning によって訓練されたモデルを実行 CEP (Complex Event Processing) リアルタイムに投入されるイベントを処理
リソース リソース drools.org Drools ブログ Red Hat Decision Manager
END END