implementation-debugging について
CSSやJavaScriptのアニメーション問題を調べる開発者向けガイドです。症状とアニメーション原則に沿った確認手順に加え、DevToolsでの調査方法と修正案をまとめています。
主な機能
- 01症状に応じたアニメーション診断
- 02原則に基づくデバッグ項目
- 03よくある不具合の原因と修正
- 04DevToolsの確認チェックリスト
- 05JavaScriptアニメーションイベントの記録
活用シーン
- 01アニメーションが始まらない原因の特定
- 02ちらつきや動作のカクつきの調査
- 03環境ごとの挙動の比較
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill implementation-debuggingインストール後、Claude Code で/implementation-debuggingを入力して読み込まれたか確認します。
詳細
実装のデバッグ
Disneyの原則を診断の枠組みとして、アニメーションの問題をデバッグします。
問題の兆候
- アニメーションがまったく再生されない
- アニメーションは再生されるが、見た目がおかしい
- 開発環境では動作するが、本番環境では動作しない
- ブラウザーによって動作が異なる
- アニメーションが不適切なタイミングで開始される -ちらつきや視覚的な不具合が発生する
原則別の診断
タイミング
問題:アニメーションのタイミングがずれている
デバッグ:時間の値を確認します。単位(ms と s)を確認します。CSS トランジションが上書きされていないか確認します。計算済みスタイルを調べます。
ストレート・アヘッドとポーズ・トゥ・ポーズ
問題:キーフレームが適用されない
デバッグ:すべてのキーフレームのパーセンテージを確認します。プロパティ名に誤字がないか確認します。値がアニメーション可能であることを確認します。
ステージング
問題:アニメーションが隠れている、または切り取られている
デバッグ:z-index、overflow、opacity を確認します。要素がビューポート内にあることを確認します。visibility: hidden が設定されていないか確認します。
ソリッド・ドローイング
問題:アニメーション中に視覚的な不具合が発生する
デバッグ:サブピクセルレンダリングの問題がないか確認します。GPU レイヤーを作成するために transform: translateZ(0) を追加します。レイアウトスラッシングが発生していないか確認します。
フォロースルー
問題:アニメーションが突然終了する、または誤った状態になる
デバッグ:animation-fill-mode を確認します。終了状態が CSS と一致することを確認します。競合するアニメーションがないか確認します。
よくあるバグ
| 症状 | 考えられる原因 | 修正方法 |
|---|---|---|
| アニメーションしない | プロパティがアニメーション可能ではない | プロパティを直接変更するのではなく、transform を使用します |
| 開始時にちらつく | 初期状態が設定されていない | 初期値を明示的に設定します |
| 終了状態が誤っている | フィルモード | アニメーションに forwards を追加します |
| 動きがぎくしゃくする | レイアウトスラッシング | transform/opacity のみをアニメーションします |
| 一度しか動作しない | アニメーションがリセットされていない | クラスを削除して再追加するか、JS を使用します |
すぐに試せる修正
- DevTools の Animation パネルを確認する - タイムラインを確認します
- アニメーション可能なプロパティを確認する - すべての CSS プロパティがアニメーションするわけではありません
animation-fill-mode: forwardsを追加する - 終了状態を維持します- GPU レイヤーを強制する -
will-change: transform !importantを確認する - アニメーションを上書きする可能性があります
トラブルシューティングのチェックリスト
- アニメーションクラス/トリガーが適用されていますか?(DevTools の Elements)
- プロパティはアニメーション可能ですか?(
displayは不可、opacityは可能です) - 計算済みスタイルに上書きがないか確認します
- 要素は表示されていますか?(opacity、visibility、display、z-index)
- 実行を妨げる JavaScript エラーはありますか?
- DevTools の Animation パネルを確認します
- シークレットモードでテストします(拡張機能なし)
- 動作する環境と動作しない環境を比較します
コードパターン
// Debug: Log animation events
element.addEventListener('animationstart', (e) => {
console.log('Animation started:', e.animationName);
});
element.addEventListener('animationend', (e) => {
console.log('Animation ended:', e.animationName);
});
// Debug: Check computed animation
const styles = getComputedStyle(element);
console.log('Animation:', styles.animation);
console.log('Transition:', styles.transition);
// Reset animation
element.classList.remove('animate');
void element.offsetWidth; // Trigger reflow
element.classList.add('animate');
DevTools のヒント
- Elements > Styles:計算済みのアニメーション値を確認します
- Performance タブ:フレームを記録して分析します
- Animations パネル:速度を落とし、再生し、調べます
- Console:アニメーションイベントをログに記録します