【React × Framer Motion】たった数行でアプリが劇的に美しくなる!初心者でもできる「心地よいアニメーション」実装術
66日目は「無限スクロール」で、大量のデータをシームレスに見せる高度なUXを学びました。
本日67日目は、アプリ全体の印象を「カクカクしたシステム」から「心地よいプロダクト」へと昇華させる「Framer Motionを使ったアニメーション」 を学習します。Reactと非常に相性が良く、直感的に動きをつけられる魔法のライブラリに触れてみましょう。
はじめに:アニメーションは「飾り」ではない
アニメーションの本当の目的は、画面の切り替わりや要素の変化に「意味」を持たせ、ユーザーの視線をスムーズに誘導することにあります。
何かが消えたとき:どこへ行ったのか?
新しいリストが出たとき:どこから来たのか?
これを視覚的に伝えることで、ユーザーはストレスなくアプリを操作できるようになります。今日は、Reactで最も人気の高いアニメーションライブラリ Framer Motion を紹介します。
💡 1. Framer Motion の基本:motion コンポーネント
通常の div や button の代わりに motion.div を使うだけで、驚くほど簡単にアニメーションを設定できます。
💻 実装例:ふわっと現れるカード
import { motion } from 'framer-motion';
export const FadeInCard = ({ children }) => (
<motion.div
initial={{ opacity: 0, y: 20 }} // 💡 アニメーション開始時
animate={{ opacity: 1, y: 0 }} // 💡 アニメーション終了時
transition={{ duration: 0.5 }} // 💡 かける時間
className="p-4 bg-white shadow rounded"
>
{children}
</motion.div>
);
💡 2. 要素が消える時を制御する:AnimatePresence
Reactで最も難しい「コンポーネントがDOMから消える瞬間のアニメーション」も、AnimatePresence を使えば一瞬で解決します。
import { motion, AnimatePresence } from 'framer-motion';
export const List = ({ items }) => (
<ul>
<AnimatePresence>
{items.map((item) => (
<motion.li
key={item.id}
initial={{ opacity: 0, x: -20 }}
animate={{ opacity: 1, x: 0 }}
exit={{ opacity: 0, x: 20 }} // 💡 削除される時の動き
layout // 💡 他の要素が詰まる動きも自動でアニメーション化!
>
{item.text}
</motion.li>
))}
</AnimatePresence>
</ul>
);
💡 3. 実装のコツ:やりすぎないこと
アニメーションは隠し味と同じです。
速度: 0.2秒〜0.5秒程度に収める。長すぎると「遅いアプリ」に感じられます。
物理法則: spring(バネ)のような動きを使うと、より人間味のある自然な動きになります。
📝 67日目のまとめと課題
✅ 本日の習得ポイント
motionコンポーネント: initial(初期)、animate(実行)を指定するだけで動く。
AnimatePresence: 要素が「消える」ときの貴重な演出タイミングを逃さない。
layoutプロップ: リストの並べ替えなどを自動で滑らかにする魔法の属性。
📝 67日目の課題
自分のアプリの「トースト通知」や「モーダル窓」に、ふわっと浮き上がるようなアニメーションを追加してみましょう。
Framer Motionの Examples を見て、「これいいな!」と思う動きを一つ探してみてください。
もっとReactを学びたい人はここから!
#エンジニアと繋がりたい #プログラミング学習 #React #100DaysOfCode #今日の積み上げ #FramerMotion #Webデザイン
