RuleGo について
RuleGo は Go 言語で書かれた軽量で高性能な、組み込み可能なルールエンジンフレームワークです。再利用可能なコンポーネントを組み合わせてビジネスロジックを編成でき、エッジコンピューティング、IoT、データ統合、ローコード向けです。アプリケーションへの埋め込みとスタンドアロン型ミドルウェアの両方で利用できます。
主な機能
- 01外部ミドルウェアへの依存がない軽量設計
- 02コンポーネントベースのルールチェーン編成
- 03再起動なしでのルールチェーン更新
- 04ネストしたサブルールチェーンによる処理の再利用
- 05JavaScript、HTTP、MQTT などの組み込みコンポーネント
- 06データ取り込み用の Endpoint モジュール
活用シーン
- 01エッジサーバー上でのデバイスデータの前処理とフィルタリング
- 02メッセージ種別に応じた HTTP や MQTT システムへの配信
- 03IoT 環境でのアラート発報とデバイス連携
MCP 対応
README には MCP 関連のタグがありますが、本文では RuleGo が MCP サーバーやクライアントとどのように接続するかは説明されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
RuleGo
英語| 简体中文
RuleGoは、Go言語で構築された、軽量かつ高性能で、組み込み可能・オーケストレーション可能なコンポーネントベースのルールエンジンです。
ビジネス要件の変化にリアルタイムで対応し、調整できる、疎結合で柔軟なシステムを迅速に構築できます。
RuleGoは、データの集約、フィルタリング、配信、変換、エンリッチメントや、さまざまなアクションの実行をサポートする、多数の再利用可能なコンポーネントも提供します。また、さまざまなプロトコルやシステムとの連携・統合も可能です。
ローコード、ビジネスコードのオーケストレーション、データ統合、ワークフロー、大規模モデルのインテリジェントエージェント、エッジコンピューティング、自動化、IoTなど、幅広いシナリオで活用できます。
特徴
- 軽量: 外部ミドルウェアへの依存がなく、低コストのデバイスでも効率的にデータを処理・連携できるため、IoT エッジコンピューティングに適しています。
- 高性能: Go の高いパフォーマンスに加え、RuleGo ではコルーチンプールやオブジェクトプールなどの技術も採用しています。
- デュアルモード: 組み込みとスタンドアロンのデプロイモードに対応しています。既存のアプリケーションに
RuleGoを組み込めます。また、ミドルウェアとして単独でデプロイし、ルールエンジンとオーケストレーションサービスを提供することもできます。 - コンポーネント化: すべてのビジネスロジックがコンポーネントベースで構成されているため、柔軟な設定と再利用が可能です。
- ルールチェーン: さまざまなコンポーネントを柔軟に組み合わせて再利用し、高度にカスタマイズ可能で拡張性の高いビジネスプロセスを実現できます。
- ワークフローオーケストレーション: ルールチェーンのコンポーネントを動的にオーケストレーションできます。アプリケーションを再起動せずに、ビジネスロジックの置き換えや追加が可能です。
- 簡単な拡張: 豊富で柔軟な拡張インターフェースを備えており、カスタムコンポーネントの実装やサードパーティ製コンポーネントの導入が簡単です。
- 動的ロード: Go プラグインを通じて、コンポーネントや拡張機能を動的にロードできます。
- ルールチェーンのネスト: サブルールチェーンのネストに対応しており、プロセスを再利用できます。
- 組み込みコンポーネント:
Message Type Switch、JavaScript Switch、JavaScript Filter、JavaScript Transformer、HTTP Push、MQTT Push、Send Email、Log Recordingなど、多数のコンポーネントが含まれています。必要に応じて、ほかのコンポーネントも拡張できます。 - コンテキスト分離メカニズム: 信頼性の高いコンテキスト分離メカニズムにより、高い同時実行時のデータの混在を心配する必要がありません。
- AOP メカニズム: ルールチェーンの実行に追加の動作を加えたり、元のロジックを変更せずに、ルールチェーンやノードのロジックを直接置き換えたりできます。
- データ連携:
HTTP Endpoint、MQTT Endpoint、TCP/UDP Endpoint、UDP Endpoint、Kafka Endpoint、Schedule Endpointなどのエンドポイントを動的に設定できます。
ユースケース
RuleGo は、システムの疎結合化に優れた、オーケストレーション可能なルールエンジンです。
- システムのビジネスが複雑で、コードが肥大化している場合
- ビジネスシナリオのカスタマイズ性が高い、または頻繁に変化する場合
- 多数のサードパーティ製アプリケーションやプロトコルとの接続が必要な場合
- エンドツーエンドの IoT ソリューションが必要な場合
- 異種システムのデータを一元的に処理する必要がある場合
- Go 言語でのホットデプロイを試してみたい場合…… そのような場合、RuleGo フレームワークは非常に優れたソリューションとなります。
典型的なユースケース
- エッジコンピューティング: エッジサーバーに RuleGo をデプロイし、データをクラウドに送信する前に前処理、フィルタリング、集計、計算を行います。データ処理ルールと配信ルールは、システムを再起動せずにルールチェーンから動的に設定、変更できます。
- IoT: デバイスからデータレポートを収集し、ルールチェーンでルールを判定して、メールやアラームの送信、他のデバイスやシステムとの連携など、1つ以上のアクションをトリガーします。
- データ配信: メッセージの種類に応じて、HTTP、MQTT、gRPC を使用してデータをさまざまなシステムに配信します。
- アプリケーション連携: RuleGo を接着剤として使用し、SSH、webhook、Kafka、メッセージキュー、データベース、ChatGPT、サードパーティ製アプリケーションシステムなど、さまざまなシステムやプロトコルを接続します。
- 異種システムデータの一元処理: さまざまなソース(MQTT、HTTP、WS、TCP/UDP など)からデータを受信し、フィルタリング、形式変換を行って、データベース、業務システム、ダッシュボードに配信します。
- 高度にカスタマイズされた業務: 高度にカスタマイズされた業務や頻繁に変更される業務を切り離し、RuleGo のルールチェーンで管理します。メインプログラムを再起動することなく、業務要件を変更できます。
- 複雑な業務のオーケストレーション: 業務をカスタムコンポーネントにカプセル化し、RuleGo を通じてこれらのカスタムコンポーネントをオーケストレーション、駆動することで、業務ロジックの動的な調整と置き換えを可能にします。
- マイクロサービスのオーケストレーション: RuleGo を通じてマイクロサービスをオーケストレーション、駆動するか、サードパーティのサービスを動的に呼び出して業務を処理し、結果を返します。
- 業務コードとロジックの分離: たとえば、ユーザーポイント計算システムやリスク管理システムなどです。
- 自動化: たとえば、CI/CD システム、プロセス自動化システム、マーケティング自動化システムなどです。
- ローコード: たとえば、ローコードプラットフォーム、iPaaS システム、ETL、LangFlow のようなシステム(大規模言語モデルと連携してユーザーの意図を抽出し、ルールチェーンをトリガーして他のシステムと連携したり、業務を処理したりします)などです。
アーキテクチャ図
RuleGo のアーキテクチャ図
ルールチェーンの実行例図
インストール
go get コマンドを使用して RuleGo をインストールします:
go get github.com/rulego/rulego
# or
go get gitee.com/rulego/rulego
使い方
RuleGo の使い方はとても簡単です。次の3つの手順に従ってください:
-
JSON を使用してルールチェーンを定義します:
-
RuleGo パッケージをインポートし、ルールチェーンの定義を使用してルールエンジンのインスタンスを作成します:
import "github.com/rulego/rulego"
//Load the rule chain definition file.
ruleFile := fs.LoadFile("chain_call_rest_api.json")
// Create a rule engine instance using the rule chain definition
ruleEngine, err := rulego.New("rule01", ruleFile)
- メッセージのペイロード、メッセージタイプ、メッセージのメタデータをルールエンジンのインスタンスに渡して処理します。ルールエンジンはルールチェーンの定義に従ってメッセージを処理します:
// Define message metadata
metaData := types.NewMetadata()
metaData.PutValue("productType", "test01")
// Define message payload and message type
msg := types.NewMsg(0, "TELEMETRY_MSG", types.JSON, metaData, "{\"temperature\":35}")
// Hand over the message to the rule engine for processing
ruleEngine.OnMsg(msg)
アプリケーションを再起動せずに、ルールチェーンのロジックをリアルタイムで更新できます
ルールエンジン管理 API
- ルールチェーンを動的に更新
// Dynamically update rule chain logic
err := ruleEngine.ReloadSelf(ruleFile)
// Update a node under the rule chain
ruleEngine.ReloadChild("node01", nodeFile)
// Get the rule chain definition
ruleEngine.DSL()
- ルールエンジンインスタンスの管理:
// Load all rule chain definitions in a folder into the rule engine pool
rulego.Load("/rules", rulego.WithConfig(config))
// Get an already created rule engine instance by ID
ruleEngine, ok := rulego.Get("rule01")
// Delete an already created rule engine instance
rulego.Del("rule01")
- 設定:ドキュメント
// Create a default configuration
config := rulego.NewConfig()
// Debug node callback, the node configuration must be set to debugMode:true to trigger the call
// Both node entry and exit information will call this callback function
config.OnDebug = func (chainId,flowType string, nodeId string, msg types.RuleMsg, relationType string, err error) {
}
// Use the configuration
ruleEngine, err := rulego.New("rule01", []byte(ruleFile), rulego.WithConfig(config))
ルールチェーン定義 DSL
ルールチェーンのノードコンポーネント
RuleGo の中核的な機能はコンポーネントベースのアーキテクチャです。すべてのビジネスロジックがコンポーネントにカプセル化されており、柔軟に設定して再利用できます。現在、RuleGo には、一般的に使用されるさまざまなコンポーネントが組み込まれています。
- 標準コンポーネント
- rulego-components :ドキュメント
- rulego-components-ai
- rulego-components-ci
- rulego-components-iot
- rulego-components-etl
- rulego-components-discovery
- rulego-marketplace :動的コンポーネントとルールチェーンのマーケットプレイス
- カスタムノードコンポーネントの例 :ドキュメント
データ統合
RuleGo は、異種システム間のデータ統合と処理を統一するための Endpoint モジュールを提供します。詳細はEndpointを参照してください。
入力 Endpoint コンポーネント
RuleGo-Server
すぐに使える RuleGo ベースの自動化ワークフロープラットフォーム RuleGo-Server と、フロントエンドのビジュアルエディター RuleGo-Editor を提供しています。詳細は server/README.md を参照してください。
パフォーマンス
RuleGo は初期化中に処理の大半を完了するため、ルールチェーンの実行によってシステムに追加されるオーバーヘッドはほとんどなく、リソース消費も非常に少ないことから、エッジサーバーでの実行に特に適しています。
また、RuleGo は有向非巡回グラフ(DAG)を使用してルールチェーンを表現します。入力された各メッセージは、すべてのルールと照合するのではなく、グラフ内の経路に沿って処理するだけでよいため、メッセージ処理とルーティングの効率が大幅に向上し、システムリソースも節約できます。
パフォーマンステストケース:
Machine: Raspberry Pi 2 (900MHz Cortex-A7*4,1GB LPDDR2)
Data size: 260B
Rule chain: JS script filtering->JS complex transformation->HTTP push
Test results: 100 concurrent and 500 concurrent, memory consumption does not change much around 19M
エコシステム
- RuleGo-Editor :ルールチェーンのビジュアルエディター
- RuleGo-Server :自動化ワークフロープラットフォーム
- Tpclaw :AI エージェントプラットフォームの自律的な進化
- GFlow Engine :組み込み可能な承認ワークフローエンジン
- rulego-components :拡張コンポーネントライブラリ
- rulego-components-ai :宣言型エージェントフレームワーク
- rulego-components-ci :CI/CD シナリオ向けコンポーネントライブラリ
- rulego-components-iot :IoT シナリオ向けコンポーネントライブラリ
- rulego-components-etl :ETL シナリオ向けコンポーネントライブラリ
- rulego-components-discovery :サービスディスカバリーと設定センター向けコンポーネントライブラリ
- rulego-marketplace :動的コンポーネントとルールチェーンのマーケットプレイス
貢献
課題、提案、ドキュメント、テスト、コードの提出など、あらゆる形での貢献を歓迎します。貢献ガイド
ライセンス
RuleGo は Apache 2.0 ライセンスを使用しています。詳細は LICENSE ファイルを参照してください。
お問い合わせ
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。