第3回

React Bitsでアニメ付きUIを最短実装する

アニメ付きUIコンポーネント集 React Bits を実際に試す。jsrepoでの導入からBlurTextの設置までを、このサイトと同じVite+Tailwind環境で動かしながら解説する。

·13分で読める
たける
たける ランディングページでよく見る、文字がふわっと出てきたり背景が動いたりする「今どきのUI」。自分でゼロから書くと結構大変で。手早く入れられるものないですか?
りこ
りこ **React Bits** が今その用途で人気。アニメ付きのReactコンポーネントを110個以上集めたもの。特徴は「npm install して使う」んじゃなくて、**ソースを自分のリポジトリに取り込む**方式。shadcn/ui と同じ考え方。

「React最新ラボ」最終回。最後は見た目の話。話題のUIコンポーネント集 React Bits を、このサイトと同じ Vite + TypeScript + Tailwind 構成に入れて動かす。

React Bits の考え方:インストールではなく「取り込む」

なつみ
なつみ ポイントは、取り込んだ後は**自分のコードになる**こと。色も動きも自由に書き換えられる。ブラックボックスの依存パッケージじゃないから、デザイン都合の微調整がしやすい。

React Bits は jsrepo というCLIで、選んだコンポーネントのソースを自分の src/ にコピーする。提供形態は4つの組み合わせがあり、プロジェクトに合わせて選ぶ。

組み合わせ 内容
JS-CSS JavaScript+素のCSS
JS-Tailwind JavaScript+Tailwind
TS-CSS TypeScript+素のCSS
TS-Tailwind TypeScript+Tailwind(このサイトはこれ)

導入する

このサイトと同じ TypeScript + Tailwind 構成に追加してみる。各コンポーネントの公式ページに、その構成用の npx jsrepo add ... コマンドが表示されるので、それをコピーするのが基本だ。

たとえば文字アニメの BlurText を TS-Tailwind で入れるなら、こうなる。

npx jsrepo@latest add https://reactbits.dev/r/BlurText-TS-TW

URL末尾の BlurText-TS-TW が「コンポーネント名-言語-スタイル」を表す。初回はプロジェクト用の設定ファイルを作るか聞かれるので、プロジェクト直下で実行する。実行すると src/ 配下にコンポーネントのソースが入る。

なつみ
なつみ コンポーネントによっては、中で `motion`(Framer Motion)や GSAP を使うものがある。その場合は必要な依存も一緒に案内されるから、合わせて入れる。

文字をふわっと出す:BlurText

取り込んだ BlurText を使ってみる。ぼやけた状態から、語ごと・文字ごとにくっきり浮かび上がるテキストアニメだ。

// 取り込んだパスに合わせて import する
import BlurText from './components/BlurText/BlurText'

export function Hero() {
  return (
    <BlurText
      text="現場で役立つReact実践入門"
      animateBy="words"
      direction="top"
      delay={150}
      stepDuration={0.35}
      className="text-3xl font-bold"
    />
  )
}

主なprops。

prop 意味 既定
text 表示する文字列 ''
animateBy 'words'(語ごと)/ 'letters'(文字ごと) 'words'
direction 'top' / 'bottom'(ぼかしが消える向き) 'top'
delay 1要素ずつずらす遅延(ms) 200
stepDuration 1ステップのアニメ長(秒) 0.35
アニメ開始時(ぼやけて薄い)

現場で役立つReact実践入門

アニメ完了後(語ごとにくっきり表示)

現場で役立つReact実践入門

スクロールで滑り込ませる:AnimatedContent

AnimatedContent は、要素が画面に入ってきたタイミングで下からスッと現れるラッパー。中身を包むだけで使える。

import AnimatedContent from './components/AnimatedContent/AnimatedContent'

export function Section() {
  return (
    <AnimatedContent distance={100} direction="vertical" duration={0.8} delay={0.1}>
      <h2>スクロールで現れる見出し</h2>
    </AnimatedContent>
  )
}

distance(移動量px)・direction'vertical' / 'horizontal')・duration(秒)・delay(秒)あたりを調整する。これに加えて、背景系の AuroraDotGrid、数字を回す CountUp など、装飾用のコンポーネントが一通り揃っている。

取り込み方式の利点と注意

たける
たける 自分のコードになるのは嬉しいですけど、逆に「あとから本家が直しても自動で反映されない」ってことですよね?
りこ
りこ そう。アップデートは手動で取り直す。代わりに、npmのバージョン地獄や破壊的変更に振り回されない。使うのは数個だけにして、入れたコードは自分で把握しておくのがコツ。
  • 利点:取り込んだ後は自分のコード。改変自由・依存の上書きに巻き込まれにくい
  • 注意:本家の更新は自動で来ない(手動で取り直し)。motion / gsap など依存が増える。必要な分だけ入れる
  • パフォーマンス:背景の常時アニメ(Aurora など)は描画コストが高め。多用しない

どこまで使う? Base UI との使い分け

最後に「どんなUIライブラリを選ぶか」の地図を一つ。React Bits と、よく比較される Base UI(MUIチームのheadlessライブラリ)は、役割が違う。

React Bits Base UI
担当 見た目・動き(装飾) 振る舞い・アクセシビリティ(土台)
BlurText / Aurora / CountUp Menu / Dialog / Tooltip
見た目 付いてくる 自前で当てる(headless)
向く場面 動きで魅せたいLP・ヒーロー 堅牢で操作可能なUI部品
りこ
りこ 動きで魅せたいなら React Bits、キーボード操作やスクリーンリーダー対応まで含めた「ちゃんとしたUI部品」が欲しいなら Base UI。排他じゃなく、土台を Base UI、飾りを React Bits、と組み合わせてもいい。

まとめ

  • React Bits は jsrepoソースを取り込むアニメUI集。TS-Tailwind 構成にそのまま入る
  • BlurText / AnimatedContent などをコピーして、自分のコードとして調整できる
  • 取り込み方式ゆえ更新は手動。依存とパフォーマンスに注意して、必要な分だけ使う
  • 飾りは React Bits、操作とa11yの土台は Base UI、と役割で使い分ける

これで「React最新ラボ」3回が完結。View Transitions(実験的)・Waku(alpha)・React Bits と触ってきたが、最新技術は「まだ実験段階/alpha」も多い。それでも実際に手を動かすと、「何が便利で、何が時期尚早か」が自分の感覚で分かる。一次情報(公式ドキュメント)で確かめながら試す――それが新技術と付き合う一番の近道だ。