マスタ統一手順 Step 単位で依頼 · Docker で都度確認

MASTER UNIFICATION

デモ横断マスタ — 段階手順(壊さない進め方)

全デモの変数名をいきなり揃えず、Step ごとに Docker で確認しながら進めます。「Step 12 まで」のように番号で依頼できます。

依頼のしかた

AI / 外注への依頼文
  • 「マスタ統一手順の Step 09 までお願いします」
  • 各 Step の確認 URLを Docker(http://localhost:8080/DX)で開き、デモが壊れていないこと
  • 完了したらこのページのチェックをオンにする
進捗

0 / 0 完了

原則: 正規名を追加 → 動作確認 → 旧名は残す。Step 24(legacy 削除)は最後だけ。

フェーズ一覧

Phase内容目安
0shared JSON / ローダー / 主要デモ読込完了済み
AtenantSlug · yamada 解決0.5〜1 日
B士業 crm ↔ booking 縦スライス1〜2 日
C美容 flow / shift / board1〜2 日
Dcrm 内部 customer 移行1 日
Eその他・対象外明記半日
FDB · 本番練習 tenant1〜2 日(22 は任意)
G回帰 · legacy 削除3〜5 日

Step チェックリスト

Phase 0 — 共通基盤(shared)

完了 完了

完了条件: manifest に fieldNames・tenantAliases があり、seed に tenants / employees / customers が載っている。

tenant / employee / customer / location の正規名・別名・サンプル ID を JSON で定義。ソースオブトゥルースは DX/demo/shared/。

主なファイル

  • DX/demo/shared/master-manifest.json
  • DX/demo/shared/master-seed.json

確認(Docker)

依頼例: Step 01 は完了済み。Step 02 から続けてください。

完了 完了

完了条件: コンソールで <code>DXMaster.resolveTenantSlug("law")</code> が <code>midori</code> を返す。

dx_master_resolve_tenant_slug() 等のヘルパーと、ブラウザ用 DXMaster.* を用意。inline-master.php で seed を window に載せる。

主なファイル

  • DX/demo/shared/Master.php
  • DX/demo/shared/master-seed.js
  • DX/demo/shared/inline-master.php

確認(Docker)

依頼例: Step 02 まで確認済み。Step 03 から。

完了 完了

完了条件: 4 デモが 404 / JS エラーなく開く。Network で master-seed.js が 200。

booking / flow / shift / crm の index.php 先頭で shared を require / script 読込。壊さないため既存 data.js はそのまま、shared は「上書き用の参照源」として追加。

主なファイル

  • DX/demo/booking/index.php
  • DX/demo/flow/index.php
  • DX/demo/shift/index.php
  • DX/demo/crm/index.php

確認(Docker)

依頼例: Step 03 まで完了。Step 04(テナント slug 統一)から。

Phase A — テナント slug の統一

完了 2〜3h

完了条件: 会社切替時、<code>DXMaster.resolveTenantSlug(company.tenantSlug)</code> が seed の tenant と一致。

crm data.js の各 company に tenantSlug を追加。law → midori は済。salon / retail 等も master-seed の slug と 1:1 に。

主なファイル

  • DX/demo/crm/assets/data.js
  • DX/demo/shared/master-manifest.json

確認(Docker)

依頼例: マスタ統一手順 Step 04 まで。crm 全 company に tenantSlug を付与し、manifest の tenantAliases と一致させてください。各 Step の確認 URL を Docker で開き、デモが壊れていないこと。

完了 半日

完了条件: 美容会社選択時 tenantSlug が <code>salon</code>。コンソールエラーなし。

flow / shift / board / stocknavi / gantt の app.js(または data 読込後)で、companyId や scenarioId から tenantSlug を解決する 1 行を追加。直書き slug を減らす。

主なファイル

  • DX/demo/flow/assets/flow.js
  • DX/demo/shift/assets/shift.js
  • DX/demo/board/assets/board.js
  • DX/demo/stocknavi/assets/app.js
  • DX/demo/gantt/assets/gantt.js

確認(Docker)

依頼例: マスタ統一手順 Step 05 まで。flow/shift/board/stocknavi/gantt で DXMaster.resolveTenantSlug を company 切替に組み込んでください。Docker で各デモを開いて確認。

完了 1h

完了条件: シナリオ切替しても employee / 店舗名が salon seed と矛盾しない(将来連携の前提)。

gantt は scenarioId をキーにしている。master-manifest.json の scenarioTenantMap と各 scenario の tenantSlug を揃え、gantt.js は DXMaster.resolveDemoTenantSlug('gantt', …) で参照。仕様は 共通マスタ仕様 のガント表を参照。

主なファイル

  • DX/demo/shared/master-manifest.json
  • DX/demo/gantt/assets/gantt.js
  • DX/demo/gantt/assets/data.js

確認(Docker)

依頼例: マスタ統一手順 Step 06 まで。gantt の scenarioId と tenant slug の対応を manifest に追加し gantt から参照してください。

完了 1h

完了条件: 練習サイトで industry 切替が出ず、予約データが yamada テナントのもの。

practice config.php の tenant_slug: yamada と booking bk_canonical_tenant_slug()(master-manifest yamada→yamada(独立) / legal→midori)を揃えました。site キー yamada は URL 用、DB は legal。詳細は 共通マスタ仕様 の practice 表。

主なファイル

  • DX/practice/config.php
  • DX/practice/sites/yamada/index.php
  • DX/demo/booking/lib/bootstrap.php

確認(Docker)

依頼例: マスタ統一手順 Step 07 まで。practice yamada が booking tenant yamada に正しく解決されることを確認・必要なら修正してください。

Phase B — 士業(legal)vertical の ID 連携

完了 2h

完了条件: seed の legal customers が crm parties の人数・名前と一致。仕様ページの表と齟齬なし。

crm p1〜p3 と booking 担当者の対応を master-seed.json に明示(legacyPartyId · customerId · bookingCustomerEmail)。一覧は 共通マスタ仕様 の士業 customer 表。

主なファイル

  • DX/demo/shared/master-seed.json
  • DX/portal/master-spec.php

確認(Docker)

依頼例: マスタ統一手順 Step 08 まで。master-seed.json の legal customers を crm parties と legacyPartyId で対応付けしてください。

完了 半日

完了条件: 依頼人一覧・案件詳細が従来どおり表示。data 内に customerId が存在。

law の先頭 3 依頼人に customerId を追加(id: p1 は legacy のまま)。100 件 pad 分は未付与。master-seed の legacyPartyId と一致。

主なファイル

  • DX/demo/crm/assets/data.js

確認(Docker)

依頼例: マスタ統一手順 Step 09 まで。crm law の parties に customerId を追加(partyId は削除しない)。Docker で crm を確認。

完了 2h

完了条件: 案件カード・タイムラインが従来どおり。コンソールで party から customerId が取れる。

getCustomerId(party) を追加。localStorage 復元時も seed から customerId を補完。確認用に window.CrmMasterHelpers を公開。

主なファイル

  • DX/demo/crm/assets/app.js

確認(Docker)

依頼例: マスタ統一手順 Step 10 まで。crm app.js に customerId ヘルパーを追加し partyId と併存させてください。

完了 半日

完了条件: 予約画面の担当弁護士名が crm / seed と同じ表記。yamada@example.com / demo1234 でログインできる。

legal の担当リソース・顧客ログインを master-seed.json と揃えました(yamada@example.com → c-midori-001、kato@example.com → c-midori-002)。既存 DB は BK_DEMO_SEED_VERSION でデモアカウントを自動同期します。

主なファイル

  • DX/demo/booking/lib/Seed.php
  • DX/demo/shared/master-seed.json
  • DX/demo/booking/lib/Database.php

確認(Docker)

依頼例: マスタ統一手順 Step 11 まで。booking Seed.php を master-seed.json の legal データと一致させてください。

完了 1日

完了条件: crm で山田 太郎を開くと c-midori-001 と予約リンクが見える。booking yamada ログインと同一人物として説明できる。

crm law の依頼人詳細に master 連携バナーを表示(customerId · 予約デモリンク)。会社名・担当弁護士を seed / booking と一致。customerByLegacyPartyId は crmCompanyId で絞り込み(accounting の p1 誤マッチ防止)。

主なファイル

  • DX/demo/crm/assets/data.js
  • DX/demo/crm/assets/app.js
  • DX/demo/shared/master-manifest.json
  • DX/demo/shared/master-seed.js
  • DX/portal/master-spec.php

確認(Docker)

依頼例: マスタ統一手順 Step 12 まで。士業 vertical の crm↔booking 連携が master-seed 上で一貫していることを確認・不足があれば修正。

Phase C — 美容(salon)vertical の staff 統一

完了 1h

完了条件: salon employees が 12 名分、slug salon に紐づく。master-spec の表と DXMaster.employees(\"salon\") が 12。

美容 vertical 用 employee ID e-s01〜e-s12 を seed に固定。表示名・メール・色は shift salon の staff 配列に合わせた。retail も使う s01〜s03 / s05 / s07 / s12 は tenantSlugs に両方記載。

主なファイル

  • DX/demo/shared/master-seed.json
  • DX/portal/master-spec.php

確認(Docker)

依頼例: マスタ統一手順 Step 13 まで。master-seed の salon employees を確定してください。

完了 半日

完了条件: 会社を salon に切替えて日報・勤怠が動く。コンソールで getEmployeeId(staffById("s01")) → "e-s01"。

salon / retail の staff[] に employeeId(e-s01 等)を付与。salon 表示名を seed(佐藤 花・鈴木 翔・高橋 美咲)に揃え。legacy id(s01)は既存参照のため残す。FlowMasterHelpers.getEmployeeId を公開。

主なファイル

  • DX/demo/flow/assets/data.js
  • DX/demo/flow/assets/flow.js

確認(Docker)

依頼例: マスタ統一手順 Step 14 まで。flow の staff ID を master-seed salon employees と一致させてください。

完了 半日

完了条件: シフト表・希望提出が従来どおり。コンソールで getEmployeeId(staffById("s01")) → "e-s01"(flow と同じ)。

salon の 12 名に employeeId(e-s01〜e-s12)を付与。retail も seed と重なる 6 名に同様。homecare / construction は別人物のため未付与。ShiftMasterHelpers.getEmployeeId を公開。

主なファイル

  • DX/demo/shift/assets/data.js
  • DX/demo/shift/assets/shift.js

確認(Docker)

依頼例: マスタ統一手順 Step 15 まで。shift の staff を flow / master-seed と ID 統一してください。

完了 2h

完了条件: KPI・生産性表が従来どおり。コンソールで staff[0] の getEmployeeId → e-s01(salon)。

salon / retail の生産性表スタッフに id / employeeId を付与(表示名は変更なし)。homecare / construction は未付与。BoardMasterHelpers.getEmployeeId を公開。

主なファイル

  • DX/demo/board/assets/data.js
  • DX/demo/board/assets/board.js

確認(Docker)

依頼例: マスタ統一手順 Step 16 まで。board に employeeId を追加してください(表示は変更しない)。

Phase D — CRM 内部名の段階移行

完了 1日

完了条件: 全 industry で一覧・詳細が動作。law で partyByCustomerId("c-midori-001") が山田 太郎。

正規化時に party / record へ customerId を補完。新規カルテは customerId も保存。partyByCustomerId / recordsForCustomer / listCustomers を追加。partyId と UI ラベルは維持。

主なファイル

  • DX/demo/crm/assets/app.js

確認(Docker)

依頼例: マスタ統一手順 Step 17 まで。crm の内部参照を customerId 優先に寄せてください(partyId は残す)。

完了 2h

完了条件: 既存デモ動作不变。<code>CrmMasterHelpers.listCustomers()</code> が parties と同内容。

normalize 時に data.customers = data.parties(shallow)。listCustomers() で参照可能。

主なファイル

  • DX/demo/crm/assets/app.js

確認(Docker)

依頼例: マスタ統一手順 Step 18 まで。crm に parties の customers エイリアスを追加してください。

Phase E — その他デモ・対象外の整理

完了 半日

完了条件: 在庫一覧・発注が従来どおり。salon で debug().staff[0].employeeId → e-s01、customersWithMaster に c-salon-001。

各社に tenantSlug。salon / retail に staff[].employeeId。salon 顧客「田中 美咲」に customerId: c-salon-001。一部品目に ownerEmployeeId。StockNaviMasterHelpers.debug() で確認可。

主なファイル

  • DX/demo/stocknavi/assets/data.js
  • DX/demo/stocknavi/assets/app.js

確認(Docker)

依頼例: マスタ統一手順 Step 19 まで。stocknavi を master-seed retail/salon と ID 整合してください。

完了 1h

完了条件: 仕様ページに対象/対象外が一覧され、AI・多言語等が対象外と分かる。

master-manifest.json に includedDemos(booking/crm/flow/shift/board/stocknavi/gantt)と excludedDemos(ai・multilang・knowledge・item/旧scan・asis-flow)を追加。理由を 1 行ずつ記載。master-spec に一覧表示。

主なファイル

  • DX/demo/shared/master-manifest.json
  • DX/portal/master-spec.php

確認(Docker)

依頼例: マスタ統一手順 Step 20 まで。マスタ統一対象外デモを manifest に明記してください。

完了 2h

完了条件: ヘッダー「いまの人」に実名が5人。スタイリスト選択時は登録ボタン非表示。総務以上で編集可。

対象外デモのまま、閲覧デモの UXだけ seed と揃える。立場ラベル(受付のみ)をやめ、佐藤 花/鈴木 翔/高橋 美咲/伊藤 結衣/山田 店長を選択。各人に employeeId(e-s01…)。スタッフは閲覧のみ、総務・店長は登録・差替可。included には入れない。

主なファイル

  • DX/demo/knowledge/assets/data.js
  • DX/demo/knowledge/assets/app.js
  • DX/demo/knowledge/index.php
  • DX/demo/shared/master-manifest.json

確認(Docker)

依頼例: マスタ統一手順 Step 20a まで。文書ナビの立場切替を実名スタッフ+employeeId にしてください。

完了 半日

完了条件: スマホで登録すると PC 台帳がリアルタイム更新される。コード接頭辞で担当者・物品・場所へ自動振り分け。

対象外デモのまま、誰が・何を・どこへを記録する体験に寄せる。後継デモ demo/item(物品ナビ)ではスタッフ/物品/場所コードを読み取り、貸出・返却を PC 台帳へ同期。旧 demo/scan は参照用に残置。included には入れない。

主なファイル

  • DX/demo/item/index.php
  • DX/demo/item/field.php
  • DX/demo/item/api.php
  • DX/demo/item/lib/Store.php
  • DX/demo/item/assets/field.js

確認(Docker)

依頼例: マスタ統一手順 Step 20b まで。物品ナビで担当者・物品・場所の読取〜台帳反映を確認してください。

Phase F — DB・本番練習サイト

完了 1日

完了条件: schema / CREATE に employee_id。legal スタッフ・担当リソースに seed ID。予約画面は従来どおり動く。

bk_staff / bk_resource(type=person)に employee_id を追加。schema.sql・SQLite/MySQL CREATE・既存 DB 向け ALTER・DESIGN.md に結合方針を記載。legal の seed で e-midori-owner / e-midori-01 / e-midori-02 を埋める。アプリ結合ロジックは Step 22 以降。

主なファイル

  • DX/demo/booking/schema.sql
  • DX/demo/booking/lib/Database.php
  • DX/demo/booking/lib/Seed.php
  • DX/demo/booking/DESIGN.md
  • DX/demo/shared/master-manifest.json

確認(Docker)

依頼例: マスタ統一手順 Step 21 まで。booking schema に employee_id 列の設計を追加してください(データ移行は Step 22 以降)。

完了 スキップ

完了条件: yamada 練習サイトが tenant yamada で開ける。midori とは別顧客・別職員。

スキップ理由: practice の sites/yamada/ を 独立 tenant yamada に分離済み(2026-08-23)。セミナー用は midori(旧 legal エイリアス)。practice/config.php の tenant_slug = yamada。職員・顧客サンプルも別。

主なファイル

  • DX/practice/config.php
  • DX/demo/shared/master-manifest.json
  • DX/demo/booking/lib/bootstrap.php

確認(Docker)

依頼例: マスタ統一手順 Step 22 はスキップ済み。Step 23(全デモ回帰)へ進んでください。

Phase G — 回帰テストと legacy 削除

完了 完了

完了条件: Tier 1〜4 デモが「開ける+核心操作 1 つ」OK。問題は GitHub issue またはポータルメモに記録。

HTTP スモーク(localhost:8080)で Tier デモを確認。結果 2026-08-23: demo ハブ・booking(legal/food/trim)・crm・flow・shift・board・stocknavi・gantt・knowledge・物品ナビ(旧scan)・multilang・ai 系・asis-flow・practice/yamada・master 系 JSON がすべて HTTP 200、Fatal なし。booking schema_version=3・legal staff/resource に employee_id。物品ナビは台帳同期 API。手動の「予約1件作成」までは未実施(開ける+API bootstrap OK)。

主なファイル

  • DX/demo/index.php
  • DX/portal/master-unification.php

確認(Docker)

依頼例: マスタ統一手順 Step 23 完了。Step 24(legacy 削除)は明示依頼があるときだけ。

完了 完了

完了条件: grep で partyId が crm から消えている、または @deprecated 移行コードのみ。crm / デモ一覧が開ける。

完了 2026-08-23: crm の案件リンクを customerId のみに統一。seed / app から partyId フィールドを除去(旧 localStorage は normalize で 1 回移行)。士業連携の判定は tenantSlug === midori(会社キー law の直書き比較を廃止)。配列名 parties[] は UI 互換で残置(customers エイリアス併存)。

主なファイル

  • DX/demo/crm/assets/data.js
  • DX/demo/crm/assets/app.js
  • DX/demo/crm/index.php
  • DX/demo/shared/master-manifest.json

確認(Docker)

依頼例: マスタ統一手順 Step 24 完了。これで手順は一通り完了です。

関連ドキュメント