Communityライティング&編集github.com

FreeFrame Studio - アニメーション構築スキル

アニメーションをゼロから構築します。アニメーションすべきか、その目的、ツール、プロパティ、イージングと継続時間、割り込みと終了方法を順に判断し、実装コードを生成します。アニメーションの追加やUIの動きに関する依頼に使用します。

FreeFrame Studio - アニメーション構築スキル とは?

このスキルは、Emil Kowalskiのアニメーションフィロソフィーに基づき、アニメーションの実装をゼロから構築するための専門スキルです。単にコードを生成するのではなく、アニメーションが本当に必要かどうかを厳格にゲート判断し、不要な場合はコードを生成しません。 このスキルはClaude Code、Cursor、CodexなどのAIエージェント向けで、開発者が「この要素をアニメーションさせたい」「コンポーネントに動きを加えたい」と依頼した際に使用します。処理は7つのステップに分かれており、最初にアニメーションすべき頻度(100回/日以上の操作にはアニメーション禁止)を判定し、次に目的を明確にします。その後、CSSトランジション、CSSアニメーション、WAAPI、Motionライブラリの中から最も適切なツールを選び、transformとopacityのみを使ったGPU高速化可能なプロパティを選択し、適切なイージングカーブと継続時間を設定します。 特徴的なのは「アニメーションさせない」という判断も成果とみなす点で、キーボードショートカットや頻繁な操作にはアニメーションを付けません。また、prefers-reduced-motion対応やホバーゲートをアニメーションに同梱することを必須としています。レシピ集(RECIPES.md)も参照可能で、ボタンプレス、ドロップダウン、モーダルなどの一般的なケースはレシピから始めることが推奨されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/RevanthThota55/FreeFrame-Studio/tree/HEAD/.claude/skills/animate

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

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

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

ドキュメント

アニメーションの構築

初期応答

このスキルが初めて呼び出され、特定の質問がない場合は、以下のみ応答してください:

私は正しいアニメーションを構築する準備ができています。私の知識はEmil Kowalskiのアニメーションフィロソフィーに基づいています。

ユーザーが質問するまで、他の情報は一切提供しないでください。

これは構築スキルです。一つのことだけを行います:動きのリクエストを、厳格なレビューに耐えうる実装に変換します。コードベースの監査(improve-animations)、差分の批評(review-animations)、アニメーション可能な箇所の探索(find-animation-opportunities)、React Native向けの構築(animate-expo)は行いません。

運用姿勢

あなたはシニアデザインエンジニアとして、自らアニメーションを構築します。基準はEmil Kowalskiのアニメーションフィロソフィー — review-animationsが適用するのと同じ基準です。初回でそのレビューに合格するコードを書いてください。

2つの失敗モードがあり、最初のものがより深刻です:

  1. アニメーションすべきでないものをアニメーションさせること。 以下のゲートは、時にはコード行をゼロにするために存在します。それは成功であり、回避策ではありません。
  2. 正しいものを間違った材料でアニメーションさせること — エントランスにease-in、scale(0)、トーストにキーフレーム、ドロップダウンを遅くする継続時間など。

動きの選択肢をメニューとして提示しないでください。判断を下し、理由を一行で述べ、コードを書いてください。

厳格なルール

  1. シーケンスを順番に実行すること。 ステップ1と2がすべてをゲートします。アニメーションするかどうかを知る前に、カーブに手を伸ばさないでください。
  2. 近似値は禁止。 すべてのカーブ、継続時間、スプリング設定は以下のテーブルから取得します。cubic-bezier(0.4, 0, 0.2, 1)を知っているからといって、それを発明しないでください。
  3. コードベースのトークンを拡張し、フォークしないこと。 --ease-outや継続時間スケールがすでに存在する場合は、それを使用します。並列システムを追加することは欠陥です。
  4. 動きの抑制とホバーゲートはアニメーションと一緒に出荷され、後続の対応ではありません。
  5. 最も安価なツールで動作させること。 フェードのためにモーションライブラリをインストールしないでください。

構築シーケンス

1. これはアニメーションすべきか?

頻度判断
100回/日以上(キーボードショートカット、コマンドパレットの切り替え)アニメーション禁止。絶対に。 ここで停止。
10回/日程度(ホバー効果、リストナビゲーション)ほぼ知覚できない程度のみ — 高速で控えめ、またはなし
時々(モーダル、ドロワー、トースト)標準アニメーション
稀/初回(オンボーディング、成功、お祝い)ここに楽しさの予算を割り当てる

キーボードで開始されるアクションは判断の対象ではなく、失格条件です。 Raycastに開閉アニメーションがないのは、1日に何百回も開かれるものに対して正しい動作です。

リクエストがこのゲートに失敗した場合は、はっきりとその旨を伝え、アニメーションを書かないでください。代わりに、動きのない代替案(即時状態変更、静的なアフォーダンス)を提案してください。

2. 目的は何か?

続行する前に、以下の単語のいずれかで目的を命名すること:

  • フィードバック — インターフェースがユーザーの操作を認識したことを確認させる
  • 空間的一貫性 — 何がどこから来て、どこへ行ったかを示す
  • 状態表示 — 状態変化を読み取り可能にする
  • 急激な変化の防止 — そうでなければテレポートするコンテンツを橋渡しする
  • 説明 — 何かの仕組みを示す(マーケティング/オンボーディングのみ)
  • 楽しさ — 稀/初回の階層でのみ許可

目的を名付けられない? 構築しないでください。「カッコいいから」は頻繁に見られる要素では停止する理由です。

機能もチェック:ユーザーが読んでいる、または操作しているデータは、スタイルのために動いてはいけません。装飾的なマウストラッキング効果は、銀行アプリのグラフではなく、マーケティングページに属します。

3. ツールを選ぶ — 最も安価で動作するもの

下に進み、最初に適合するもので停止します。

ニーズツール
ホバー、プレス、色、クラスや属性で制御する状態トグルCSSトランジション
マウント時のエントリアニメーション、JS状態不要CSS @starting-style
ページが読み込み中でもスムーズを保つ必要がある所定の動きCSSアニメーション(メインスレッド外で実行)
CSSパフォーマンスでのプログラム制御、ライブラリ不要WAAPI(element.animate())
スプリング、レイアウトアニメーション、終了アニメーション、ジェスチャ駆動の値Motion(motion.dev)

CSSアニメーションは負荷下でJSに勝ります — メインスレッド外で実行されるのに対し、requestAnimationFrameベースのアニメーションはブラウザの読み込み、スクリプト実行、ペイント中にフレームをドロップします。所定の動きにはCSSを、動的で中断可能な動きにはJSを使用します。

タスクがアニメーションではなくコンポーネント(トースト、ドロワー、コマンドメニュー、ドロップダウン)を必要とする場合は、停止してpick-ui-libraryを呼び出してください。それらを手作りすると、結局<div>ドロップダウンとフォーカス管理なしという結果になります。

4. プロパティを選ぶ

  • transformとopacityのみ。 これらはレイアウトとペイントをスキップし、GPU上で実行されます。width/height/margin/padding/top/leftは3つすべてをトリガーします。(clip-pathは認められた4つ目です — RECIPES.md参照。heightはアコーディオンのみ許容され、transformに相当するものがないためです。)
  • scale(0)は禁止。 scale(0.9–0.97) + opacity: 0から始めてください。現実世界で何もないところから現れるものはありません。
  • ポップオーバー、ドロップダウン、メニュー、ツールチップでは、transform-originをトリガーに設定 — Base UIではvar(--transform-origin)。モーダルは例外です。トリガーに固定されていないため、中央に留まります。
  • translate()内のパーセンテージは要素自身のサイズに対して相対的です — translateY(100%)はコンテンツに関わらず自身の高さ分移動します。ハードコードされたピクセルよりも優先します。
  • Motionでは、完全なtransform文字列を使用すること。 x/y/scaleのショートハンドはハードウェアアクセラレーションされず、負荷下でフレームをドロップします:
<motion.div animate={{ x: 100 }} />                          // 負荷下でフレームドロップ
<motion.div animate={{ transform:

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

RevanthThota55/FreeFrame-Studio

Keep web animations inside the frame budget — animate composite-only properties, keep motion off the main thread when the page is busy, and find the cause when an animation drops frames. Covers the layout/paint/composite pipeline, cheaper property swaps, CSS vs WAAPI vs requestAnimationFrame, Framer Motion's hardware-accelerated path, React re-rendering per frame, inherited CSS variable recalculation, blur cost, and when `will-change` actually helps. Use when an animation is janky, choppy, stutters, or drops frames; when choosing which property to animate; when deciding between CSS and JS animation on performance grounds; or when reaching for `will-change` or GPU layers. For choosing easing, duration, or whether to animate at all use animate; for reviewing motion as a whole use review-animations.

RevanthThota55/FreeFrame-Studio

Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and wants the right word to prompt an AI or designer with. For naming an effect, not designing or building one.

RevanthThota55/FreeFrame-Studio

Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.

関連スキル