Linear ArchiveArchived issues viewer
← Back to list
INS-861

BGM管理 2系統になっている問題の対策検討(根本的にはホーム画面BGM停止問題対策をシンプルに)

StatusDone
TeamInstansys
Assignee松尾弥玖人
PriorityMedium
Created2026/06/17 03:59
Completed2026/07/13 04:14
Archived2026/07/21 00:45

Description

現在の問題として、すべてBGMは、CDNからDLして再生しているにも関わらず、ホーム画面のデフォルトBGMだけ特別扱いで、管理の論理が一本化されておらず、2系統存在しており、BGM再生論理が歪んでいる。BGM停止しやすい問題の根本要因もこの管理のしづらさ、論理の導きにくさにもある。 この対策を検討する

Comments (6)

asuki.uehata@instansys.co.jp2026/06/17 04:00

ホーム画面のデフォルトBGMも、すべて、Luna BGMで 統一し、管理も1本化 するのが、1番 コスト少なくてシンプル と考える

ただし、実務的な確認点がいくつかある

asuki.uehata@instansys.co.jp2026/06/17 04:08

なぜシンプルになるか

Before(現状)
┌─ Default ─→ R2 (R2.assetsOrigin) + サーバー home-assets.ts が無条件返却 + bundle 所有
└─ Luna ───→ supabase + client が動的 add + dynamicallyAddedBgmAliasRef 所有

After(統一)
└─ 全部 Luna ─→ supabase + client が `bgmId` を見て一律処理(特例ゼロ)
asuki.uehata@instansys.co.jp2026/06/17 04:08

消えるもの:

  • home-assets.ts:26 の無条件追加
  • Home.tsx:454-461 の useMemo フォールバック分岐
  • Home.tsx:504-506 の Luna→null 時の即 playBGM 特例
  • HomeCharacterSelectModal.tsx:180 の同様の特例
  • constants/bgm.tsBGM.HOME の存在意義(Home に閉じてるなら)
  • preload.ts:462-469 の "再生中BGM保護" を default で意識する必要性

Home BGM 周辺コードがざっくり半分以下になる見込み。

asuki.uehata@instansys.co.jp2026/06/17 08:31

1. 問題背景

INS-833 でバグ調査した結果、表面的な「BGM 設定変更時のエラー」だけじゃなく、もっと根本的な構造的な歪みがあることが分かった。それを共有して、対応方針を決めたい。

2. 構造的な歪み(具体的に2つ)

(1) BGM の管理が path 系と URL 系の2系統で並走している。

  • ゲーム本体の BGM(Home / Caravan / Result / Title / Gacha / バトル / チャプター)は path 表現 で管理されている (例: "sounds/bgm/home.m4a")
  • Luna Editor 経由の BGM は URL 表現 (例: "https://...supabase.co/...")
  • 両方とも CDN ダウンロードでアプリ内蔵ではないので、本質的には同じものだが、実装上は完全に別経路で扱われている。

(2) 同じ非同期パターン(ロード→ポーリング→再生)が複数シーンに重複コピペされている。

  • Home.tsx、HomeCharacterSelectModal.tsx の2箇所に、同じ ~20行のポーリングコードが個別実装されている
  • もしバグが見つかったら、両方を直さなければならない

3. これが引き起こしている実害

  • INS-833 のような「デフォルト BGM の設定変更でアサーションエラー」が出るのは、2系統の特例ロジック(default は常駐前提)が crossfade lifecycle と矛盾するため
  • 現在、別件だが、キャラバン / ガチャ / 祈願で似た BGM バグが起きている(再現性が低くて未追求のものを含む)
  • 新しい BGM 機能を追加するたびに、どっちの系統で管理するか考えるコストが発生する

4. 提案する方向性

(a) BGM 再生を単一のヘルパー関数 (playBgmAfterLoad) に集約する

  • 重複した非同期パターンを一箇所に統合
  • 新規追加・修正時の影響範囲が局所化

(b) BGM 表現を URL に統一する(段階的に)

  • ゲーム本体側の BGM も Luna 系と同じ URL ベースに揃える
  • これによって、ヘルパーを通じた完全に対称な扱いが可能になる
  • 副次的に「SoundAssetPath 型」「asset-manifest.json」「マスタデータの bgmPath」などの整理も必要になるが、これらは段階的に進められる

5. 段階的アプローチ(リスク管理)

一気に全部書き換えるのではなく、フェーズ分け:

  • フェーズ 0(今すぐ): INS-833 のエラーをヘルパー導入で塞ぐ(モーダル / Home.tsx の 2箇所)
  • フェーズ 1(次): Home BGM だけ URL 化、検証
  • フェーズ 2(その後): Caravan / Result / Gacha / Title を順次 URL 化
  • フェーズ 3(最後): バトル / チャプター BGM をマスタデータごと URL 化

各フェーズ独立して deploy・検証可能で、問題があれば次に進まない判断ができる。

asuki.uehata@instansys.co.jp2026/06/17 08:33

260617 代表との相談により、ファイルパス preload 廃止 → URL preload 再生 統一化の方向で BGMサウンドシステムを修正していく。現在のバグも修正し、今後のバグもおきにくいように。また、これまで実装したファイルパスpreloadならこれ、URLpreload再生ならこれといった、複雑な論理をシンプル化していく。

asuki.uehata@instansys.co.jp2026/07/06 05:49

BGMとして、ファイルキャッシュする必要性がないなら、2系統の問題は改善した方がよい。もしファイルキャッシュの必要性があるのなら、場合によっては修正しなくてよい?