アーキテクチャ
Merlon は主に日本の非銀行系金融機関向けに設計された、セルフホスト型の AML/CFT アプリケーションである。本文書は、コンポーネント境界と運用上の統制を理解する必要がある開発者・運用担当者を対象とする。
External systems ── REST/webhooks ──> Go API ── gRPC ──> Rust Engine
│
└──────────────> PostgreSQL
React operator UI ─────────────── REST ────────────────> Go API
コンポーネント
- React UI(
ui/) はオペレーター向けダッシュボードを提供する。 - Go API(
api/) は顧客・取引データを受け付け、REST エンドポイントを公開し、ケースおよびレポートを管理し、バックグラウンド処理をオーケストレーションする。 - Rust Engine(
engine/) は gRPC 経由で CDD スコアリング、取引モニタリングルール、スクリーニングリスト、バックテストを評価する。 - PostgreSQL は運用記録、スコア履歴、監査ログを永続化する。Redis とオブジェクトストレージはオプションのデプロイメント連携である。
proto/ 配下の Protocol Buffers 定義は、Go API と Rust Engine 間の互換性境界である。クライアント互換性を維持するため、変更は追加のみ(additive)でなければならない。
設計原則
- 監査可能性優先(Auditability first) — 判断の根拠と追跡可能な操作を保持する。
- 設定としての製品(Configuration as the product) — ルールをアプリケーションコードではなく、バージョン管理された YAML/JSON 設定として表現する。
- スコア駆動型アーキテクチャ(Score-driven architecture) — CDD スコアがモニタリングとレビュー優先度に反映される。
- アダプタによる分離(Adapter isolation) — 外部システムの差異を境界で正規化する。
- デフォルトで安全(Secure by default) — 本番環境の Engine 接続には TLS が必須。シークレットとメトリクスエンドポイントはデプロイメント側の統制で保護されなければならない。
- 契約の安定性(Contract stability) — 外部契約の互換性を最低 12 ヶ月維持する。
- フェイルアラート(Fail-alert) — 検知漏れを黙って見逃すより、レビュー可能なアラートを優先する。
運用上の境界
1 つのデプロイメントは 1 つの機関にサービスを提供する。Merlon はあらゆる法域における規制遵守を保証するものではない。導入組織自身が、法的評価、ルールガバナンス、シークレット管理、バックアップ/リストア手順、および Engine 設定ファイルの管理について責任を負う。詳細は デプロイメントランブック および ADR-0012 を参照。