Skip to content

fix: ブラウザ起動失敗時にプロファイルを自動修復して再試行する - #64

Merged
timakin merged 1 commit into
mainfrom
fix-chromium-profile-crash-recovery
Jul 10, 2026
Merged

fix: ブラウザ起動失敗時にプロファイルを自動修復して再試行する#64
timakin merged 1 commit into
mainfrom
fix-chromium-profile-crash-recovery

Conversation

@timakin

@timakin timakin commented Jul 10, 2026

Copy link
Copy Markdown
Member

背景

利用側リポジトリで bm-view-preview の起動が以下のエラーで落ちる事象が発生した。

browserType.launchPersistentContext: Target page, context or browser has been closed

実機調査の結果、原因は多重起動ではなく、使い込まれた永続プロファイル × 古いChromium(0.0.11のPlaywright 1.53 = Chromium 138)× macOS 26.3.2 の組み合わせで Chromium 本体が起動直後に SIGTRAP でクラッシュするものだった(macOSのクラッシュレポートで確認。空プロファイルでは正常に起動し、同じプロファイルでも 0.0.12 の新しい Chromium なら正常に起動する)。

また、launch の失敗が unhandled rejection になるため、利用者には生のスタックトレースと大量の Chromium ログしか見えず、原因も対処も分からない状態だった。

変更内容

  • プロファイルの自動修復 (lib/chromiumProfile.js 新規): ブラウザ起動に失敗したとき、ログイン情報(Cookies / Login Data / Local Storage / WebStorage / Local State)だけを引き継いだプロファイルに作り直して 1 回だけ再試行する。元のプロファイルは chromium_profile.broken-<timestamp> に丸ごと退避して残す
  • 多重起動の検知: SingletonLock の指す pid が生存している場合は「プロファイルを別インスタンスが使用中」なので修復せず、プロセスIDつきの案内を出して終了する(使用中のプロファイルを退避してしまう事故の防止)。stale lock(死んだ pid)は Chromium 自身が回復できるため関与しない
  • エラーハンドリング (bin/bm-view-preview.js): top-level の try/catch を追加し、予期しないエラーを日本語メッセージで表示(生スタックトレースの unhandled rejection を廃止)
  • version bump (0.0.13)

検証

  • pnpm test(vitest 18件)
  • 実際にクラッシュを起こしていた実プロファイルのコピーに修復処理を適用 → クラッシュしていた Chromium 138 で正常起動することを確認
  • 修復後のプロファイルで利用側リポジトリの pnpm views dev が正常起動することを確認
  • 起動中にもう1プロセス実行 → 修復は走らず、プロセスIDつきメッセージで終了することを確認

🤖 Generated with Claude Code

使い込まれたプロファイルと古いChromium・新しいmacOSの組み合わせで
Chromiumが起動時にクラッシュし、unhandled rejectionの生スタック
トレースでbm-view-previewが落ちることがあった。

- 起動失敗時、ログイン情報(Cookies / Login Data / Local Storage /
  WebStorage / Local State)だけを引き継いだプロファイルに作り直して
  1回だけ再試行する。元のプロファイルは丸ごと退避して残す
- 別のbm-view-previewが同じプロファイルで起動中の場合は修復せず、
  プロセスIDつきのメッセージを出して終了する
- binにtry/catchを追加し、エラーを日本語メッセージで表示する

version bump (0.0.13)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@timakin
timakin requested a review from a team as a code owner July 10, 2026 06:49
@timakin
timakin requested review from m-shaka, taro-28 and yebis0942 July 10, 2026 06:49
@timakin
timakin merged commit 8c35518 into main Jul 10, 2026
1 check passed
@timakin
timakin deleted the fix-chromium-profile-crash-recovery branch July 10, 2026 06:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants