Recorder Mode 運用ガイド
--recorder-mode フラグで起動した「軽量記録専用モード」の使い方・配布方法・確認方法。
spec:
standalone-recorder-appPhase 0 PoC 関連実測値:archive/refactoring/recorder-poc-metrics.md(リポジトリ archive 配下。docs サイトには未収録)
何ができるか
- メモリ ~180 MB で常駐 (Viewer フル 1012 MB の 18%)
- ログ監視 + DB 保存 を UI なしで実行 (auto-start)
- ブラウザ自動化 (
recorderBrowserAutomation.enabled=trueの opt-in 時のみ) - トレイアイコン + 30 秒間隔のメトリクスログ + 試合検出時に console 出力
CLI フラグ (一時的な上書き)
UserSettings を変えずに 1 回だけ動作を変えたいとき:
# ブラウザ自動化を強制 ON + 画面付き (--headed) で起動
yarn dev:electron:recorder:browser
# または手動で:
node scripts/dev/run-electron.cjs . --recorder-mode --browser-automation --headed| flag | 効果 |
|---|---|
--browser-automation | enabled を強制 ON |
--no-browser-automation | enabled を強制 OFF |
--headed | headless=false (画面を出す) |
--headless | headless=true (default) |
--target-url=<url> | targetUrl 上書き |
--auto-full-workflow | autoFullWorkflowOnStart=true |
優先順位: CLI > UserSettings > default
トレイ右クリックメニューで設定変更
Recorder 起動中、トレイアイコン右クリックで以下のメニューが開く:
状態: 監視 N 件 / ブラウザ ON (read-only)
─────
☐ ブラウザ自動化 ← トグル (UserSettings.json に保存 + 即時反映)
☐ ヘッドレス (画面を出さない) ← トグル (再起動)
☐ 起動時 fetchSeasonOnly を実行
─────
今すぐ fetchSeasonOnly を実行 ← 1 回だけ即実行
ブラウザ自動化を再起動
─────
終了トグル操作は <userData>/user-settings.json の recorderBrowserAutomation を 更新し、必要なら BrowserAutomation を即座に再起動する。Viewer を起動せずに Recorder 単独で設定変更できる。
ブラウザ自動化の有効化 (Viewer 経由 / 手動編集)
Recorder mode は Viewer 側 localStorage の設定を読めない ため、UserSettings.json に専用 section を持つ。
<userData>/user-settings.json を編集 (例):
{
"myUid": "1046101022",
"myPlayerNames": ["MyName"],
"recorderBrowserAutomation": {
"enabled": true,
"headless": true,
"targetUrl": "https://xzysteam.shengtiangames.com/gamerecords/dist/index.html#/pages/home/index",
"autoFullWorkflowOnStart": false
}
}| field | 説明 |
|---|---|
enabled | true で Recorder 起動時にブラウザ自動化を開始 (default false) |
targetUrl | ナビゲート先 URL (空で DEFAULT) |
headless | true でヘッドレス起動 (画面を出さない、default true) |
autoFullWorkflowOnStart | true で起動時に fetchSeasonOnly を 1 回走らせる |
ログイン状態は Playwright の storageState に依存。Viewer で 1 度ログインを完了すると Cookie が <userData>/playwright/storage-state.json に記録され、Recorder もそれを読み込む。
試す手順 (開発時)
1. 前提
Viewer を 1 度起動して Profile を作成しておく必要があります (Profile に紐付いたログディレクトリを Recorder が読むため)。
# 通常起動して、オーバーレイタブのプロファイル設定で Profile を 1 つ作る
corepack yarn dev:electronProfile を保存したら一旦終了。
2. Recorder mode で起動
corepack yarn dev:electron:recorderconsole に以下が出れば成功:
🎙️ [Recorder mode] UI 抑制で起動 — renderer / overlay / BP ウィンドウは作りません
[Recorder] window 作成をスキップ
[Recorder] BPOpponentWindow をスキップ
[TrayService] 初期化しました
🟢 [Recorder] 監視開始: C:\path\to\log\dir
🎙️ [Recorder] 1 個のディレクトリを監視中
📊 [MetricsLogger] uptime=0s | total: 89.3MB / 0.0%CPU | processes=1
📊 [MetricsLogger] 計測開始 (30s 間隔)ゲームを起動して 1 戦すると:
📝 [Watcher:C:\...\log\dir] (各種ログ行)
🎬 [Watcher:C:\...\log\dir] phase → BP
🎬 [Watcher:C:\...\log\dir] phase → INGAME
🎬 [Watcher:C:\...\log\dir] phase → RESULT
✅ [Recorder] 試合 #1 検出: type=Rank_2v2 my=Win (W2 L2) → DB 保存済み3. 終了
トレイアイコンを右クリック → 「終了」 (既存の TrayService 経由)。 または console で Ctrl+C。
4. 記録の確認
- Viewer (
yarn dev:electron) で起動 → DB閲覧タブ → Recorder 動作中に保存された試合が見える - 直接 SQLite を覗く:
userData/matches.db(DB Browser for SQLite 等)
本番配布の方法
現状 (Phase 0): ビルド時に自動で 2 つの exe が生成される
electron-builder の afterPack フックで WingStats Manager.exe をコピーして WingStats Recorder.exe を作るので、通常のビルドコマンドで 2 つの exe が同時に出力 されます。
yarn build:electron:win
# → release/win-unpacked/
# ├ WingStats Manager.exe (Viewer)
# ├ WingStats Recorder.exe (Recorder, 自動生成)
# └ resources/ (両方が共有)NSIS インストーラ (*.exe Setup) を実行すると、Program Files 配下に 両方の exe が同時にインストール され、両方のショートカットが自動作成 されます (build/installer.nsh で NSIS をカスタマイズ済):
WingStats Manager(スタートメニュー / デスクトップ) → Viewer 起動 (electron-builder 標準)WingStats Recorder(スタートメニュー / デスクトップ) → Recorder 起動 (build/installer.nshのcustomInstallで追加)- アンインストール時はどちらのショートカットも自動削除される
フラグなしでダブルクリックするだけ で recorder mode に入ります (exe 名に "recorder" を含む自動判定)。
💡 ビルド済み win-unpacked から手動で recorder.exe を作りたいときは
yarn make-recorder-exeも使える (afterPack を経由しないケース用)。
GitHub Actions
.github/workflows/release.yml が既存の yarn build:electron を呼んでおり、afterPack フックが自動で走るため、タグ push (v*) の release ビルドにも 2 つの exe が含まれる。追加 workflow 変更は不要。
Phase 0 配布の追加選択肢
リネームコピー以外でも recorder mode に入る方法を併用可能:
方法 A: ショートカット
WingStats Manager.exeのショートカットを作成- プロパティ → リンク先末尾に
--recorder-modeを追加"C:\...\WingStats Manager.exe" --recorder-mode - ショートカット名を「WingStats Recorder」に rename
- 必要なら「実行」ドロップダウンで「最小化」を選択 (UI 出ないので無関係だが整合性のため)
方法 B: バッチファイル (.bat)
@echo off
chcp 65001 >nul
start "" "C:\...\WingStats Manager.exe" --recorder-modeこのファイルを保存して、ダブルクリックで起動。chcp 65001 で console を UTF-8 にしてから起動するため、デバッグ時に console を覗いても文字化けしない。
方法 C: Steam 起動オプション (auto-launch spec と組合せ)
Steam で星の翼のプロパティ → 起動オプションに以下を貼る:
cmd /c start "" "C:\...\WingStats Manager.exe" --recorder-mode --launched-by-steam & "%COMMAND%"Steam Play でゲーム起動と同時に Recorder が常駐起動。
将来 (Phase 1+): 別 exe で配布
WingStats Recorder.exe を電子ビルダー別 target として生成予定 (T05-T06)。インストーラのチェックボックスで opt-in 選択可能に (T09)。
トラブルシュート
Q: 起動したが 「監視するログディレクトリが見つかりません」
→ Viewer で Profile を 1 つ作って logDir を設定してから再起動。
Q: ゲームを起動しても何も検出されない
- Profile の
logDirが正しいか確認 (Viewer のプロファイル設定で確認可) - ゲームのログが本当にそのディレクトリに書かれているか確認 (
watch/tailで確かめる) - console に
📝 [Watcher:...]のログ行が出ているか確認 — 出ていなければファイル監視が走っていない
Q: 文字化け (cp932)
yarn dev:electron:recorder には chcp 65001 が組み込まれているので通常出ない。手動で WingStats Manager.exe --recorder-mode を直接実行した場合は、cmd で先に chcp 65001 を打ってから起動。
Q: 終了の仕方
トレイ右クリック → 終了。console から Ctrl+C でも可。Task Manager で electron.exe を kill しても DB は WAL なので破損しない。
動作確認テスト (将来)
T03 以降で以下を追加予定:
- 単体テスト:
RecorderAutoStart.start()が Profile が無いとき startedCount=0 を返す (mock DB) - integration test: 実 Electron を
--recorder-modeで spawn → ログを fixture から流し込み → DB に試合が保存されるか確認 - ベンチマーク回帰: PoC で計測した 182 MB から大幅に増えていないこと