Communitygithub.com

empro-labs-animation-skill

Web UIモーション(マイクロインタラクション、コンポーネント/ページ遷移、ローダー、スクロール表示・連動エフェクト)をCSS、Web Animations API、またはGSAPで設計・構築します。まずANIMATION.md仕様を作成し、ユーザーの承認を得てから、prefers-reduced-motionとパフォーマンス予算を尊重したアニメーションコードを生成します。

empro-labs-animation-skill とは?

このスキルは、Web UIにおけるモーション設計と実装のための構造化された2段階アプローチを提供します。まず、ANIMATION.mdと呼ばれる詳細なモーション仕様を作成し、ユーザーの承認を得てから実際のコード生成に進みます。CSS、Web Animations API、GSAPという3つの主要なツーリングをサポートし、プロジェクトのフレームワーク(React、Vue、Next.jsなど)や、要求される対話の複雑さ(マイクロインタラクションからスクロールストーリーまで)に基づいて最適なツールを自動的に選択します。アクセシビリティとパフォーマンスが設計の中心であり、すべてのアニメーションにprefers-reduced-motionのフォールバックが必須で、アニメーション対象プロパティはtransformとopacityに制限されます。また、専用のPythonスクリプト群(analyze_motion.py, capture_motion.py)を使用した静的・動的監査も行い、厳格な品質チェックを実施します。このスキルはClaude Codeを含むスタンドアロンのエージェント環境向けに設計されており、ファイルベースの仕様により再利用性とツール間の相互運用性を確保しています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aj9599995/Empro-Lab-Animation-Skill/tree/main

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Empro Labs Animation Skill

Webモーションデザインスキル。2つのステップで進めます:最初にモーション仕様(ANIMATION.md)を作成し、その後でコードを作成します。

ANIMATION.mdはプロジェクトに保存されるファイルです。手動で編集したり、他のプロジェクトで再利用したり、他のツールで読み込んだりできます。

このファイル内のパスはスキルフォルダー(~/.claude/skills/empro-labs-animation-skill/)を基準にしています。スクリプトを実行するときは絶対パスを使用してください。

リクエスト

スラッシュコマンドからのユーザーのリクエスト:

$ARGUMENTS

上記のリクエストが空の場合は、1つの質問をしてください:何を動かしたいのか、どこで動かしたいのか?その後、フェーズAを開始します。

コアフロー

フェーズA  入力を理解  ──→  フェーズB  ANIMATION.mdを作成(ユーザー承認)  ──→  フェーズC  実装  ──→  フェーズD  監査

起動時チェック(この順序で)

  1. プロジェクトにANIMATION.mdがあるか? → ユーザーの要求に応じて、それを再利用、編集、または再構築します。
  2. DESIGN.md(web-designスキルから)があるか? → その色、フォント、スタイルの方向性を継承します。モーションをそれと一貫させます。
  3. モーショントークン(--motion-*変数やモーションファイル)があるか? → それらを再利用します。新しい値は発明しません。
  4. すでにアニメーションコードがあるか? → 先にpython scripts/analyze_motion.py <project> --inventoryを実行し、変更を提案する前に何が存在するかを把握します。
  5. 上記のいずれでもない場合 → フェーズA。

フェーズA:理解

入力は組み合わせ可能です:

入力何をするか
参照URLpython scripts/capture_motion.py --url [URL] --output ./motion-capture を実行します。実際の継続時間、イージング、アニメーションプロパティ、スクロール連動エフェクトについては capture.json を読みます。ムードについては top.png を使用します。
モーションの動画またはスクリーンショットトリガー、おおよその継続時間、イージングの感触を説明します。数値をユーザーに確認します。
キーワード(「スナッピー」「シネマティック」)references/motion-personalities.md のパーソナリティにマッチングします。
ブランド名(「Linearみたいに」)ライブサイトに到達可能ならキャプチャします。できない場合は、参照URLを尋ねます。記憶からブランドのモーションを推測しないでください。
既存コードインベントリスクリプトを実行し、動作するものを維持します。

A1. パーソナリティ(最大2つの質問をする)

  • 感触: 落ち着いた(calm)、スナッピー(snappy)、遊び心のある(playful)、またはシネマティック(cinematic)?
  • ページタイプ: コンテンツ重視(モーションは邪魔にならない)またはショーケース(モーションが主役になれる)?

references/motion-personalities.md から1つか2つの候補を、それぞれ1行の理由とともに表示します。ユーザーが確認します。

A2. インタラクション層(必須、スキップしない)

references/interaction-tiers.md を参照。

層エクスペリエンスツーリング
L1 マイクロホバー、フォーカス、プレス、トグル、小さな状態変化CSSトランジションのみ
L2 振り付け出現と消滅、スタッガーされたリスト、モーダル、ドロワー、ルート変更、ローダーCSSキーフレーム、Web Animations API、またはGSAPタイムライン
L3 スクロールストーリースクロール連動表示、ピン留め、パララックス、タイムラインで駆動されるセクションGSAP + ScrollTrigger、またはCSSスクロール駆動アニメーション(フォールバック付き)

L3はページあたり2つのピン留めセクションに制限されます。各ページセクションは仕様書に自身の層を明記します。

A3. スタック

package.json とフレームワーク(プレーンHTML、React、Vue、Svelte、Next.js)を確認します。references/tooling.md を参考にツーリングを選択します。デフォルト:CSSとWeb Animations API。L3または複雑なタイムラインの場合のみGSAPを追加します。

フェーズB:ANIMATION.mdを作成

references/animation-md-template.md に従います。10のセクション:

  1. モーションパーソナリティと原則
  2. モーショントークン(継続時間、イージング、距離)
  3. 振り付けインベントリ(表:要素、トリガー、プロパティ、継続時間、イージング、遅延、動き軽減フォールバック)
  4. コンポーネントモーション(デフォルト、ホバー、フォーカス可視、アクティブ、無効、出現、消滅)
  5. スクロール動作
  6. ページおよびルート遷移
  7. パフォーマンス予算
  8. アクセシビリティ
  9. やるべきこととやってはいけないこと(少なくとも8項目、そのうち少なくとも5つは「やってはいけないこと」)
  10. 依存関係

サマリーをユーザーに表示し、承認を待ちます。その後、ANIMATION.md をプロジェクトルートに保存します。

フェーズC:実装

  1. トークンをどこでも使用。 すべての継続時間とイージングは var(--motion-duration-base) のような変数です。コンポーネント内にマジックナンバーはありません。
  2. 軽量なプロパティのみをアニメーション。 まず transform と opacity。clip-path と filter は小さな要素で許可されます。width、height、top、left、margin、padding は、ANIMATION.md に理由とともに例外が記録されない限り、アニメーションさせないでください。
  3. 動きの軽減は最初のバージョンの一部であり、後からのパッチではありません。 動きは除去され、状態変化は維持されます。距離トークンは動き軽減下でゼロになり、templates/motion-tokens.css の prefers-reduced-motion ブロックがそのパターンを示します。
  4. プロジェクトにまだモーションレイヤーがない場合は、スターターファイル templates/motion-tokens.css と templates/reveal.js を使用します。
  5. ループには終了方法が必要。 infinite アニメーションは動き軽減下で停止または簡略化されます。5秒以上実行されるループには一時停止コントロールが必要です。
  6. JavaScriptをクリーンアップ。 GSAPタイムラインとScrollTriggerはアンマウント時に削除します(gsap.context() または useGSAP を使用)。Observerを切断し、リスナーを削除します。
  7. モーションを1箇所にまとめる。 トークンは1つのファイルに、レシピは小さなモジュールに配置します。タイミング値をコンポーネント全体に散らばせないでください。

フェーズD:監査

  1. 静的監査を実行:python scripts/analyze_motion.py <project> --strict。すべてのエラーを修正します。すべての警告を確認し、修正するか、ANIMATION.md に理由を記録します。
  2. ブラウザチェックを実行:
    • 動き軽減を有効にする(DevTools → Rendering → prefers-reduced-motion: reduce)。動きが残っていないこと、コンテンツがまだ表示されていることを確認します。
    • CPUをスロットル(4×)し、モーション再生中にPerformanceパネルを記録します。長いフレームを探します。
    • 電話幅(390px)で確認します。アニメーション要素による水平オーバーフローを探します。
  3. references/quality-checklist.md を吟味します。
  4. 合格したもの、不合格だったもの、修正したものを報告します。

絶対条件(すべての項目が合格必須)

  • ANIMATION.md のすべてのアニメーションに動き軽減フォールバックがあること。
  • transform、opacity、および記録された例外のみがアニメーションされること。
  • すべての継続時間とイージングがトークンから来ていること。
  • すべての infinite ループが動き軽減を尊重し、5秒より長いループには一時停止コントロールがあること。
  • 1秒間に3回以上点滅するものがないこと。
  • インタラクティブフィードバックが100ms以内に現れること。マイクロアニメーションは250ms以下。出現およびルート遷移は500ms以下。
  • ホバーのみのフィードバックには、キーボードフォーカス状態とタッチ相当のものがあること。
  • 幅600px以下では、アニメーション要素による水平スクロールが発生せず、ピン留めセクションは無効化または簡略化されること。
  • JavaScriptアニメーションはアンマウント時にクリーンアップされること。

リファレンスインデックス

現在のフェーズに必要なファイルのみを読みます。すべてを読み込まないでください。

ファイル内容いつ読むか
references/animation-md-template.mdANIMATION.md 出力テンプレート(10セクション)フェーズB
references/motion-principles.mdなぜ、いつアニメーションするか、タイミングとイージングのルールフェーズAとB
references/interaction-tiers.mdL1、L2、L3の層定義とコードパターンフェーズA2とB
references/motion-personalities.mdトークン値を持つ4つのパーソナリティプリセットフェーズA1とB
references/tooling.mdCSS vs WAAPI vs GSAP vs Motion vs View Transitions vs LottieフェーズA3
references/component-recipes.mdボタン、カード、アコーディオン、モーダル、ドロワー、トースト、タブ、ローダーフェーズC
references/gsap-recipes.mdGSAPタイムライン、ScrollTrigger、matchMedia、ReactクリーンアップフェーズC(GSAPのみ)
references/scroll-patterns.md表示、プログレスバー、スティッキースタック、パララックス、水平スクロールフェーズB(スクロール)とC
references/performance.mdフレーム予算、コンポジターに優しいルール、モバイルダウングレードフェーズBとD
references/accessibility.md動き軽減、WCAGモーション基準、前庭トリガーフェーズBとD
references/quality-checklist.md100ポイント監査チェックリストフェーズD

スクリプト

スクリプト用途必要なもの
scripts/analyze_motion.pyプロジェクトのCSSとJSの静的監査。レイアウトアニメーション、transition: all、無限ループ、長い継続時間、欠落した動き軽減処理を検出します。--inventory は既存のタイミング値を一覧表示します。Python 3(標準ライブラリのみ)
scripts/capture_motion.pyライブURL上の宣言済みおよび実行中のアニメーションを記録し、ページをスクロールし、動き軽減下で何がまだ実行されるかをチェックします。capture.json と top.png を書き出します。Python 3、pip install playwright、python -m playwright install chromium

両スクリプトとも --help を受け付けます。

テンプレート

ファイル用途
templates/motion-tokens.cssトークン変数、ベースキーフレーム、表示ルール、動き軽減ブロック。プロジェクトにコピーします。
templates/reveal.jsIntersectionObserverを使用し、動き軽減を尊重する依存関係なしのスクロール表示。

言語

ANIMATION.md とサマリーはユーザーの言語で作成します。CSS、JavaScript、トークン名は英語のままにします。

フォールバックチェーン

  • キャプチャスクリプトが失敗する(Playwrightがない、またはサイトがブラウザをブロックする)→ スクリーンショットまたは短いスクリーン録画を求め、その説明から構築します。
  • 参照が特定できないアニメーションライブラリを使用している → その旨を伝え、感触を合わせるか、正確なモーションを合わせるかを尋ねます。
  • 入力がまったくない → 感触について1つ質問し、その後 calm パーソナリティを使用します。

関連スキル