Skip to content

UI/Core Initialization Dependency Report (Japanese) (UI Side) #237

@kochizufan

Description

@kochizufan

UI/Core Initialization Dependency Report (Japanese)

目的

この文書は、MaplatCore と Maplat UI の初期化依存関係を現在/改善後の両方で整理します。

  • Confluence に貼り付けて記録として残せること
  • 実装担当の LLM に対して、構造と作業対象が一意に伝わること

参照(主要ファイル)

  • Maplat UI constructor と waitReady ロジック: ..\Maplat\src\index.ts
  • Maplat UI 初期化フロー: ..\Maplat\src\ui_init.ts
  • MaplatCore 初期化フロー: ..\MaplatCore\src\index.ts

現行の初期化パス

パスA: stateUrl が OFF(直列初期化)

  1. MaplatUi constructor が waitReady を initializer(appOption) に設定。
  2. uiInit が MaplatCore を作成し、appdata を購読。
  3. Core が settingLoader -> handleSetting -> appdata を発火。
  4. UI が appdata を受け取り、i18nLoader を開始し uiPrepare を待機、appDataLoaded を実行。
  5. Core が prepareMap で DOM 挿入前に uiPrepare を発火。
  6. UI の uiPrepare が走り(controls + 翻訳)、appDataLoaded が完了。
  7. Core が sources ロード -> setInitialMap -> map イベント -> waitReady 解決。
  8. UI が core.waitReady 後に map イベントや modal ハンドラを bind。

パスB: stateUrl が ON(遅延初期化)

  1. MaplatUi constructor が page を初期化し、waitReady を未解決の Promise に設定。
  2. page のコールバックが発火し、core が未生成なら initializer(appOption) を実行。
  3. 以後の流れはパスAと同様。
  4. restore と更新後に waitReadyBridge を解決。

現行の処理インベントリ(生産者別)

MaplatCore(現行順序)

  • C1: settingLoader(app data 読み込み)
  • C2: handleSetting(appData 正規化、appdata 発火)
  • C3: prepareMap(uiPrepare 発火、DOM 挿入、MaplatMap/back map 作成)
  • C4: normalize layers / pois
  • C5: sourcesLoader -> handleSources -> setInitialMap -> changeMap
  • C6: geolocation と GPS イベント初期化
  • C7: map click / pointer ハンドラ

Maplat UI(現行順序)

  • U1: uiInit(core 作成、appdata を購読)
  • U2: i18nLoader(async)
  • U3: uiPrepare ハンドラ(DOM 翻訳、controls 作成)
  • U4: appDataLoaded(restore、class 付与、DOM 初期化、modal ハンドラ)
  • U5: initMapEventListeners(core.waitReady 後)
  • U6: initGpsHandlers(appDataLoaded 後、waitReady 前後)

現行依存関係マトリクス(抜粋)

ID タスク 生産者 依存 出力 消費者 備考
D1 appdata event Core C1 appData UI UI が i18n と UI 初期化を開始
D2 uiPrepare event Core C2 event only UI DOM 挿入前に発火
D3 i18nLoader UI D1 ui.i18n, ui._t uiPrepare 非同期依存
D4 controls 作成 UI D3 controls 配列 Core MaplatMap 作成前に必要
D5 DOM 翻訳 UI D3 + DOM 翻訳済 DOM UI DOM が必要
D6 mapObject イベント UI core.waitReady listener mapObject core-ready 後
D7 modal ハンドラ UI mapDivDocument UI DOM listener UI DOM が必要

現行の競合点

  • uiPrepare が DOM 挿入前に発火するため、DOM 翻訳と衝突。
  • controls は MaplatMap 作成前に必要だが、DOM 翻訳は DOM 後に必要。
  • stateUrl on/off で初期化の起点が変わる。

改善後フェーズ(提案)

フェーズ 内容 提供されるもの
lifecycle:setting-loaded 設定読み込み appData(raw)
lifecycle:appdata-ready appData 正規化完了 appData(normalized)
lifecycle:ui-configure i18n + controls + UI flags(DOM なし) controls, i18n, UI flags
lifecycle:core-dom-ready mapDiv DOM 挿入完了 mapDivDocument
lifecycle:ui-dom-ready DOM 翻訳 + DOM 依存 UI 初期化 翻訳済 DOM, DOM UI bind
lifecycle:core-ready mapObject / sources 準備完了 mapObject, sources
lifecycle:ui-ready UI bind 完了 UI interactions

改善後依存マトリクス(抜粋)

フェーズ タスク 生産者 依存 出力 備考
ui-configure i18nLoader UI appdata-ready ui.i18n, ui._t DOM を触らない
ui-configure controls 作成 UI i18nLoader controls 配列 Map 作成前に Core へ渡す
core-dom-ready DOM 挿入 Core ui-configure 完了 mapDivDocument DOM 翻訳より先
ui-dom-ready DOM 翻訳 UI core-dom-ready + i18n 翻訳済 DOM data-i18n/din を置換
core-ready mapObject イベント UI core-ready listener mapObject 利用可能
ui-ready modal ハンドラ UI ui-dom-ready modal bind DOM 依存

段階移行計画(1つずつ)

  1. lifecycle イベントの枠組み追加(挙動は変えない)。
  2. controls 作成を lifecycle:ui-configure に移動。
  3. i18n 初期化を lifecycle:ui-configure に移動。
  4. DOM 翻訳を lifecycle:ui-dom-ready に移動。
  5. modal ハンドラ bind を ui-dom-ready か ui-ready に移動。
  6. map event listener を core-ready に移動。
  7. stateUrl on/off の両パスで確認。

検証チェックリスト(LLM 実装向け)

  • ui-configure が map 作成前に実行され、controls を Core に渡す。
  • core-dom-ready が DOM 挿入後に実行される。
  • ui-dom-ready が core-dom-ready と i18n 後に実行される。
  • core-ready が sources / mapObject 完了後に実行される。
  • ui-ready が UI bind 完了後に実行される。
  • stateUrl ON/OFF 両方で waitReady が正常に解決する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions