Redisで分散型ビジネスルール管理システム(DBRMS)を構築する完全ガイド
現代のビジネス環境において、スピードと効率性こそが優れた組織の証となります。
手作業中心の硬直的なプロセスにとらわれている組織は、非効率なアーキテクチャという重荷を背負い、ビジネスチャンスを逃し続けてしまいます。
一方で、プロセスを自動化している組織は生産性が高く、機敏であり、成長を実現する可能性もはるかに高いものです。だからこそ、組織には分散型ビジネスルール管理システム(DBRMS)が必要なのです。
ビジネスコミュニティにインパクトを与えることを目指したVishrut Kohli氏は、独自のDBRMSである「Bonsai」を開発しました。Redisを活用することで、Bonsaiはリアルタイムでのプロセス自動化を実現し、ラグの発生リスクを抑えることで生産性を最大化します。
今回は、このアプリケーションがどのように作られたのかを詳しく見ていきましょう。なお、Redis Launchpadでは他にも魅力的な革新的アプリを多数公開していますので、この記事を楽しんでいただけたら、そちらもぜひチェックしてみてください。
Redisを使った分散型ビジネスルール管理システムの構築手順
- 何を作るのか?
- 必要なものは?
- アーキテクチャ
- 事前準備
- フロントエンドのセットアップ
- 仕組みの解説
- 各機能の実装方法
1. 何を作るのか?
企業全体でスケーラブルなビジネスルールを作成・管理・実装できる、分散型ビジネスルール管理プラットフォームを構築します。多くの業務タスクを自動化でき、解放されたリソースを他のビジネス領域へ再投資することが可能になります。
このアプリケーションにより、組織はビジネスの意思決定ルールと決定ロジックを定義・デプロイ・管理できるようになり、アプリケーションは人間の介入なしに、一貫性のある高速な知的判断を下せるようになります。
以下では、このアプリケーションを実現するために必要なコンポーネントを紹介しながら、実装プロセスの各ステップを順番に解説していきます。準備はいいですか?それでは早速始めましょう。
2. 必要なものは?
- Python:汎用性の高い強力なプログラミング言語
- Redis:サブミリ秒レベルの低遅延でリアルタイムデータの取り込み・処理・分析を行うインメモリデータストア
- RedisJSON:RedisにJSONサポートを提供するモジュール
- RedisTimeSeries:Redisに時系列データ構造を追加するモジュール
3. アーキテクチャ
4. 事前準備
まず、Redis Stackデータベースが起動し、正常に稼働していることを確認してください。
5. フロントエンドのセットアップ
Create React Appでプロジェクトを開始
このプロジェクトはCreate React Appを使用してブートストラップされています。
ステップ1:フロントエンドリポジトリをクローンする
ステップ2:依存関係をインストールする
yarn install
ステップ3:利用可能なスクリプトを使用する
プロジェクトディレクトリで以下のスクリプトを実行できます。
yarn start
開発モードでアプリケーションを起動します。ブラウザで https://localhost:3000 を開くと画面が表示されます。コードを編集するとページが自動的に再読み込みされ、コンソールにはlintエラーも表示されます。
yarn test
インタラクティブなウォッチモードでテストランナーを起動します。詳細については、テスト実行に関するセクションをご覧ください。
yarn build
本番環境用にアプリケーションをbuildフォルダへビルドします。Reactを本番モードで正しくバンドルし、最高のパフォーマンスが得られるよう最適化されます。ビルド成果物は最小化され、ファイル名にはハッシュが含まれます。これでアプリをデプロイする準備が整いました。
yarn eject
注意:これは一方通行の操作です。一度ejectすると元に戻すことはできません。
ビルドツールや設定の内容に満足できない場合は、いつでもejectを実行できます。このコマンドは単一のビルド依存関係をプロジェクトから削除し、代わりにすべての設定ファイルと推移的な依存関係(webpack、Babel、ESLintなど)をプロジェクト内に直接コピーするため、完全なコントロールが可能になります。eject以外のコマンドは引き続き利用できますが、コピーされたスクリプトを参照するようになり、自由に調整できるようになります。ここから先の保守は自己責任となります。
ejectの使用は必須ではありません。厳選された機能セットは小規模〜中規模のデプロイメントに十分適しており、無理に使う必要はありません。ただし、将来的にカスタマイズが必要になった際に対応できるよう、この機能が用意されていることは覚えておくとよいでしょう。
ステップ4:Bonsai Rule Engineをクローンする
git clone https://github.com/redis-developer/bonsai
ステップ5:Pythonの依存関係をインストールする
ステップ6:スクリプトを実行する
6. 仕組みの解説
主要キーワード
- Namespace(名前空間)
- Rules(ルール)
- Entity(エンティティ)
Namespace(名前空間)
ルールを最も論理的に分類する単位がNamespaceです。Namespaceとは、一連のデータに対して評価されるルールの集合を指します。例えば、この記事の後半ではロイヤルティ管理システム向けのNamespaceを構築し、関連するすべてのルールをそのNamespace配下に保存します。
- データの保存構造は以下の通りです
ここでのNamespaceは tax_system です。
Namespaceを作成するコマンド:
Entity(エンティティ)
EntityとはNamespaceへの入力を指し、そのNamespace内のルールを評価した結果として出力を返します。
Rules(ルール)
サブキーワード
- Predicates(述語):ルールへの入力条件を意味します。
- Results(結果):ルールからの出力条件を意味します。
- Operators(演算子):以下の7種類が用意されています。
– eq:「=」(等しい)
– range:指定された範囲内に値があること(上限値は含まない)
– contains:文字列が指定された入力値を含むこと
– gt:「>」(より大きい)
– gte:「>=」(以上)
– lt:「<」(より小さい)
– lte:「<=」(以下)
例えば、「オンタリオ州トロント市に住み、所得税率35%を支払う市民の税額を判定するルール」を作成したいとします。この場合、変数はprovince(州)とcity(市)の2つ、出力はtax_rate(税率)の1つとなります。
このとき、「州がOntarioである」というPredicate(入力条件)は、4つの要素で構成されます。
各ルールは、特定の入力(Entity)に対する出力を決定するコマンドです。すべてのルールは次のような形式でNamespaceに保存されます。「州がOntarioで市がTorontoなら税率は35」という具合です。
これがルールオブジェクトの例です。
ここでのNamespaceは loyalty_system、rule_idは 123456 です。
Namespace内のルールを更新するコマンド:
Namespace内のすべてのルールを取得するコマンド:
rule_idを指定してNamespace内の1件のルールを取得するコマンド:
7. 各機能の実装方法
ルールの作成方法
ホーム画面で「Create」をクリックします。
続いて、各フィールドに必要な情報を入力してルールの作成を完了させます。
ルールの可視化
ルールを作成すると、フローチャート形式で直感的に視覚化できます。
ルールの評価
評価フローには、ルールの作成に使用されたすべての属性が含まれます。アプリケーションはパターンマッチングアルゴリズムを使用して、Entityに最も適合するルールを特定し、ルールの実行順序も出力します。
ルールの分析
RedisTimeSeriesを活用することで、すべてのメトリクスを視覚化でき、Namespace内の全ルールのパフォーマンスに基づいたデータ駆動型の意思決定が可能になります。
時系列データを記録するコマンド:
TS.ADD ruleId * 1
まとめ:リアルタイムデータで効率を高めるDBRMSプラットフォーム
DBRMSプラットフォームは、組織にとって必要不可欠でありながら時間のかかる退屈なタスクから、従業員とビジネスを解放します。こうしたタスクを自動化すれば、従業員一人ひとりの時間をより創造的で付加価値の高い仕事へ振り向けることができ、組織全体を活性化できます。
ただし、DBRMSシステムが効果を発揮するためには、リアルタイムデータベースによる駆動が不可欠です。常にトップレベルのパフォーマンスを保証しなければなりません。ほんのわずかなラグでもプロセスの効率が低下し、生産性に悪影響を及ぼしかねません。
Redisを活用することで、すべてのビジネスルールをリアルタイムで管理・更新・維持できるようになります。これにより、パフォーマンスに関するリアルタイムのインサイトを得て、即座にデータ主導の意思決定を行い、ビジネスチャンスを最大限に活かせるのです。
Bonsaiの開発過程についてさらに詳しく知りたい方は、Vishrut氏のYouTube動画をご覧ください。また、Redis Launchpadには他にも数多くの革新的なアプリケーションが公開されています。
世界中のプログラマーたちがRedisの可能性を活かし、日常の生活にインパクトを与えるアプリを生み出しています。
ぜひ一度覗いてみてください。インスピレーションを受けて、Redisでの開発を楽しんでみましょう。
このアプリを作ったのは誰?
Vishrut Kohli
Vishrutはフルスタック開発者兼データサイエンス愛好家で、Python、MATLAB/Octave、機械学習アルゴリズムに精通しています。彼のプロジェクトの最新情報をチェックしたい方は、GitHubでフォローしてみてください。
-
JedisライブラリでRedisのPub/Subシステムを実装する方法【Javaサンプルコード付き】
このチュートリアルでは、Java向けクライアントライブラリ「Jedis」を使用して、RedisのPub/Sub(パブリッシュ/サブスクライブ)システムを実装する方法を解説します。 Jedisライブラリとは Jedisは、Redisデータストア用のJavaクライアントライブラリです。軽量で非常に扱いやすく、Redis 2.8.x、3.x.x以降のバージョンと完全な互換性があります。シンプルなAPI设计で、Redisの各種コマンドを直感的に操作できるのが特徴です。 RedisのPub/Subシステムとは Redisは、Publish/Subscribe(パブリッシュ/サブスクライブ)型のメッセージ
-
SwiftUIでデザインシステムを構築する方法:実践ガイドとベストプラクティス
1つのプロダクトを支えるデザインシステムを構築することは決して簡単ではありません。スケーラビリティを確保しながら、堅牢性と柔軟性の両方を兼ね備える必要があるからです。難しい課題ではありますが、これまで多くの優れたリソースが、ビジュアル面とプログラム面の両方で良いシステムを構築するための有用な原則やアプローチを共有してきました。それらの知見の上に立ち、本記事ではまだあまり語られていない領域であるSwiftUIでのデザインシステム構築に焦点を当てて解説します。なぜこの記事を書いたのかニューヨークのITP(Interactive Telecommunications Program)での最初の夏、私