テーブル
一言でいうと
Astar の中核データストア。スプレッドシート的な「テーブル・プロパティ・レコード」の3層モデルで、プロパティ定義は固定スキーマではなく PropertyDefinition の配列として Table に持たせ、レコードの値は JSONB に入る。列を増やす・型を変えるがマイグレーション不要という柔軟性が、法律事務所ごとに異なる管理項目(相続財産目録、時系列表など)に対応する土台になっている。
主要ドメイン概念
| 概念 | 役割 |
|---|---|
Table | ワークスペース内の1テーブル。PropertyDefinition のリストを持つ |
PropertyDefinition / PropertyType | 列定義。型(TEXT/NUMBER/SELECT/RELATION/COMPUTED 等)とバリデーションルールを保持 |
Record | 1行。値は JSONB(PropertyDefinition の id をキーにした JSON オブジェクト) |
ViewType | テーブルの表示形式(グリッド/ボード/カレンダー等、詳細は表示ビューモジュール) |
| 護 (mamoru) 同期 | 護 NAS 上の MDB(Access データベース)とテーブルを同期する仕組み。専用モジュールを持たず table に同居 |
| kitconvert | テーブル記録を Excel/Word の「キット」帳票へ変換するサブモジュール |
Backend 構造
core/table/ は3層構造に加えて、護同期用の Mamoru* クラス群と kitconvert サブパッケージを同居させている。
api/controller/:TableController(テーブル CRUD)、TableRecordController/RecordController(レコード CRUD・検索)、RecordCellActionController(セル単位アクション=Webhook 送信等)、DataImportController(CSV/Excel インポート)、MdbMigrationController、MamoruSyncConfigController、TableTotpController(TOTP プロパティ)、RecordChangeHistoryController、WebhookCellSecretControllerdomain/service/:TableService(テーブル作成・プロパティ変更、DocumentNodeRepositoryと連携してツリー上にテーブルを配置する)、RecordService(レコード CRUD・バリデーション・パッチ適用)、RecordFilterService/RecordJsonSchemaCompiler(フィルタ・スキーマ検証)、SchemaInferenceService/SchemaRefinementService(AI 取込時のスキーマ推論)、ComputedPropertyService(CEL 式の COMPUTED プロパティ)、TableCsvService/TableExcelService/TableImportService(インポート/エクスポート)、Mamoru*Service群(護同期)kitconvert/: 独自のapi/domain/infrastructureを持つサブモジュール。レコードを既存の Excel/Word テンプレート(「キット」)に流し込んで帳票化するdomain/model/:Table・Record・PropertyDefinition・PropertyTypeに加えて、filter/・import/・mapping/・mdb/・schema/・statistics/のサブパッケージ
Frontend 構造
app/modules/table/ はモジュールの中でも最大級で、規約の4分類(components/composables/repositories/types)に加えて services・validators・utils・constants・scenarios・ui-types を持つ。
composables/:core/(テーブル状態の基盤)、record/・property/・editing/(セル編集)、selection/(範囲選択)、display/(ビュー切り替え)、import/、totp/、layout/、keyboard/(キーボードナビゲーション)、capabilities/(権限に応じた操作可否判定)components/:record/・property/・view-editors/・import/・context-menu/・settings/・totp/・kitconvert/(kitconvert UI)・list/repositories/: backend API 呼び出しのラッパー(TableRepository等)
他モジュールとの辺
editor(ドキュメントツリー): テーブルはドキュメントツリー上のノードとして配置される(TableServiceがDocumentNodeRepositoryを利用)organize: AI 取込パイプラインの出力先はテーブルのレコード(OrganizeRecordWriter→RecordService)display: テーブル表示ビュー(board/calendar/chart/timeline)はtableのレコードを読むwebhook: セルの値変更が Webhook 送信のトリガーになりうる(CellWebhookDispatchService)mamoru-sync(frontend)⇄Mamoru*サービス群(backend): 護 NAS デバイスとの同期設定・進捗を SSE で配信
護 (mamoru) 同期
護 NAS(法律事務所向け Access データベース)とテーブルを同期する機能で、backend 側は専用モジュールを持たず core/table に Mamoru* というプレフィックスで同居している(domain/service/Mamoru*Service、infrastructure/listener/MamoruMdbSyncListener、infrastructure/scheduler/MamoruReconcileScheduler、infrastructure/sse/MamoruSyncProgressEvents)。frontend は独立モジュール app/modules/mamoru-sync/ で、デバイス接続 UI(components/connect/)と進捗表示を持つ。
kitconvert
テーブルのレコードを既存の Excel/Word テンプレートに流し込んで帳票を生成するサブモジュール。core/table/kitconvert/ が独自の3層構造を持ち、frontend 側は app/modules/table/components/kitconvert/ に同居する(独立モジュールにはなっていない)。
PropertyType はシステムが対応する型の Enum だが、値のバリデーション・型変換ロジックはドメインモデル側(PropertyDefinition・RecordValidationService)に集約されている。新しい列の型を追加するときは Enum を増やすだけでは動かず、バリデーション・JSON ⇄ Kotlin 変換・フロントの property/ composable/component の3箇所を揃える必要がある。