コンテンツにスキップ

ValueOS UI統合方針・移植計画

クライアント自作ERP ValueOS(stanaka-blip/valueos・Next.js+Supabase)の卸(商社)まわりUIを、新CRM(アーキテクチャ=Next.js+Supabase+サーバー層)へ統合するための方針と移植計画。

ValueOS フロントは app配下 tsx 115ファイル(うち page.tsx=画面 66)/lib .ts 143ファイル(ロジック)。Next.js App Router・全面 "use client" 寄り・Tailwind 生className 多用。

  • ドメイン/計算ロジックが lib/ に分離+ユニットテストあり(threeParty/・purchasePrices・workflow・*.test.ts)。View/Panel は計算を lib から import し表示に専念(例: CaseDetailView ThreePartyMoneyPanels SettlementForm は supabase直叩き0・prop駆動・lib依存4〜5)。
  • TypeScript が堅い(主要ファイルで any ほぼ0)。
  • 受発注〜三社間〜請求入金の業務フローが実DB付きで動く。
  1. ビューがモノリシック:CaseDetailView 2,412行 / ThreePartyMoneyPanels 1,463行 / orders/new 1,412行 / invoices/new 1,262行 / orders/[id]/edit 1,103行。1画面=1ファイル・className 100〜231個。コンポーネント分解がほぼ無い。
  2. 共有UIプリミティブ(デザインシステム)が無い:Button/Table/Field/Panel/StatusBadge が無く、各画面が生Tailwindでフォーム/表を手書き → 重複と不統一。
  3. データアクセスが不統一:invoices/new(supabase直7+useState13)・orders/[id]/edit(直5)・cases/[id]/page(直7) 等がページ内で supabase を直接叩く。一方 saveDealerOrder.ts はサーバーアクション分離 → 方針がバラバラ。
  4. 全面 "use client":App Router なのに Server Components を使わず読み取りもクライアント。
  5. CI無し+巨大ファイル → 変更リスクが高い。
対象判断具体
画面の切り方・画面構成踏襲(Keep)ValueOS のルーティング・画面粒度をそのまま新CRMに写す
業務フロー・状態遷移踏襲(Keep)受発注→請求→入金・三社間・canOrder/canInvoice 等の仕様を維持
lib/ ドメイン・計算・workflow・テスト移植(Keep)新CRMのサーバー層(TS)へ1:1移植。テストごと確保
巨大ビュー/パネル分解して再構築(Rebuild)セクション/パネル単位の小コンポーネントへ。ロジックはlibのまま
フォーム(useState 10〜25の塊)共通フォーム化(Rebuild)新CRMの record-ui/Field部品+パターンに載せる
生Tailwindshadcn/ui+トークン(Rebuild)Button/Table/Field/StatusBadge を共通化=重複解消・統一
クライアント直叩き supabaseサーバー層+RLSへ(Rebuild)決定済みアーキに統一。.from()直叩きは持ち込まない
読み取り(一覧/詳細の初期表示)RSC化(Rebuild)Server Componentsで取得、操作だけクライアント

標準対応の中身(プロとして必ず入れる)

Section titled “標準対応の中身(プロとして必ず入れる)”
  1. 共有UIプリミティブを先に整備(Button/Input/Field/Select/Table/Panel/StatusBadge)。以降の全画面再構築が速く・統一される。
  2. 巨大コンポーネントの分解:目安 1コンポーネント ~200行以下。CaseDetailView は「サマリ/三社間/受発注/請求/入金/タスク」等のパネルに分割。
  3. データ層の統一:取得はサーバー(RSC/サーバー関数)、更新はサーバーアクション/RPC。ブラウザに supabase を直接叩かせない。
  4. フォーム標準化:手書き useState 群を共通Field+バリデーションパターンへ。
  5. 移植は画面単位:1枚ずつ「同じ見た目・同じフロー」で置換。ロジックは lib から呼ぶ。

移植計画表(全画面インベントリ)

Section titled “移植計画表(全画面インベントリ)”

規模=ValueOSの実ファイル規模。難度の目安:特大=要分解(>25KB or >1000行)/大=12–25KB/中=6–12KB/小=<6KB。ロジック(lib/*.ts 143本)は原則そのまま移植のため本表は画面(tsx)のみ。

画面/部品規模種別難度依存・備考
cases/[id]/CaseDetailView2,412行詳細ビュー特大直叩き0・lib依存5・className231。最優先で分解
cases/[id]/ThreePartyMoneyPanels1,463行三社間パネル特大直叩き0・lib4・useState25。パネル分割
cases/[id]/orders/new1,412行受発注フォーム特大直叩き14・useState13。データ層+フォーム再構築
cases/[id]/invoices/new1,262行請求作成特大直叩き7・useState13
cases/[id]/page526行詳細エントリ(RSC)大直叩き7(取得)→サーバー層へ
cases/[id]/SettlementForm353行決済フォーム中直叩き0・useState15
cases/[id]/WorkflowPanel366行工程パネル中lib5(workflow)
cases/[id]/products/new・edit・CasesList・cases/page・StatusBadge/Select300〜9KB一覧/小物中〜小
画面規模難度備考
orders/[id]/edit1,103行特大直叩き5・useState11
orders/[id]/print・delivery-print・orders/[id]/page16–23KB大印刷は機械的だが量が多い
admin/orders/OrderDetail・OrdersList・OrderStatusActions10–19KB中〜大管理側受発注
画面規模難度備考
invoices/[id]/payments/new21KB大入金登録フォーム
invoices/[id]/page775行大直叩き3
invoices/[id]/print・invoices/page13–19KB中〜大
payments/PaymentsBoardClient・payments/page2–16KB中入金ボード

三社間・決済(threeParty / dealer-settlements)

Section titled “三社間・決済(threeParty / dealer-settlements)”
画面規模難度備考
dealer-settlements/[id]/print19KB大精算書PDF
components/threeParty/FinanceReceiptPaidForm5KB小
画面規模難度備考
dealer/orders/new/page+Step2ProductForm25KB+26KB特大直叩き0・saveDealerOrder(サーバーアクション)分離=良い手本。ステップフォーム
dealer/orders/new/Step3/Step43–10KB中〜小
画面規模難度備考
prices/new711行大直叩き7・useState10
sales-prices/bulk-by-dealer575行大直叩き5・useState15(販売店別一括)
prices/bulk-by-supplier18KB大仕入先別一括
prices/page・[id]/edit・sales-prices/page・new・[id]/edit・components/prices/*1–15KB中〜小

商品・パッケージ(products / packages)

Section titled “商品・パッケージ(products / packages)”
画面規模難度備考
products/setup461行大直叩き2・useState12(初期設定)
products/new・[id]/edit・products/page・検索3–15KB中〜小
packages/bulk23KB大一括
packages/new・[id]/edit・[id]/page・page・検索2–14KB中〜小

マスタ(manufacturers / series / suppliers / contractors / dealers / staff)

Section titled “マスタ(manufacturers / series / suppliers / contractors / dealers / staff)”
群規模難度備考
各マスタの page/new/[id]/[id]/edit大半 <11KB中〜小CRUD定型。新CRMの MasterScreen 定型に載せ替えると大幅に共通化・削減
staff/page346行中useState11
components/masters/*(削除ボタン等)<4KB小
画面/部品規模難度備考
queues/payments-management/PaymentsManagementClient804行大useState16(入金消込キュー)
queues/collections/CollectionsQueueClient9.9KB中回収キュー
DashboardClient368行中ダッシュボード
components/AppSidebar589行大ナビ+認証。新CRMのSidebarに統合
components/case-registration/*(ウィザード5枚)8–10KB×5中案件登録ウィザード。良い分割の手本
components/case-attachments/*・print/*・layout・login・auth各<9KB中〜小
  1. 共有UIプリミティブ整備(Button/Table/Field/Panel/StatusBadge)+ lib/ ロジック移植(テストごと)。← 最初にやると以降が加速
  2. 卸コアから画面単位で再構築:案件詳細 CaseDetailView(分解)→ 受発注 orders/new・orders/[id]/edit(データ層+フォーム)→ 三社間 ThreePartyMoneyPanels → 請求・入金 → 販売店発注(dealer/orders=既に分割が綺麗なので早い)
  3. マスタ群は新CRMの MasterScreen 定型へ載せ替え(多数の小画面を一気に共通化・削減)
  4. クライアント直叩き(invoices/new・orders/edit・prices/new 等)をサーバー層/RPCへ移設

リスクと対策:特大5画面(CaseDetailView・ThreePartyMoneyPanels・orders/new・invoices/new・orders/edit)が工数の山。ここは「見た目・フロー据え置き+内部分解」を徹底し、lib/ の計算は移植して振る舞いの同一性をテストで担保する。