auto-animate について
フロントエンド開発者向けの AutoAnimate 活用スキルです。React、Vue、Svelte、バニラ JavaScript で UI の変更をアニメーション化する方法を、SSR 対応やトラブルシューティングとともに紹介します。
主な機能
- 01追加、削除、並べ替えのアニメーション
- 02React、Vue、Svelte、バニラ JS に対応
- 03SSR 対応の利用方法
- 04動きを減らす設定への配慮
- 05テンプレートと問題解決ガイド
活用シーン
- 01リストの絞り込みや並べ替えのアニメーション
- 02アコーディオン展開時のトランジション
- 03通知のフェードインとフェードアウト
- 04フォーム検証メッセージのアニメーション
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill auto-animateインストール後、Claude Code で/auto-animateを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/example-template.txtreferences/auto-animate-vs-motion.mdcss-conflicts.mdexample-reference.mdssr-patterns.mdscripts/example-script.shinit-auto-animate.shtemplates/accordion.tsxfilter-sort-list.tsxform-validation.tsxreact-basic.tsxreact-typescript.tsxtoast-notifications.tsxvite-ssr-safe.tsx詳細
AutoAnimate
ステータス:本番環境で利用可能 ✅ 最終更新日:2026-08-03 依存関係:なし(あらゆる React セットアップで動作します) 最新バージョン:@formkit/[email protected]
クイックスタート(2 分)
1. AutoAnimate をインストールする
bun add @formkit/auto-animate
重要な理由:
- gzip 圧縮後わずか 3.28 KB(Motion は 22 KB)
- 依存関係ゼロ
- フレームワークに依存しません(React、Vue、Svelte、vanilla JS)
2. コンポーネントに追加する
import { useAutoAnimate } from "@formkit/auto-animate/react";
export function MyList() {
const [parent] = useAutoAnimate(); // 1. Get ref
return (
<ul ref={parent}> {/* 2. Attach to parent */}
{items.map(item => (
<li key={item.id}>{item.text}</li> {/* 3. That's it! */}
))}
</ul>
);
}
重要:
- ✅ リスト項目には常に一意で安定したキーを使用してください
- ✅ 親要素は常にレンダリングされている必要があります(条件付きにしないでください)
- ✅ AutoAnimate は
prefers-reduced-motionを自動的に尊重します - ✅ 追加、削除、並べ替えの操作で動作します
3. 本番環境で使用する(SSR セーフ)
Cloudflare Workers または Next.js の場合:
// Use client-only import to prevent SSR errors
import { useState, useEffect } from "react";
export function useAutoAnimateSafe<T extends HTMLElement>() {
const [parent, setParent] = useState<T | null>(null);
useEffect(() => {
if (typeof window !== "undefined" && parent) {
import("@formkit/auto-animate").then(({ default: autoAnimate }) => {
autoAnimate(parent);
});
}
}, [parent]);
return [parent, setParent] as const;
}
既知の問題の防止
このスキルは、文書化されている 10 件以上の問題を防止します:
問題 #1:SSR/Next.js のインポートエラー
エラー:"Can't import the named export 'useEffect' from non EcmaScript module"
ソース:https://github.com/formkit/auto-animate/issues/55
発生する理由:AutoAnimate はサーバーで利用できない DOM API を使用します
防止策:動的インポートを使用します(templates/vite-ssr-safe.tsx を参照)
問題 #2:条件付きの親要素のレンダリング
エラー:親要素が条件付きの場合、アニメーションが動作しません ソース:https://github.com/formkit/auto-animate/issues/8 発生する理由:存在しない要素には ref をアタッチできません 防止策:
// ❌ Wrong
{showList && <ul ref={parent}>...</ul>}
// ✅ Correct
<ul ref={parent}>{showList && items.map(...)}</ul>
問題 #3:一意のキーがない
エラー:項目が正しくアニメーションしない、またはちらつきます
ソース:公式ドキュメント
発生する理由:React はどの項目が変更されたか追跡できません
防止策:一意で安定したキーを常に使用します(key={item.id})
問題 #4:Flexbox の幅に関する問題
エラー:要素の幅が滑らかにアニメーションせず、急に切り替わります
ソース:公式ドキュメント
発生する理由:flex-grow: 1 は周囲のコンテンツを待つためです
防止策:アニメーションする要素には flex-grow ではなく明示的な幅を使用します
問題 #5:テーブル行の表示に関する問題
エラー:行を削除するとテーブル構造が崩れます
ソース:https://github.com/formkit/auto-animate/issues/7
発生する理由:Display: table-row がアニメーションと競合します
防止策:個々の行ではなく <tbody> に適用するか、div ベースのレイアウトを使用します
問題 #6:Jest のテストエラー
エラー:"Cannot find module '@formkit/auto-animate/react'"
ソース:https://github.com/formkit/auto-animate/issues/29
発生する理由:Jest は ESM のエクスポートを正しく解決できません
防止策:jest.config.js で moduleNameMapper を設定します
問題 #7:esbuild との互換性
エラー:"Path '.' not exported by package" ソース:https://github.com/formkit/auto-animate/issues/36 発生する理由:ESM/CommonJS の条件が一致しません 防止策:ESM モジュールを適切に処理できるよう esbuild を設定します
問題 #8:CSS の position による副作用
エラー:AutoAnimate の追加後にレイアウトが崩れます
ソース:公式ドキュメント
発生する理由:親要素に自動的に position: relative が設定されます
防止策:CSS で position の変更を考慮するか、明示的に設定します
問題 #9:Vue/Nuxt の登録エラー
エラー:"Failed to resolve directive: auto-animate" ソース:https://github.com/formkit/auto-animate/issues/43 発生する理由:プラグインが正しく登録されていません 防止策:Vue/Nuxt の設定でプラグインを正しくセットアップします(references/ を参照)
問題 #10:Angular の ESM に関する問題
エラー:"ESM-only package" でビルドが失敗します ソース:https://github.com/formkit/auto-animate/issues/72 発生する理由:CommonJS のビルド環境 防止策:Angular Package Format 用に ng-packagr を設定します
AutoAnimate と Motion の使い分け
AutoAnimate を使用するケース:
- ✅ シンプルなリストのトランジション(追加/削除/並べ替え)
- ✅ アコーディオンの展開/折りたたみ
- ✅ トースト通知のフェードイン/フェードアウト
- ✅ フォームの検証メッセージの表示/非表示
- ✅ 設定不要のものを優先する場合
- ✅ バンドルサイズの小ささが重要な場合(3.28 KB)
- ✅ 既存のコードやサードパーティーのコードに適用する場合
- ✅ 「十分に良い」アニメーションで問題ない場合
Motion を使用する場合:
- ✅ 複雑な振り付けアニメーション
- ✅ ジェスチャー操作(ドラッグ、スワイプ、ホバー)
- ✅ スクロールベースのアニメーション
- ✅ ばね物理によるアニメーション
- ✅ SVG パスアニメーション
- ✅ キーフレーム制御が必要な場合
- ✅ アニメーションのバリエーション/オーケストレーション
- ✅ カスタムイージング曲線
経験則:90%のケースでは AutoAnimate を使用し、ヒーローアニメーションやインタラクティブなアニメーションには Motion を使用します。
重要なルール
必ず行うこと
✅ 一意で安定したキーを使用する - key={item.id} を使用し、key={index} は使用しないでください
✅ 親要素を DOM に維持する - 親の ref 要素は常にレンダリングしてください
✅ SSR ではクライアント側のみで使用する - サーバー環境では動的インポートを使用してください
✅ アクセシビリティに配慮する - disrespectUserMotionPreference: false を維持してください
✅ モーションを無効にしてテストする - アニメーションなしでも UI が動作することを確認してください
✅ 明示的な幅を設定する - アニメーション対象の要素で flex-grow を避けてください
✅ テーブルでは tbody に適用する - 個々の行には適用しないでください
絶対に行わないこと
❌ 親要素を条件付きにする - {show && <ul ref={parent}>}
❌ インデックスをキーにする - key={index} はアニメーションを壊します
❌ SSR を無視する - Cloudflare Workers/Next.js で動作しなくなります
❌ アニメーションを強制する - disrespectUserMotionPreference: true はアクセシビリティを損ないます
❌ テーブルを直接アニメーションさせる - tbody または div ベースのレイアウトを使用してください
❌ 一意なキーを省略する - 適切なアニメーションに必須です
❌ 複雑なアニメーションを行う - 代わりに Motion を使用してください
設定
AutoAnimate はデフォルトで設定不要です。必要に応じてカスタマイズできます。
import { useAutoAnimate } from "@formkit/auto-animate/react";
const [parent] = useAutoAnimate({
duration: 250, // milliseconds (default: 250)
easing: "ease-in-out", // CSS easing (default: "ease-in-out")
// disrespectUserMotionPreference: false, // Keep false!
});
推奨:特定のデザイン要件がない限り、デフォルト設定を使用してください。
同梱リソースの使用
テンプレート(templates/)
コピーしてすぐに使える例:
react-basic.tsx- 追加/削除/シャッフルができるシンプルなリストreact-typescript.tsx- カスタム設定を含む型付きセットアップfilter-sort-list.tsx- フィルタリングと並べ替えのアニメーションaccordion.tsx- 展開可能なセクションtoast-notifications.tsx- フェードイン/フェードアウトするメッセージform-validation.tsx- エラーメッセージのアニメーションvite-ssr-safe.tsx- Cloudflare Workers/SSR のパターン
リファレンス(references/)
auto-animate-vs-motion.md- 使い分けの判断ガイドcss-conflicts.md- Flexbox、テーブル、position に関する注意点ssr-patterns.md- Next.js、Nuxt、Workers 向けの回避策
スクリプト(scripts/)
init-auto-animate.sh- セットアップを自動化するスクリプト
Cloudflare Workers との互換性
AutoAnimate は Cloudflare Workers Static Assets で問題なく動作します。
✅ クライアント側のみ - Worker ランタイムではなく、ブラウザーで実行されます ✅ Node.js の依存関係なし - ブラウザー専用コードです ✅ エッジ環境に適しています - gzip 圧縮後 3.28 KB ✅ SSR に対応 - 動的インポートを使用してください(templates/ を参照)
Vite の設定:
export default defineConfig({
plugins: [react(), cloudflare()],
ssr: {
external: ["@formkit/auto-animate"],
},
});
アクセシビリティ
AutoAnimate は prefers-reduced-motion に自動的に対応します。
/* User's system preference */
@media (prefers-reduced-motion: reduce) {
/* AutoAnimate disables animations automatically */
}
重要:disrespectUserMotionPreference: true は絶対に設定しないでください。アクセシビリティを損ないます。
公式ドキュメント
- 公式サイト:https://auto-animate.formkit.com
- GitHub:https://github.com/formkit/auto-animate
- npm:https://www.npmjs.com/package/@formkit/auto-animate
- React ドキュメント:https://auto-animate.formkit.com/react
- 動画チュートリアル:Laracasts の動画(README を参照)
パッケージのバージョン(2026-08-03 に確認)
{
"dependencies": {
"@formkit/auto-animate": "^0.10.0"
},
"devDependencies": {
"react": "^19.2.0",
"vite": "^7.3.0"
}
}
本番環境での例
このスキルは、本番環境でのテストに基づいています。
- バンドルサイズ:gzip 圧縮後 3.28 KB
- セットアップ時間:2 分(Motion を使用した場合は 15 分)
- エラー:0 件(既知の問題 10 件をすべて防止)
- 検証:✅ Vite、Tailwind v4、Cloudflare Workers、React 19 で動作
テストしたシナリオ:
- ✅ フィルタリング/並べ替えリスト
- ✅ アコーディオンコンポーネント
- ✅ トースト通知
- ✅ フォーム検証メッセージ
- ✅ SSR/Cloudflare Workers
- ✅ アクセシビリティ(prefers-reduced-motion)
トラブルシューティング
問題:アニメーションが動作しない
解決策:次のよくある問題を確認してください。
- 親要素は常に DOM に存在していますか?(条件付きではありませんか?)
- 各項目に一意で安定したキーが設定されていますか?
- ref はアニメーション対象の子要素の直近の親に設定されていますか?
問題:SSR/Next.js のエラー
解決策:動的インポートを使用してください。
useEffect(() => {
if (typeof window !== "undefined") {
import("@formkit/auto-animate").then(({ default: autoAnimate }) => {
autoAnimate(parent);
});
}
}, [parent]);
問題:項目がアニメーションせず、点滅する
解決策:一意のキーを追加します:key={item.id} を使用し、key={index} は使用しません
問題:Flexbox の幅に関する問題
解決策:flex-grow: 1 の代わりに、明示的な幅を指定します
問題:テーブルの行がアニメーションしない
解決策:個々の <tr> 要素ではなく、<tbody> に ref を適用します
セットアップ完了チェックリスト
-
@formkit/[email protected]をインストール済み - React 19+(または Vue/Svelte)を使用している
- 親要素に ref を追加済み
- 親要素が常にレンダリングされている(条件付きではない)
- リスト項目に一意で安定したキーが設定されている
-
prefers-reduced-motionでテスト済み - Cloudflare Workers/Next.js を使用する場合、SSR に対応している
- Flexbox の幅に関する問題がない
- 開発サーバーがエラーなく実行される
- 本番ビルドが成功する
質問や問題がありますか?
- 動作するサンプルについては
templates/を確認してください - ライブラリの比較については
references/auto-animate-vs-motion.mdを確認してください - SSR の回避策については
references/ssr-patterns.mdを確認してください - 公式ドキュメントを確認してください:https://auto-animate.formkit.com
- GitHub のイシューを確認してください:https://github.com/formkit/auto-animate/issues
本番環境での利用準備はできていますか? ✅ はい - 13.6k のスター、積極的にメンテナンス、依存関係ゼロ。