アーキテクチャ

アーキテクチャ

JUMONは、NATSをメッセージングのバックボーンとして使用したマイクロサービスアーキテクチャで構築されています。

システムコンポーネント

  flowchart TD
    subgraph NATS["サーバー / NATSメッセージング"]
    end

    Client[クライアント]
    JUMON[JUMON.md]
    Module[module service]
    Chat[chat service]
    Tool[tool service]
    Script[script service]
    Event[event service]
    
    %% クライアント接続
    Client -->|"実行"| JUMON
    Client -->|"接続"| NATS
    
    %% JUMON.mdからモジュールへ
    JUMON -->|"処理"| Module
    
    %% NATSを介したサービス接続
    Module <-->|"via NATS"| NATS
    Chat <-->|"via NATS"| NATS
    Tool <-->|"via NATS"| NATS
    Script <-->|"via NATS"| NATS
    Event <-->|"via NATS"| NATS
    
    %% サービス間の直接接続
    Module -->|"呼び出し"| Script
    Event -->|"トリガー"| Script
    Script -->|"利用"| Tool
    Script -->|"通信"| Chat
    
    classDef client fill:#607d8b,stroke:#455a64,color:white,stroke-width:2px,font-weight:bold
    classDef module fill:#34a853,stroke:#1e8e3e,color:white
    classDef chat fill:#ea4335,stroke:#c5221f,color:white
    classDef tool fill:#fbbc05,stroke:#f29900,color:white
    classDef script fill:#9c27b0,stroke:#7b1fa2,color:white
    classDef event fill:#4285f4,stroke:#174ea6,color:white
    classDef jumon fill:#ff9800,stroke:#e65100,color:white,stroke-width:2px
    classDef nats fill:#4285f4,stroke:#174ea6,color:white,stroke-width:2px,stroke-dasharray: 5 5
    
    class Client client
    class Module module
    class Chat chat
    class Tool tool
    class Script script
    class Event event
    class JUMON jumon
    class NATS nats

クライアント-サーバーモデル

JUMONはクライアント-サーバーアーキテクチャを採用しています:

  • JUMONクライアント:ユーザーが操作するコマンドラインインターフェース
  • JUMONサーバー:モジュール、スクリプト、ツールの実行を管理するバックグラウンドサービス

クライアントとサーバーは、信頼性の高いリクエスト-レスポンスとパブリッシュ-サブスクライブパターンを提供する軽量なメッセージングシステムであるNATSを介して通信します。

サーバーに接続されていない場合、JUMONは依存関係なしで実行できるように、一時的なサーバーインスタンスを自動的に起動します。

NATSとは?

NATSは、モダンな分散アプリケーション向けに設計された、シンプルで安全、高性能なメッセージングシステムです。クラウド、オンプレミス、エッジ、モバイル環境間での通信を可能にします。NATSはJetStreamを通じてリアルタイムデータストリーミングと耐障害性のあるストレージをサポートし、複数のプログラミング言語で公式クライアントを提供しています。主要企業で本番環境に広く使用されており、100%オープンソースです。

NATSは単なるメッセージングを超えて、現代のアプリケーションに不可欠な包括的な機能群を提供します。同期通信のためのリクエスト-リプライパターン、設定とメタデータのための永続的なキーバリューストア、大きなバイナリデータを扱うためのオブジェクトストレージをサポートしています。このオールインワンアプローチにより、複数の異なるシステムを必要とせず、分散アプリケーションを構築するための統一されたプラットフォームを提供します。

コアサービス

JUMONは、システムの特定の側面を担当する複数のマイクロサービスで構成されています:

  1. チャットサービス (chat):LLMプロバイダーとの通信を管理

    • 複数のプロバイダー(OpenAI、Anthropic、Google)をサポート
    • ストリーミングレスポンスを処理
    • ツールの呼び出しとレスポンスを管理
  2. ツールサービス (tool):ツールの実行を管理

    • 異なるツールタイプ(WASM、NATS、スクリプト)をサポート
    • ツールリソースを管理
    • ツールの入力と出力を検証
  3. スクリプトサービス (script):スクリプトの実行を管理

    • スクリプトの内容を解析
    • スクリプトの実行フローを管理
    • スクリプトの入力と出力を処理
  4. モジュールサービス (module):モジュールを管理

    • ローカルファイルまたはGitリポジトリからモジュールを読み込み
    • モジュールのインポートを管理
    • モジュール内のスクリプト実行を調整
  5. イベントサービス (event):イベントを管理

    • イベントのサブスクリプションを処理
    • イベントを適切なハンドラーにルーティング
    • イベントの永続性を管理