Skip to main content

パフォーマンスを保つためのルールエンジン設計ベストプラクティス

  • March 12, 2026
  • 0 replies
  • 9 views

Kaori Wakui
Forum|alt.badge.img+2

スコアカードやスペース共有用の指標作成、CTA生成、ヘルススコア更新など、
活用が進むほどルールエンジンの本数は増えていきます。

しかし、次のような状態になっていないでしょうか?

  • ルール完了まで数時間かかる

  • バッチ時間が逼迫している

  • 新しいルールを追加するのが不安

  • 夜間処理が溢れ始めている

本記事では、Admin視点でのルールエンジン設計の最適化ポイントを整理します。

 

フィルタ設計を見直す

まず最初に見直すべきは「抽出条件」です。

一般的に、以下のような条件は処理が重くなりやすい傾向があります。

  • IN (Include) の多用

  • Contains などの部分一致

  • 不要に広い抽出条件

可能であれば:

  • Equals を使用する

  • Starts With に置き換える

  • 早い段階で対象を絞り込む

という設計に変更します。

ポイントは「後で絞る」のではなく「最初に絞る」ことです。

 

同じJoinを繰り返さない(Data Designer活用)

 

複数のルールで同じデータセットを毎回Joinしている場合、これは処理時間増大の大きな要因です。

解決策:

  • Data Designerで基礎データを一度作成

  • そのデータセットを複数ルールで参照

  • 計算ロジックを部品化する

これにより:

  • 重複計算を削減

  • 保守性向上

  • パフォーマンス安定化

が期待できます。

Adminとしては「ルール単位」ではなくデータ基盤単位で設計する意識が重要です。

 

処理ステップを減らす

意外と見落とされがちですが、データ量よりも「処理ステップ数」の方がパフォーマンスに影響するケースが多い。

例えば:

  • 不要なTransform

  • 中間オブジェクトの多用

  • 1ルール内で完結させようとする過剰設計

可能であれば:

  • ステップを統合する

  • 不要な計算を削除する

  • ルールをシンプルに保つ

という改善を行いましょう。

 

Joinを減らし、Actionを分割する

典型的な重い設計パターン:

複数データソースを引っ張る → 大量Join → 最後に1つのActionへまとめる

この構造は非常に負荷が高くなります。

もし業務上許容できるのであれば:

  • Actionを分割する

  • ルールを用途別に分ける

  • Join回数を最小限にする

という設計の方が速くなる場合があります。

重要なのは:ルール数を減らすことではなく、1ルールあたりの処理負荷を減らすことです。

 

もし現在、バッチ時間が限界に近い、追加開発が怖い、ルール完了待ちが発生している

といった状況であれば、一度ルール設計の棚卸しを行うことをおすすめします!