アーキテクチャ
ワークスペース構成
Relqis は、CLI、runtime、application、domain、infrastructure に分かれた Cargo workspace です。
rlq-cliはrlqコマンドを提供するアプリケーション層のアダプタです。relqis-runtimeは SQLite bootstrap、clock、viewer/runtime facade を提供する共有 composition root です。relqis-applicationは command/query DTO、アプリケーションサービス、エラー変換、トランザクション境界を担います。relqis-domainは bounded context、aggregate、値オブジェクト、policy、domain event を担います。relqis-infra-sqliteは SQLite 永続化、query repository、migration、UnitOfWork実装を担います。
境界づけられたコンテキスト
ワークスペースで実装している主要な bounded context は次のとおりです。
LedgerMasterPostingClosingEvidenceExport
日本語の目安:
Ledger= 台帳Master= マスタPosting= 起票Closing= 締めEvidence= 証憑参照Export= エクスポート
Ledger(台帳)は単一の会計上の真実として保たれます。締め結果、繰越仕訳、read model、export は、隠れた可変残高ではなく ledger entry から説明できなければなりません。
レイヤードアーキテクチャ
依存方向は常に domain の内側へ向けます。
rlq-cliは端末入力を解釈し、出力を整形し、アプリケーションサービスへ委譲します。relqis-runtimeは SQLite ベースの engine wiring をまとめ、CLI や将来の GUI が同じ runtime を共有できるようにします。relqis-applicationはユースケースを調停し、aggregate をまたぐ規則やアプリケーション規則を検証し、トランザクション境界を持ちます。relqis-domainは会計不変条件を含み、CLI や SQLite の都合に依存してはいけません。relqis-infra-sqliteは、domain 規則を再定義せずに永続化ポートと read-side query を実装します。
現在の実装状況
現在の実装は、初期骨格だけの状態ではありません。
- entry、posting request、opening、fiscal period、close、carryforward、attach/trace、export、master data 管理向けの CLI command が存在します。
- posted 済み仕訳は不変であり、変更フローは post、reverse、void、carryforward で表現されます。
- Manual entry も
PostingRequest(起票要求)を通ります。ledger entry への直接書き込み経路はありません。 - SQLite 永続化では、ファイルベース DB で foreign keys と WAL mode を有効にしています。
- read-side projection は現在、journal、general ledger、trial balance、posting work、closing checks、evidence trace、export history の query repository として提供しています。
- export は
freee、mf、yayoi、generic_journal、generic_trial_balanceを end-to-end でサポートしています。 - export run はライフサイクル状態更新を永続化し、端末上で失敗した後でも
ExportRunViewから確認できます。
アプリケーション境界のルール
- CLI command は repository を直接呼ばず、application service を呼びます。
- application service は
UnitOfWorkを通じて top-level transaction を管理します。 - read model が query-time SQL で作られていても、write-side aggregate と read-side projection は論理的に分離します。
- SQLite は永続化インフラであり、domain model そのものではありません。