Empowered by expect

希望は体力

SSVCのDecision Tableを雑に実装してみる~DecisionRules.io編~

経緯

TwitterでSSVCのことを知りました。

元となるブログ記事やその引用記事などを読んで、これはPrologで書けそうなディシジョンテーブルだなあと思いました(本投稿ではSSVC自体の説明は一切しませんので以下リンクの素晴らしいコンテンツをご参照ください)。
shinobe179.hatenablog.com
www.pwc.com
github.com

しかしPrologで書いてもProlog実行環境のインストールから説明することになるよなあ...と察したので今回はDecisionRulesというサービスを使って実装してみます。
ここではまずSSVCの"Suggested Supplier Table"を作ってみます。

DecisionRules概要

ディシジョンテーブルなどを作成&実行できる便利SaaSです。
www.decisionrules.io

Freeプランもあるのでアカウントを作成してください。ただし企業名や電話番号を求められます。

DecisionRulesアカウント作成画面

Excelからのインポートでテーブルを作成する

ログイン後、左側メニューから [Decision Tables] を選択します。

DecisionRules初期メニュー

DecisionTablesのトップ画面で [+ Decision Table] を選択して新規作成していきます。

DecisionTableトップ画面

作成方法の選択画面では右の [EMPTY DECISION TABLE] を選択し、
画像の赤枠部分でこのディシジョンテーブルを命名して下の [Continue] を選択します。

DecisionTable作成初期画面

空のディシジョンテーブルが表示されます。
左側の [Rule Settings] タブに移動します。

空のDecisionTable初期画面

テーブル設定画面で右上のメニューから [Import Version] を選択します。

Rule Settings画面

Import Decision Table の画面に進んだら
[1. Select Version!] で [Current (version 1)] を選択し、
[2. Drop or choose file!] で本投稿先頭に示したGitHubからダウンロードしたxlsxファイルを指定します。

テーブルのimport画面

ファイルに問題が無ければ下に [Save] のボタンが表示されるので選択します。

読み込んだディシジョンテーブルが表示されます。

インポートされたテーブルの初期画面

なおSSVCの項目のうちUtilityはAutomatableとValue Densityの2つから決まるので、直接AutomatableとValue Densityを入力する形にしました。さらにPublic Safety Impactは実質Safety Impactで決まるのでSafety Impactのみの入力を必要としています。

実行

テーブルを眺め終わったらさっそく実行してみましょう。
左側メニューから [Test bench] を選択します。

テストベンチメニュー画面

[1. Select Meta Data] の部分は自動で値が入っていると思います。
(API Key情報を含むのでキャプチャ略)
[2. Fill Request Body & Solve!] の欄に入力値を入れていきます。
 Exploitation (Active | PoC | none)
 Automatable (yes | no)
 Value Density (concentrated | diffuse)
 Technical Impact (Total | Partial)
 Safety Impact (Catastrophic | Hazardous | Major | Minor | None)
プルダウン選択..とはいきませんが、Valueの入力欄右側のハンバーガーメニュー(?縦3dots?)から [Preset Values] を選択すると値のリスト選択ダイアログが出ます。

Preset Valuesメニュー
Preset Valuesリスト画面

5項目の値をすべて入力して中央の [▶Run] を押します。
右側のOutputの欄に結果が表示されます。この場合は Priority=immediate、すぐに対応せよとなりました。

テストベンチ結果画面

同じ画面の下の方に [Code example] という欄があります。ここに今行ったテストをcURLやプログラミングから実施する場合のコードが表示されます(ここもAPI Keyを含むのでキャプチャ省略)。便利ですね!

Code Example欄

振り返り

SSVC Supplier Decision Tableの決定木をDecionRulesで実装することができました。
一覧で見通せる上Excel形式でのインポート&エクスポートもできお手軽だったと思います。

しかし、入力値のそれぞれの値についてツールチップなどで説明を表示といった機能を持たせていないので「別途資料を見ながら値の判定を行った後で最後に決定木を辿る部分だけの実装」となっています。Code Exampleの欄にPython等のコードも表示されるので周辺機能を作りこめばいいんですけどね。。でもそれならPrologでも苦労変わらないし。。

次回、「Decision TableをTwineでノベルゲームっぽく長い説明付きで実装する編」モノはできたので書けたら書きます。

エクスカーション

DecisionRules良かったです

今回たまたま見つけて使ってみましたが分かりやすかったです。コードを書けない人とビジネスルールの意識合わせをする場合にも使えそうな気がします。
また今回はインポートするので空白テーブルから作成しましたが、サンプルテーブルの内容はディシジョンテーブル界のHello Worldこと"複数の条件からなる割引率の決定"です。

テーブルが力業

今回作ったExcelテーブルは凝ったことはせずに、愚直にすべてのケースを羅列しています。
将来判定基準が変わったり、それぞれの組織やシステムの事情で「ここはout-of-cycleにしたい」といった時にも改変しやすいようにこの形式としました。
なので今回の主な作業は「この行を一番下に複製」の連打でした :P

decisionのカタカナ表記

ディシジョンで統一しましたがデシジョンだったでしょうか?
どちらが良いか判断つかないので機会あれば詳しそうな松井玲奈さんに質問しておきます。