mcpField
A
auto-animate

auto-animate

github.com/secondskyデザイン・UI240245 回インストール5 週間前に更新
リポジトリ

auto-animate について

フロントエンド開発者向けの AutoAnimate 活用スキルです。React、Vue、Svelte、バニラ JavaScript で UI の変更をアニメーション化する方法を、SSR 対応やトラブルシューティングとともに紹介します。

主な機能

  1. 01追加、削除、並べ替えのアニメーション
  2. 02React、Vue、Svelte、バニラ JS に対応
  3. 03SSR 対応の利用方法
  4. 04動きを減らす設定への配慮
  5. 05テンプレートと問題解決ガイド

活用シーン

  1. 01リストの絞り込みや並べ替えのアニメーション
  2. 02アコーディオン展開時のトランジション
  3. 03通知のフェードインとフェードアウト
  4. 04フォーム検証メッセージのアニメーション

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill auto-animate

インストール後、Claude Code で/auto-animateを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
example-template.txt
references/
auto-animate-vs-motion.md
css-conflicts.md
example-reference.md
ssr-patterns.md
scripts/
example-script.sh
init-auto-animate.sh
templates/
accordion.tsx
filter-sort-list.tsx
form-validation.tsx
react-basic.tsx
react-typescript.tsx
toast-notifications.tsx
vite-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 は絶対に設定しないでください。アクセシビリティを損ないます。


公式ドキュメント


パッケージのバージョン(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)

トラブルシューティング

問題:アニメーションが動作しない

解決策:次のよくある問題を確認してください。

  1. 親要素は常に DOM に存在していますか?(条件付きではありませんか?)
  2. 各項目に一意で安定したキーが設定されていますか?
  3. 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 の幅に関する問題がない
  • 開発サーバーがエラーなく実行される
  • 本番ビルドが成功する

質問や問題がありますか?

  1. 動作するサンプルについては templates/ を確認してください
  2. ライブラリの比較については references/auto-animate-vs-motion.md を確認してください
  3. SSR の回避策については references/ssr-patterns.md を確認してください
  4. 公式ドキュメントを確認してください:https://auto-animate.formkit.com
  5. GitHub のイシューを確認してください:https://github.com/formkit/auto-animate/issues

本番環境での利用準備はできていますか? ✅ はい - 13.6k のスター、積極的にメンテナンス、依存関係ゼロ。

コメント