Framer Motion with Claude Code
Learn about framer motion using Claude Code. Practical tips and code examples included.
Framer Motionで洗練されたアニメーションを構築する
Framer MotionはReact向けの宣言的アニメーションライブラリです。CSSアニメーションでは難しい複雑なインタラクションやレイアウトアニメーションを、直感的なAPIで実装できます。Claude Codeはアニメーション設計から細かなイージング調整まで的確にサポートしてくれます。
基本的なアニメーション
Claude Codeにアニメーション付きのコンポーネントを依頼しましょう。
> Framer Motionでカード一覧のアニメーションを作って。
> マウント時のスタガー表示、ホバー時の拡大、クリック時のフィードバック付きで。
import { motion, AnimatePresence } from "framer-motion";
const containerVariants = {
hidden: { opacity: 0 },
visible: {
opacity: 1,
transition: {
staggerChildren: 0.1,
},
},
};
const cardVariants = {
hidden: { opacity: 0, y: 20 },
visible: {
opacity: 1,
y: 0,
transition: { duration: 0.4, ease: "easeOut" },
},
};
function CardList({ items }: { items: Item[] }) {
return (
<motion.div
variants={containerVariants}
initial="hidden"
animate="visible"
className="grid grid-cols-3 gap-4"
>
{items.map((item) => (
<motion.div
key={item.id}
variants={cardVariants}
whileHover={{ scale: 1.03, boxShadow: "0 8px 30px rgba(0,0,0,0.12)" }}
whileTap={{ scale: 0.98 }}
className="p-6 bg-white rounded-lg shadow"
>
<h3>{item.title}</h3>
<p>{item.description}</p>
</motion.div>
))}
</motion.div>
);
}
AnimatePresenceでマウント・アンマウント
要素の追加・削除にアニメーションを付けるパターンです。
function NotificationStack({ notifications }: { notifications: Notification[] }) {
return (
<div className="fixed top-4 right-4 space-y-2">
<AnimatePresence mode="popLayout">
{notifications.map((notification) => (
<motion.div
key={notification.id}
initial={{ opacity: 0, x: 100, scale: 0.9 }}
animate={{ opacity: 1, x: 0, scale: 1 }}
exit={{ opacity: 0, x: 100, scale: 0.9 }}
transition={{ type: "spring", stiffness: 300, damping: 25 }}
layout
className="bg-white p-4 rounded-lg shadow-lg min-w-[300px]"
>
<p>{notification.message}</p>
</motion.div>
))}
</AnimatePresence>
</div>
);
}
レイアウトアニメーション
layoutプロパティを使って、レイアウト変更時のスムーズなアニメーションを実現できます。
function FilterableGrid({ items }: { items: Item[] }) {
const [filter, setFilter] = useState("all");
const filteredItems = items.filter(
(item) => filter === "all" || item.category === filter
);
return (
<div>
<div className="flex gap-2 mb-4">
{["all", "design", "dev", "marketing"].map((f) => (
<motion.button
key={f}
onClick={() => setFilter(f)}
className={`px-4 py-2 rounded ${filter === f ? "bg-blue-500 text-white" : "bg-gray-200"}`}
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
>
{f}
</motion.button>
))}
</div>
<motion.div layout className="grid grid-cols-3 gap-4">
<AnimatePresence>
{filteredItems.map((item) => (
<motion.div
key={item.id}
layout
initial={{ opacity: 0, scale: 0.8 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.8 }}
transition={{ duration: 0.3 }}
className="p-4 bg-white rounded-lg"
>
{item.title}
</motion.div>
))}
</AnimatePresence>
</motion.div>
</div>
);
}
スクロール連動アニメーション
useScrollとuseTransformでスクロール位置に連動するアニメーションを実装します。
import { motion, useScroll, useTransform } from "framer-motion";
function ParallaxHero() {
const { scrollY } = useScroll();
const y = useTransform(scrollY, [0, 500], [0, -150]);
const opacity = useTransform(scrollY, [0, 300], [1, 0]);
const scale = useTransform(scrollY, [0, 300], [1, 0.8]);
return (
<motion.div
style={{ y, opacity, scale }}
className="h-screen flex items-center justify-center"
>
<h1 className="text-6xl font-bold">Welcome</h1>
</motion.div>
);
}
function ScrollReveal({ children }: { children: React.ReactNode }) {
const ref = useRef(null);
const { scrollYProgress } = useScroll({
target: ref,
offset: ["start end", "end start"],
});
const opacity = useTransform(scrollYProgress, [0, 0.3], [0, 1]);
const y = useTransform(scrollYProgress, [0, 0.3], [50, 0]);
return (
<motion.div ref={ref} style={{ opacity, y }}>
{children}
</motion.div>
);
}
ジェスチャーアニメーション
ドラッグやスワイプなどのジェスチャーに対応したアニメーションです。
function DraggableCard() {
return (
<motion.div
drag
dragConstraints={{ left: -100, right: 100, top: -50, bottom: 50 }}
dragElastic={0.2}
dragTransition={{ bounceStiffness: 300, bounceDamping: 20 }}
whileDrag={{ scale: 1.1, cursor: "grabbing" }}
className="w-48 h-48 bg-blue-500 rounded-xl cursor-grab"
/>
);
}
function SwipeCard({ onSwipe }: { onSwipe: (dir: string) => void }) {
return (
<motion.div
drag="x"
dragConstraints={{ left: 0, right: 0 }}
onDragEnd={(_, info) => {
if (info.offset.x > 100) onSwipe("right");
if (info.offset.x < -100) onSwipe("left");
}}
className="p-8 bg-white rounded-xl shadow-lg"
>
スワイプしてください
</motion.div>
);
}
Summary
Framer Motionを使えば、Reactアプリケーションに洗練されたアニメーションを簡単に追加できます。Claude Codeに「このようなアニメーションが欲しい」と伝えるだけで、適切なバリアント設計やイージング設定を生成してくれます。
UIコンポーネントとの組み合わせはRadix UIコンポーネント活用を、デザインシステムの構築はshadcn/ui活用ガイドを参照してください。Framer Motion公式ドキュメントも確認しておきましょう。
Free PDF: Claude Code Cheatsheet in 5 Minutes
Just enter your email and we'll send you the single-page A4 cheatsheet right away.
We handle your data with care and never send spam.
Level up your Claude Code workflow
50 battle-tested prompt templates you can copy-paste into Claude Code right now.
About the Author
Masa
Engineer obsessed with Claude Code. Runs claudecode-lab.com, a 10-language tech media with 2,000+ pages.
Related Posts
7 CLAUDE.md Templates for Claude Code You Can Copy Into Real Projects
Copy-paste 7 practical CLAUDE.md templates for solo apps, content sites, APIs, teams, and legacy codebases, plus the failure cases to avoid.
Claude Code Approval and Sandbox Guide | Safe Daily Settings for Real Work
Learn how to split Claude Code actions into allow, ask, deny, and sandboxed workflows with working settings, hooks, and rollout examples.
Complete Beginner's Guide to Claude Code 2026 | 7 Steps from Zero to Production-Ready
A complete beginner's guide for first-time Claude Code users. From installation to integrating it into your real development workflow — covering every pitfall Masa ran into when starting out.
Related Products
50 Battle-Tested Claude Code Prompt Templates
Copy, paste, ship. 50 production-ready prompts.
Use proven prompts for code review, refactoring, testing, documentation, debugging, architecture, and incident response.
The Complete Claude Code Setup & Configuration Guide
From install to team-ready workflow.
A practical guide to installation, CLAUDE.md, hooks, MCP servers, permissions, IDE setup, and CI/CD workflows.