Foundation
Development Guidelinesフロントエンド

アニメーション

UX を高める機能的なアニメーションの考え方とインタラクションの規約を定める

アニメーションは、見た目を飾るためではなく、利用者の操作を助けるために使う。手応えを返し、変化のつながりを示し、視線を導く。目的を持たない動きは、注意をそらし、待ち時間を生むため避ける。ここでは、いつ・なぜ動かすかという考え方と、本チームで守る具体規約を正本として定める。

hover や focus をいつ出すかはアフォーダンスが正本である。本ページではそれを再掲せず、動きそのものに絞る。

前提知識

規約を述べる前に、アニメーションを支える基本概念を最小限おさえる。

機能的アニメーションと装飾的アニメーション

UI のアニメーションには、目的を持つ機能的なものと、目を引くための装飾的なものがある。本チームで使うのは前者だけである。機能的アニメーションは、次のいずれかを果たす。

  • フィードバック — 操作が受け付けられたことを、その場で返す。
  • 連続性 — 変化の前後をつなぎ、要素がどこから来てどこへ行ったかを示す。
  • 方向づけ — 視線を次に見るべき場所へ導く。

これらに当てはまらない動きは、装飾的アニメーションとして避ける。利用者が動きそのものを意識して気づくほど目立つなら、過剰である。

マイクロインタラクション

マイクロインタラクションとは、ボタンを押す・トグルを切り替えるといった小さな操作に対する、ごく短い反応である。手応えを返し、操作が届いたことを伝える。UI を直感的に感じさせる土台であり、控えめで速いほどよい。

デュレーションとイージング

  • デュレーション(継続時間)は、動きにかける時間である。短すぎると気づけず、長すぎると待たされる。
  • イージングは、動きの速度変化である。一定速度の動きは機械的に見える。現実の物体のように、加速と減速を伴わせると自然になる。

移動距離が大きい動きほど時間を要し、小さい動きは短く済む、という関係がある。ただし本チームでは、後述のとおり Tailwind の組込みスケールに値を限定する。

設計方針

アニメーションは、次の方針に従って実装する。

目的のある動きへの限定

アニメーションは、フィードバック・連続性・方向づけのいずれかを果たすときだけ使う。装飾のためには使わない。動きを足す前に、それが利用者の理解や操作を助けるかを問う。助けないなら入れない。

控えめで速い動き

動きは控えめで速いほどよい。利用者は同じ動きを何度も目にするため、長い動きは毎回の待ち時間になる。瞬時の切り替えは避けつつ、意識されない程度の短さにとどめる。

レイアウトの維持

位置や大きさそのものではなく、transformopacity で動きを表現する。widthheightmargintop などレイアウトに関わる property をアニメートすると、毎フレームの再レイアウトで動きが乱れ、負荷も高い。transformopacity は再レイアウトを伴わず安価に扱える。

インタラクションの規約

  • 状態変化(hover / focus / active)には短いトランジションを添える。既定は transition-colors、継続時間は duration-150 とする。瞬時の切り替えを避け、操作可能であることを穏やかに伝えるためである。状態をいつ出すかはアフォーダンスに従い、ここでは動きの付け方だけを定める。
  • 出現と退場(ダイアログ・ドロップダウン・ツールチップなど)は transformopacity だけをアニメートする。継続時間は 150〜250ms、出現は ease-out を基本とし、Radix の data-state に対して付与する。
  • 継続時間とイージングは Tailwind の組込みスケール(duration-150 / ease-out など)に限定する。任意値は使わない。場当たりな値を避け、動きの一貫性を保つためである。

アクセシビリティ

動きは、一部の利用者にとって不快や体調不良の原因になる。前庭障害のある利用者には、スクロールやホバーで要素が動くと、めまいや吐き気を引き起こすことがある。

  • prefers-reduced-motion を尊重する。動きを減らす設定の利用者には、本質的でない動きを無効化する(WCAG 2.3.3)。これは各アプリの globals.css のグローバル設定で全コンポーネントに一括適用しており、個別コンポーネントでの対応は不要である。
  • 動きに意味を依存させない。動きが無効化されても情報が伝わるよう、動きはあくまで補助とする。状態や変化は、色・アイコン・ラベルでも伝わるようにする。

確認手段

実装後は各アプリの開発用ページ(museum なら /dev/components)と実画面で、次を確認する。

  • 動きが目的(フィードバック・連続性・方向づけ)を果たし、装飾的でないこと。
  • OS の「視差効果を減らす」設定を有効にした状態で、本質的でない動きが無効化されること。

関連項目

  • アフォーダンス — hover や focus をいつ出すか、インタラクティブ状態のモデル

On this page