bug-investigation
ランタイム動作の不具合(再生制御、状態遷移、イベントタイミングなど)を調査・修正する際の標準手順。 外部 API や非同期イベントが絡む不具合に使う。コードを読むだけで確証が出ない場面に適用する。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
ランタイム動作の不具合(再生制御、状態遷移、イベントタイミングなど)を調査・修正する際の標準手順。 外部 API や非同期イベントが絡む不具合に使う。コードを読むだけで確証が出ない場面に適用する。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Playwright MCP を使ってブラウザを起動し、実際の画面スクリーンショットを根拠にした UI/UX レビューを行う際の標準手順。UX Review・UI Review v2 エージェントが読み込む。
Issue 対応が完了し PR を作成した後に、実装精度を高めるための振り返りを行う。 実装中に踏んだ罠・判断のブレ・チェック漏れを特定し、instructions.md・SKILL.md・copilot-instructions.md への具体的な改善提案に落とし込む。「ふりかえり」「振り返り」「retro」「改善案」などのキーワードで起動する。
Add a new API resource end-to-end: types, composables, components, and pages. Use when adding a new backend resource, endpoint, or CRUD page set to the Nuxt frontend.
| name | bug-investigation |
| description | ランタイム動作の不具合(再生制御、状態遷移、イベントタイミングなど)を調査・修正する際の標準手順。 外部 API や非同期イベントが絡む不具合に使う。コードを読むだけで確証が出ない場面に適用する。 |
外部 API(YouTube IFrame API など)の動的挙動はコード静的解析だけで確証を得ようとしない。
仮説が 2〜3 出た時点でログを仕込み、実動作で確認する。
仮説に対応する console.log を追加する。ポイント:
// 例
function onSongEnd(source: string) {
console.log(`[DEBUG][onSongEnd] source=${source} songId=${player.currentSong?.id}`)
// ...
}
// 呼び出し元で
onSongEnd('ENDED event')
onSongEnd('time tracking')
以下の条件では迷わずユーザーに委ねる:
委ねるときに渡す情報はシンプルに:
1. 何をトリガーにするか(例:キューに3曲入れて再生し、曲終端にシーク)
2. 何のログを見るか(例:[DEBUG][onSongEnd] が何回出るか)
3. 期待値(例:1回だけ出るはず。2回出たら二重呼び出しが確定)
コンソール出力のテキストをコピペしてもらうのが最も確実。
ログから「何が何回起きたか」が分かったら原因を確定し、修正する。
同じ操作で確認。ログが期待回数になっていれば完了。
// Pinia ストア取得
const pinia = window.__VUE_DEVTOOLS_KIT_APP_RECORDS__?.[0]?.app?.config?.globalProperties?.$pinia
const queue = pinia.state.value.queue
const player = pinia.state.value.player
// YouTube プレイヤー操作
const yt = window.YT.get('yt-player')
yt.getCurrentTime() // 現在時刻
yt.seekTo(seconds, true) // シーク
// Pinia ストアを JS から直接操作(UI が邪魔なとき)
pinia.state.value.queue.isOpen = false
mcp_playwright_browser_evaluate の使い方// NG: run_code では const / var が使えない
// OK: evaluate の function キーに文字列で渡す
evaluate({ function: "() => { const p = window.YT.get('yt-player'); return p.getCurrentTime() }" })
loadVideoById() 呼び出し直後に ENDED イベントが発火することがある(動画切り替え時)