概要
indexionで依存グラフを確認したところ、パッケージ単位では循環依存はありませんでしたが、server内部の層境界とAPI契約のSource of Truthに不整合があります。
確認できた問題
1. API契約が二重化している
共有契約は packages/core/src/domain/contract/index.ts:37 の appContract に定義されています。一方、serverは apps/server/src/domain/shared/api-contract.ts:1 でinfrastructure routerを集約した別の appRouter を定義しています。
- Tauri/xtracterは
AppContract を使用
- server内部clientは
typeof appRouter を使用
- server routerは共有契約を実装にバインドせず、各routerで
os を個別定義
domain/shared/api-contract.ts がdomain配下からinfrastructure routerを17本参照
契約変更時にserver実装との不一致をコンパイル時に保証できず、API契約が二つのSource of Truthになっています。
2. application層からinfrastructureへ逆依存している
indexionでは apps/server/src/application から infrastructure への依存が23辺ありました。
具体例:
apps/server/src/application/registry.ts:16 がinfrastructureの JobWorker 型を参照
apps/server/src/application/services/ccip-vector-service.ts:5 が PostgresCcipVectorStore を生成
apps/server/src/application/services/directory-sync-service.ts:7 以降がrepository、job、event bus、loggerを直接参照
server固有のcomposition/wiringとapplication serviceの責務が混在しています。
3. 実行時依存の宣言と実際のimportが不一致
packages/ui/package.json:33 では @solid-imager/core がdevDependenciesですが、以下のように実行時importがあります。
packages/ui/src/v2-source-form-modal.tsx:5
packages/ui/src/search-control-panel.tsx:5
packages/ui/src/v2-upload-media-modal.tsx:1
単独ビルド・公開・インストール時に依存解決できない可能性があります。
4. infrastructureがUI所有の契約に依存している
apps/server/src/infrastructure/api/clients/preset-client.ts:1 が、packages/ui/src/preset-client.ts:6 の PresetOrpcLike を参照しています。
API adapterの契約がUI packageに置かれているため、infrastructure → UIという逆方向の依存になっています。
5. 不要または古いserver依存が残っている
apps/cli/package.json:20 の @solid-imager/server はCLI実装から使用されていない。CLIは @solid-imager/client を使用している。
apps/xtracter/vite.config.ts:23 と apps/xtracter/tsconfig.json:20 にserver実装へのaliasが残っているが、xtracter/srcからの利用は確認できない。
apps/xtracter/package.json:17 の @orpc/server もsrcからの利用が確認できない。
対応方針
参考
indexionのパッケージ集約結果:
- 循環依存: 0件
- workspace間の依存辺: 443件
packages/ui → packages/core: 97辺
apps/server/src/application → infrastructure: 23辺
apps/server/src/domain → infrastructure: 17辺
依存グラフ:
docs/architecture/indexion-dependency-graph.md
docs/architecture/package-dependency-graph.md
概要
indexionで依存グラフを確認したところ、パッケージ単位では循環依存はありませんでしたが、server内部の層境界とAPI契約のSource of Truthに不整合があります。
確認できた問題
1. API契約が二重化している
共有契約は
packages/core/src/domain/contract/index.ts:37のappContractに定義されています。一方、serverはapps/server/src/domain/shared/api-contract.ts:1でinfrastructure routerを集約した別のappRouterを定義しています。AppContractを使用typeof appRouterを使用osを個別定義domain/shared/api-contract.tsがdomain配下からinfrastructure routerを17本参照契約変更時にserver実装との不一致をコンパイル時に保証できず、API契約が二つのSource of Truthになっています。
2. application層からinfrastructureへ逆依存している
indexionでは
apps/server/src/applicationからinfrastructureへの依存が23辺ありました。具体例:
apps/server/src/application/registry.ts:16がinfrastructureのJobWorker型を参照apps/server/src/application/services/ccip-vector-service.ts:5がPostgresCcipVectorStoreを生成apps/server/src/application/services/directory-sync-service.ts:7以降がrepository、job、event bus、loggerを直接参照server固有のcomposition/wiringとapplication serviceの責務が混在しています。
3. 実行時依存の宣言と実際のimportが不一致
packages/ui/package.json:33では@solid-imager/coreがdevDependenciesですが、以下のように実行時importがあります。packages/ui/src/v2-source-form-modal.tsx:5packages/ui/src/search-control-panel.tsx:5packages/ui/src/v2-upload-media-modal.tsx:1単独ビルド・公開・インストール時に依存解決できない可能性があります。
4. infrastructureがUI所有の契約に依存している
apps/server/src/infrastructure/api/clients/preset-client.ts:1が、packages/ui/src/preset-client.ts:6のPresetOrpcLikeを参照しています。API adapterの契約がUI packageに置かれているため、infrastructure → UIという逆方向の依存になっています。
5. 不要または古いserver依存が残っている
apps/cli/package.json:20の@solid-imager/serverはCLI実装から使用されていない。CLIは@solid-imager/clientを使用している。apps/xtracter/vite.config.ts:23とapps/xtracter/tsconfig.json:20にserver実装へのaliasが残っているが、xtracter/srcからの利用は確認できない。apps/xtracter/package.json:17の@orpc/serverもsrcからの利用が確認できない。対応方針
appContractをAPI契約のSource of Truthに統一し、server実装との型検証を行うServiceRegistryの配置とservice locator依存を見直すPresetOrpcLikeをUI以外の適切なshared contract層へ移すpackages/uiの@solid-imager/coreをruntime dependencyへ移す@orpc/serverを削除し、各build/typecheckで確認する参考
indexionのパッケージ集約結果:
packages/ui→packages/core: 97辺apps/server/src/application→infrastructure: 23辺apps/server/src/domain→infrastructure: 17辺依存グラフ:
docs/architecture/indexion-dependency-graph.mddocs/architecture/package-dependency-graph.md