アプリ設計状況まとめ(2026-08-12 時点)
注記: この文書は 2026-08-12 時点のスナップショット。本文の「Zustand + persist」は古く、persist は撤去済み。 現在のオーバーレイ設定の正本と同期は Sync and State を参照。
現時点でのアプリ全体の設計状況・リリース状況・未マージ PR の実装形態を俯瞰するスナップショットドキュメント。
1. リリース状況
| 項目 | 状態 |
|---|---|
| 最新リリース | v6.1.0(main の最新タグ) |
| main | v6.1.0 リリース時点 + develop 統合マージのみ |
| develop | 未リリースの変更が約 40 コミット蓄積(次期 6.2 相当) |
| E2E 運用 | 2026-07-03 より停止中(workflow_dispatch のみ。スクショは手動キャプチャ代替) |
リリースは git-flow lite 2 トラック運用(キャラ追加 = chars/* off main で patch / 機能 = develop 集約で minor)。
2. 現行アーキテクチャの骨子
詳細は各設計ドキュメントを参照。ここでは全体像のみ。
- 3 実行体パッケージング: Manager(管理 GUI)/ Recorder(ログ監視・記録)/ Viewer(BP 表示)の 3 exe 構成。
- Manager+Recorder 並走時、委譲モード Manager は matches.db を read-only で開く単一 writer 設計(WAL 変換競合対策、PR #227 で確立)。
- BP ウィンドウの表示権は
manager.lockによる Manager 優先調整(PR #224、未マージ→ §4)。
- UID 解決の一元化: main プロセス
electron/services/resolveMyUid.tsに統一(PR #219 マージ済み)。renderer 側はresolve-my-uidIPC +useResolvedMyUidフックへ寄せる(PR #225、未マージ→ §4)。localStorage('myUid')は書き手のない死にキー。 - 状態同期: Zustand + persist + SyncAdapter パターン(Electron IPC / WebSocket / BroadcastChannel / localStorage polling の CompositeAdapter)。→ Sync and State
- ログ解析: LogParserCore(純粋関数)/ StreamLogParserV2(リアルタイム)/ LogParser(一括)の 3 層。→ Log Parser Engine
- DB: better-sqlite3。マイグレーション順序規約「新列参照の CREATE INDEX は migrate の後」(6.1.0 の起動不能バグの教訓)。→ Database Design
- 戦績 API 直叩き: ブラウザレスでの API 直接呼び出し(token ヘッダのみ)。→ Battle Record Direct API
- テスト基盤: 全 Vitest を Electron ABI(140) ラッパーに一本化。
test:relatedによる差分実行。fresh-install smoke ハーネス(yarn test:fresh:{dev,portable,installed,upgrade})を新設(develop、未リリース)。
3. develop に溜まっている未リリースの主な変更(マージ済み)
| テーマ | 内容 | 主な PR |
|---|---|---|
| 初回起動フロー再設計 | Onboarding にアカウント登録ステップ追加・初回ダイアログの優先度キュー化・ブラウザ自動起動を opt-in 化・ログイン前にプロファイル紐づけ先を選択させ不一致警告 | #232, #233 ほか(設計書: docs/superpowers/specs/2026-07-29-first-launch-onboarding-flow-design.md) |
| fresh-install smoke ハーネス | 実 exe を空 userData で起動し update.log の boot マーカーで判定。legacy スキーマからのアップグレード起動検証も含む | #226 |
| DB 初期化競合の解消 | 委譲モード Manager の read-only 化(単一 writer)。read-only 下の書込は isDatabaseReadonly でガード | #227 |
| オーバーレイ起動挙動 | 初回起動は非表示で開始・非表示中はタスクバー非表示・画面外座標の補完 | #229, #230, #234 |
| ブラウザ自動化の競合修正 | ログインページ遷移の二重トリガ競合・ウィンドウサイズ問題 | #231 |
| プロファイル機能拡張 | プロファイルの「メイン」指定(active profile UID) | #233 |
| テスト監査 | 無駄テスト削除・弱アサーション強化・デッドスイート復活・モックパス誤り修正 | #228 |
4. オープン PR(未マージ)と実装形態
2026-08-12 時点で 6 件。すべて base = develop。
すぐマージ可能(CLEAN)
- #225 fix(uid): renderer 側の UID 解決を main の
resolveMyUidに統一(+640/-63)- renderer に残っていた
localStorage('myUid')直読み 2 箇所(overlaySlots の RecentResults/MvpCounter、DailySummaryTab)をresolve-my-uidIPC +useResolvedMyUidフック経由に置換。OBS ブラウザソース側(ObsOverlayServer / obsBrowserBridge)にも解決済み UID を配る。#219(main 側統一)の develop 未着分の取り込みを含む。
- renderer に残っていた
- #224 fix(bp): Manager+Viewer 並走時の BP ウィンドウ二重表示を修正(+214/-32)
manager.lock(processLock)を導入し、Viewer は存命 Manager を検知したら自前 BP ウィンドウの show のみ抑制する Manager 優先設計。bpAutoVisibilityにロック判定を組み込み。再現には委譲トポロジ 3 プロセスが必要で、検証は WS ポート分離で実施済み。
- #223 fix(obs): オーバーレイ全面背景を透明化(+4/-1)
OverlayViewルートに敷かれていたテーマ半透明グラデーション(例: cyberpunk 0.2α)を除去。OBS キャプチャでゲーム画面が薄く色づく問題の解消。1 ファイルの小修正。
- #217 docs: リファクタリング総合評価 2026-07-11(+214/-0)
- 7 領域並列調査 + churn 分析による優先度付きリファクタリング実行計画。
docs/architecture/refactoring-assessment-2026-07-11.mdを追加し VitePress サイドバーに登録。次の改善サイクルの起点ドキュメント。
- 7 領域並列調査 + churn 分析による優先度付きリファクタリング実行計画。
draft(作業途中 / 引き継ぎ待ち)
- #202 docs: god ファイル/巨大関数分割キャンペーン引き継ぎ書(draft, CLEAN, +236/-0)
- サンドボックス(Electron 起動不可環境)で進めた分割キャンペーンをローカルで継続するための引き継ぎ書(
docs/archive/handover-god-file-split-2026-07.md)。ドキュメントのみでコード変更なし。
- サンドボックス(Electron 起動不可環境)で進めた分割キャンペーンをローカルで継続するための引き継ぎ書(
- #201 refactor: PlayerDashboardTab を設定/分析ビューに分割(draft, CONFLICTING, +609/-232)
- 328 行の render 関数を
DashboardSetupView/DashboardAnalysisViewの 2 presentational view に分割し、max-lines-per-function(250 行)baseline から除外する tech-debt 返済。develop と競合中のため、マージにはgit merge developでの競合解消が必要(rebase は運用禁止)。作成が 7/4 と古く、以降の DailySummaryTab 周辺変更(#225 とも同ファイル群)と衝突リスクあり。
- 328 行の render 関数を
マージ順の推奨
- #217 / #202(docs のみ、無風)
- #223(1 ファイル小修正)
- #224 → #225(ともに Electron main / renderer に触るが独立。#225 は DailySummaryTab を触るため #201 より先に入れる)
- #201(develop を merge して競合解消後に draft 解除)
5. 進行中・未着手の設計テーマ
| テーマ | 状態 |
|---|---|
| recording-service-split | A(#148)・B1(#149) マージ済み。B2〜F が未着手(各フェーズ 1 PR、確認なしで進める運用) |
| プロファイル別戦績 API | Phase 1(認証基盤・全トークン保存・自動ルーティング)= #209 マージ済み。Phase 2/3(マージ表示拡張ほか)が残 |
| telemetry リモート収集 | Phase 1/2 マージ済み・D1 作成済み。残: schema 適用 → secret → deploy → constants.ts へ URL/token 反映 PR |
| god ファイル分割 | #200 で per-function guard 導入済み。#201 が最初の返済 PR(競合中)。全体計画は #202 の引き継ぎ書と #217 の評価ドキュメント |
| E2E 再開 | 停止中。再開時は「実装完了の必須要件(E2E + スクショ)」を復活させる |
関連ドキュメント
- Source Architecture / Electron Main / Database Design / Sync and State / Log Parser Engine
- 初回起動フロー設計書(develop):
docs/superpowers/specs/2026-07-29-first-launch-onboarding-flow-design.md - fresh-install 運用ガイド(develop):
docs/operations/fresh-install-testing.md