auto-animate について
Web開発者向けに、FormKit AutoAnimateの導入方法をまとめたスキルです。リストやアコーディオン、通知、SSRの例に加え、よくある設定上の問題も扱います。
主な機能
- 01Reactの導入と設定
- 02追加・削除・並べ替えのアニメーション
- 03SSRに対応する利用パターン
- 04導入時の問題に関するガイド
- 05一般的なUIパターンのテンプレート
- 06動きを減らす設定へのアクセシビリティ対応
活用シーン
- 01変更や並べ替えのあるリストのアニメーション
- 02アコーディオンや通知へのトランジション追加
- 03SSRプロジェクトでのAutoAnimate利用
- 04レイアウトやビルドの問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill auto-animateインストール後、Claude Code で/auto-animateを入力して読み込まれたか確認します。
同梱ファイルREADME.mdSKILL.json
詳細
AutoAnimate
ステータス: 本番環境で使用可能 ✅ 最終更新日: 2025-11-07 依存関係: なし(あらゆる React のセットアップで動作します) 最新バージョン: @formkit/[email protected]
クイックスタート(2 分)
1. AutoAnimate をインストールする
pnpm add @formkit/auto-animate
重要な理由:
- gzip 圧縮後わずか 3.28 KB(Motion の 22 KB と比較)
- 依存関係ゼロ
- フレームワークに依存しません(React、Vue、Svelte、バニラ 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={index} ではなく key={item.id}
✅ 親要素を 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 を参照)
パッケージのバージョン(2025-11-07 確認済み)
{
"dependencies": {
"@formkit/auto-animate": "^0.9.0"
},
"devDependencies": {
"react": "^19.2.0",
"vite": "^6.0.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 の Issue を確認してください:https://github.com/formkit/auto-animate/issues
本番環境で使用できますか? ✅ はい - スター 13.6k、活発にメンテナンスされており、依存関係はゼロです。