framer-motion-best-practices について
ReactアプリのFramer Motionアニメーションを対象とした、パフォーマンス改善のためのガイダンススキルです。アニメーションを実装・リファクタリングする開発者向けに、バンドルサイズ、再レンダー、レイアウト、スクロール、ジェスチャー、終了時の処理を優先度順に扱います。
主な機能
- 019カテゴリにわたる42のルール
- 02優先度別のアニメーション指針
- 03バンドルサイズの最適化
- 04再レンダーの抑制
- 05レイアウト・スクロールアニメーションのパターン
- 06ジェスチャー、スプリング、SVG、終了時の指針
活用シーン
- 01アニメーションの多いReactアプリのバンドル最適化
- 02アニメーション中の再レンダー削減
- 03レイアウトや共有要素の遷移実装
- 04スクロール連動やジェスチャー操作の構築
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill framer-motion-best-practicesインストール後、Claude Code で/framer-motion-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdanim-hardware-acceleration.mdanim-independent-transforms.mdanim-keyframes-array.mdanim-opacity-filter.mdanim-transform-properties.mdanim-will-change.mdbundle-dom-animation.mdbundle-dynamic-features.mdbundle-lazy-motion.mdbundle-strict-mode.mdbundle-use-animate-mini.mdexit-animate-presence.mdexit-mode-wait.mdexit-unique-keys.mdgesture-drag-constraints.mdgesture-drag-elastic.mdgesture-tap-cancel.mdgesture-variants-flow.mdgesture-while-props.mdlayout-dependency.mdlayout-group.mdlayout-id-shared.mdlayout-position-size.mdlayout-scroll.mdrerender-animate-prop.mdrerender-motion-value-event.mdrerender-motion-value.md詳細
Community Framer Motion のベストプラクティス
React アプリケーションにおける Framer Motion アニメーションの包括的なパフォーマンス最適化ガイドです。9 カテゴリーにわたる 42 のルールを、影響度の高い順にまとめ、自動リファクタリングとコード生成に役立てます。
適用するタイミング
次のような場合に、これらのガイドラインを参照してください。
- Framer Motion を使って React コンポーネントにアニメーションを追加するとき
- アニメーションを多用するアプリケーションのバンドルサイズを最適化するとき
- アニメーション中の不要な再レンダリングを防ぐとき
- レイアウト遷移や共有要素のアニメーションを実装するとき
- スクロール連動またはジェスチャーベースのインタラクションを構築するとき
優先度別のルールカテゴリー
| 優先度 | カテゴリー | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | バンドルの最適化 | CRITICAL | bundle- |
| 2 | 再レンダリングの防止 | CRITICAL | rerender- |
| 3 | アニメーションプロパティ | HIGH | anim- |
| 4 | レイアウトアニメーション | HIGH | layout- |
| 5 | スクロールアニメーション | MEDIUM-HIGH | scroll- |
| 6 | ジェスチャーの最適化 | MEDIUM | gesture- |
| 7 | スプリングと物理演算 | MEDIUM | spring- |
| 8 | SVG とパスのアニメーション | LOW-MEDIUM | svg- |
| 9 | 終了時のアニメーション | LOW | exit- |
クイックリファレンス
1. バンドルの最適化(CRITICAL)
bundle-lazy-motion-motionの代わりに LazyMotion とmコンポーネントを使用するbundle-dynamic-features- モーション機能を動的にインポートするbundle-dom-animation- 基本的なアニメーションには domAnimation を使用するbundle-use-animate-mini- シンプルなケースには mini useAnimate を使用するbundle-strict-mode- 意図しないインポートを検出するために strict mode を有効にする
2. 再レンダリングの防止(CRITICAL)
rerender-motion-value-useStateの代わりに useMotionValue を使用するrerender-use-transform- useTransform で値を導出するrerender-stable-callbacks- アニメーションのコールバックを安定させるrerender-variants-object- バリアントをコンポーネントの外で定義するrerender-animate-prop- 安定した animate の値を使用するrerender-motion-value-event- モーション値のイベントを使用する
3. アニメーションプロパティ(HIGH)
anim-transform-properties- transform プロパティをアニメーションするanim-opacity-filter- 視覚効果には opacity と filter を優先するanim-hardware-acceleration- ハードウェアアクセラレーションを活用するanim-will-change- willChange prop を適切に使用するanim-independent-transforms- transform を個別にアニメーションするanim-keyframes-array- シーケンスにはキーフレーム配列を使用する
4. レイアウトアニメーション(HIGH)
layout-dependency- 測定を制限するために layoutDependency を使用するlayout-position-size- 適切にlayout="position"または"size"を使用するlayout-group- 関連するレイアウトアニメーションをグループ化するlayout-id-shared- 共有要素の遷移に layoutId を使用するlayout-scroll- スクロール可能な祖先要素に layoutScroll を追加する
5. スクロールアニメーション(中〜高)
scroll-use-scroll- useScroll フックを使用したスクロール連動アニメーションscroll-use-spring-smooth- useSpring による滑らかなスクロールアニメーションscroll-element-tracking- 特定の要素がビューポートに入るタイミングを追跡scroll-offset-configuration- スクロールオフセットを設定scroll-container-ref- 特定のコンテナー内のスクロールを追跡
6. ジェスチャーの最適化(中)
gesture-while-props- ハンドラーの代わりに whileHover/whileTap を使用gesture-variants-flow- ジェスチャーバリアントを子要素に継承gesture-drag-constraints- 境界の設定に dragConstraints ref を使用gesture-drag-elastic- 自然な操作感になるよう dragElastic を設定gesture-tap-cancel- 中断されたジェスチャーには onTapCancel を使用
7. スプリングと物理演算(中)
spring-physics-based- 中断可能にするため、物理ベースのスプリングを使用spring-damping-ratio- 振動を制御するよう減衰を設定spring-mass-inertia- 重い、または軽い操作感になるよう質量を調整spring-use-spring-hook- リアクティブな値に useSpring を使用
8. SVG とパスアニメーション(低〜中)
svg-path-length- 線を描くアニメーションに pathLength を使用svg-motion-components- motion.path と motion.circle を使用svg-viewbox-animation- ズーム効果を得るために viewBox をアニメーション化svg-morph-matching-points- モーフィングする図形の点の数を一致させる
9. 終了アニメーション(低)
exit-animate-presence- 条件付きレンダリングを AnimatePresence でラップexit-unique-keys- AnimatePresence の子要素に一意のキーを指定exit-mode-wait- 連続したトランジションには mode="wait" を使用
使用方法
詳しい説明とコード例については、各リファレンスファイルを参照してください。
- セクションの定義 - カテゴリーの構成と影響度
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応