ドキュメントツリー
一言でいうと
Astar の「フォルダとファイル」を表すモジュール。backend のパッケージ名は editor だが、実体は階層型ドキュメントツリー(フォルダ・Office 文書・録音・埋め込みシートなど)の管理と、ブラウザ内での直接編集を担う。ストレージモード(NETWORK_DRIVE/LOCAL)のワークスペースでは、事務所の NAS が Single Source of Truth(正)で、DB はそのインデックスという位置付けになる。
主要ドメイン概念
| 概念 | 役割 |
|---|---|
DocumentNode | ツリー上の1ノード(フォルダ or ファイル)。DocumentNodeType で種別を持つ |
DocumentAggregate | ノード + 内容 + メタデータをまとめた集約 |
DocumentRevision | 文書の版。変更履歴・差分表示に使う |
ContentStorageMode | 内容の実体をどこに置くか(DB内 / NAS / クラウドオブジェクトストレージ) |
| WOPI (Collabora) | Word/Excel/PowerPoint をブラウザ内でネイティブ編集するプロトコル連携 |
Backend 構造
core/editor/ は3層構造。NAS 連携・変換・変更履歴・トランスクリプションなど多くの責務を抱えるため domain/service/ が大きい。
api/controller/:DocumentNodeController(ノード CRUD)、EditorDocumentController/EditorFolderController(文書・フォルダ操作)、ChangelogController(変更履歴)、ConversionJobController(フォーマット変換ジョブ)、TranscriptionJobController/TranscriptionJobEventController(録音の文字起こし)、EditorNodeEmbedController(埋め込み表示)、EditorPublicController(公開リンク経由アクセス)、UnifiedNodeReadController(護テーブル等を含めた統一ノード読み取り)、SandboxRenderControllerdomain/service/StorageAwareDocumentService:DocumentServiceを包む、ストレージモードを意識したラッパー。NETWORK_DRIVE/LOCAL ワークスペースでは更新・削除は先に NAS(Go Agent 経由)へ書き、成功後に DB インデックスを更新する。作成は逆で、relativePathのユニーク制約を使って DB 行を先に確保し、同一トランザクション内で NAS 書き込みを行う(NAS 書き込み失敗時は行がロールバックされる)domain/service/DocumentStorageRouter: 実際のストレージ (DocumentStoragePort) へのルーティングと NAS 読み書きの実装詳細- そのほかの主要サービス:
DocumentConversionService(フォーマット変換)、OfficeRenderService(WOPI レンダリング)、DocumentOcrConversionService(スキャン文書の OCR)、DocumentTranscriptionService(録音→テキスト)、ChangelogService(変更履歴の生成)、NasTrashService/NasDownloadGrantService(NAS 側のゴミ箱・ダウンロード権限)
Frontend 構造
app/modules/document/ は規約の4分類に加え stores・mappers・transport・services を持つ。
components/:tree/(ツリー表示・D&D)、editor/(本文エディタ)、pane/(表示ペイン)、preview/(プレビュー)、embeds/(埋め込みコンテンツ)、mobile/、CollaboraOfficeEditor.vue(Collabora の iframe 埋め込み)、DocumentEditorPane.vuecomposables/:useWopiEditorUrl(Collabora 起動 URL の発行)、useDocumentTreeDrop/useDocumentTreeBulkOperations/useDocumentTreeKeyboardNav(ツリー操作)、useOfficePdfPreview、useSandboxDataBridgestores/: ツリー状態・開いているタブなどのクライアント状態
他モジュールとの辺
table:TableNodeMarkerServiceによりテーブルもツリー上のノードとして表示される(ノード種別の一つ)organize: AI 取込の入力元はこのツリー上の文書(ResolveDocumentsStepがDocumentNodeを解決する)office(WOPI + POI): Collabora からの読み書きは WOPI プロトコル経由でcore/officeのWopiController/WopiLockServiceが仲介するsearch: 文書内容の全文検索・セマンティック検索のインデックス元sync(Go Agent 経由 NAS 同期): NETWORK_DRIVE/LOCAL ワークスペースの実ファイル I/O は Go Agent が担い、StorageAwareDocumentServiceがそれを呼び出すshare: 文書の公開リンクはEditorPublicControllerから配信される
NETWORK_DRIVE/LOCAL ワークスペースでは NAS が正(SSoT)なので、DB だけを直接いじる修正(マイグレーションでの直接 UPDATE 等)は NAS の実ファイルと乖離する。文書の作成・更新・削除は必ず StorageAwareDocumentService を経由すること(ルート CLAUDE.md の Key Cross-Module Patterns にも明記されている規約)。作成時は DB 行を先に確保してから NAS へ書く順序に意味があり(relativePath ユニーク制約が同時実行のリスキャン挿入と競合しないようにする)、順序を入れ替えると整合性が壊れる。