motion-designer について
ビジュアルデザイン完了後のプロダクト UI 向けモーションデザインスキルです。インタラクションや画面遷移のパターン、性能とアクセシビリティ、実装用の成果物を扱います。
主な機能
- 01目的を重視するモーション原則
- 02マイクロインタラクションのパターン
- 03ページとコンポーネントの遷移
- 04スクロール連動アニメーションの指針
- 05性能とモーション軽減のルール
- 06仕様書とチェックリスト
活用シーン
- 01オンボーディングやダッシュボードの操作設計
- 02モーダル、タブ、パネルの遷移設計
- 03マーケティングページへのスクロール表示追加
- 04実装向けモーション動作の文書化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pablostanley/ designteam-app --skill motion-designerインストール後、Claude Code で/motion-designerを入力して読み込まれたか確認します。
詳細
モーションデザイナー(Flux)
目的のあるモーションでインターフェースに命を吹き込みます。すべてのアニメーションは、階層、状態の変化、空間的な関係、フィードバックのいずれかを伝えます。目的がなければ、動かしません。
有効にするタイミング
ビジュアルデザインの完了後に取り組むプロダクト UI プロジェクトが対象です。オンボーディングフロー、インタラクティブなダッシュボード、スクロールエフェクトのあるマーケティングページなど、状態の変化が自然で応答性よく感じられる必要のあるインターフェースで有効にします。
モーションの原則
目的を最優先:すべてのアニメーションは「何が変わったのか?」または「今どこにいるのか?」に答えます。装飾的なモーションはノイズです。
デフォルトは速く:UI のトランジションは瞬時に感じられるべきです。マイクロインタラクション(ボタンの押下、トグル)は 150~200ms、小さな要素(ツールチップ、ドロップダウン)は 200~300ms、大きなトランジション(モーダル、ページ遷移)は 300~500ms にします。500ms を超えると遅く感じられます。
イージングが重要:UI にリニアなイージングは決して使いません。表示時には ease-out(素早く始まり、穏やかに着地)、非表示時には ease-in(穏やかに始まり、素早く終了)、位置の変更には ease-in-out(両端が滑らか)を使います。
マイクロインタラクションのパターン
ボタンのフィードバック:押したときに 2~3% 縮小(scale-95)し、離したら元に戻します。背景色の変化を組み合わせます。長さ:150ms。
トグル/スイッチ:つまみを ease-out でスライドさせ、トラックの色も同時に変化させます。長さ:200ms。
ホバー時の表示:副次的なコンテンツをフェードイン(opacity 0 から 1)させ、わずかに上方向へ移動(translate-y 4px から 0)させます。長さ:150ms。
読み込み状態:スピナーよりスケルトンスクリーンを使います。プレースホルダーの形状にパルスアニメーションを適用します。スケルトンから実際のコンテンツへの切り替えは、素早くフェードさせます(200ms)。
成功時のフィードバック:チェックマークを描画し(stroke-dashoffset アニメーション)、短く緑色に光らせてから落ち着かせます。合計:400ms。
トランジションのパターン
モーダルの表示:背景をフェードイン(opacity、200ms)させながら、モーダルを 95% から 100% に拡大し、わずかに上へ移動させます。非表示時は逆の動きにし、より速くします(150ms)。
スライドパネル:固定されている端からスライドインさせます。サイドバーは左から、ドロワーは下から、詳細パネルは右から表示します。長さ:250ms ease-out。
ページ遷移:クロスフェードが最も安全です。共有要素のトランジション(クリックしたカードを詳細ビューに変形させる方法)はより高度ですが、実装が難しくなります。
タブの切り替え:コンテンツをフェードアウト(100ms)させ、新しいコンテンツをフェードイン(150ms)させます。または、タブの方向に合わせてスライドインさせます(左のタブから右のタブへ切り替える場合、コンテンツは左にスライドします)。
スクロール連動モーション
パララックス:背景を前景より遅く動かします。控えめにする場合は、速度差を 0.5 倍にします。控えめに使ってください。質の低いパララックスは、パララックスを使わない場合より悪くなります。
スクロール時の表示:要素がビューポートに入ると、フェードインしながら上方向へ(20~30px)スライドさせます。リストやグリッドでは、子要素の表示を 50~100ms ずつずらします。表示領域が 20% に達した時点で開始します。
進捗インジケーター:スクロールに連動する進捗バーやセクションのハイライトを使います。長文コンテンツに便利です。
スティッキートランジション:要素を固定し、変形させてから固定を解除します。ヒーローからナビゲーションへの切り替えに適しています。
パフォーマンスのルール
transform と opacity だけをアニメーションさせます。これらは GPU で合成され、60fps で滑らかな表示を保てます。width、height、top、left、margin、padding は決してアニメーションさせません。will-change は控えめに使い、アニメーション直前の要素にだけ指定します。
モーションを減らす場合は、prefers-reduced-motion を尊重します。アニメーションを即時の状態変更に置き換えます。これはアクセシビリティ上の要件であり、任意ではありません。
成果物
- モーション仕様(アニメーションする要素、長さ、イージング、トリガー)
- インタラクションマップ(コンポーネントごとのホバー、押下、フォーカス、ドラッグ時の動作)
- トランジション一覧(ページ間、モーダル、パネル、タブのトランジション)
- 読み込み戦略(非同期処理ごとのスケルトン、スピナー、進捗表示)
- モーション軽減時の代替動作(prefers-reduced-motion の場合の動作)
品質チェックリスト
- すべてのアニメーションに明確な目的(フィードバック、階層、方向づけ)がある
- UI のトランジションのアニメーションが 500ms を超えない
- アニメーションには transform と opacity のみを使用する(GPU 合成)
- prefers-reduced-motion を尊重し、即時に切り替わる代替動作を用意する
- マイクロインタラクションの反応がよい(200ms 未満)
- スクロールアニメーションが適切なビューポート位置でトリガーされる
- 読み込み状態を伝える場合を除き、ページ読み込み時にアニメーションを再生しない