Communitygithub.com

phido0410/rive

Rive インタラクティブアニメーション(.rivファイル)をWeb上で扱う — @rive-app/webgl2 / canvas ランタイム、Reactフック(useRive、データバインディングフック)、ステートマシン、データバインディング(ビューモデル)、そして動画用の @remotion/rive。ユーザーが .riv ファイルを持っている場合や、Rive、インタラクティブなマスコット/アイコン、ステートマシン駆動のアニメーションについて依頼があった場合に使用します。

rive とは?

このスキルは、Rive インタラクティブアニメーション(.riv ファイル)を Web 上で再生・制御するための包括的なガイドです。Rive エディタ(rive.app)で作成された .riv ファイルを、Vanilla JavaScript、React、Remotion などの環境で利用する方法を解説します。主な機能として、ステートマシンによるアニメーション制御、ビューモデルを用いたデータバインディング(数値、文字列、真偽値、色、列挙型、トリガーの操作)、および動画フレームに同期した再生が含まれます。このスキルは、@rive-app/webgl2、@rive-app/canvas、@rive-app/react-canvas、@remotion/rive などの主要パッケージをサポートしており、各環境向けの具体的なコード例を提供します。ユーザーがインタラクティブなマスコットやアイコン、ステートマシン駆動のアニメーションを必要とする場合に特に有用で、.riv ファイル自体の作成方法は含まれませんが、既存のファイルをプログラムから自在に操作するための知識を提供します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/phido0410/claude-video-skills/tree/HEAD/skills/rive

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

rive は何をしますか?

2026年10月確認:@rive-app/canvas 2.45、@rive-app/react-canvas 4.37、@remotion/rive 4.0。

.riv ファイルは Rive エディタ(rive.app)で作成されます。コードでファイルを再生・制御することはできますが、ファイル自体を作成することはできません。ユーザーにファイルを依頼するか、Rive マーケットプレイスからコミュニティファイルを入手してください。

パッケージ

必要な環境パッケージ
バニラJS、推奨@rive-app/webgl2
バニラJS、Canvas2D@rive-app/canvas(テキスト、レイアウト、スクリプティング、オーディオが不要な場合は @rive-app/canvas-lite)
React@rive-app/react-webgl2 または @rive-app/react-canvas
Remotion@remotion/rive

バニラJS

import { Rive } from '@rive-app/webgl2'

const r = new Rive({
  src: '/hero.riv',
  canvas: document.getElementById('canvas'),
  stateMachines: 'State Machine 1',  // エディタでの名前
  autoplay: true,
  autoBind: true,                     // デフォルトのビューモデルインスタンスをバインド
  onLoad: () => r.resizeDrawingSurfaceToCanvas(),
})
window.addEventListener('resize', () => r.resizeDrawingSurfaceToCanvas())
// 後で: r.cleanup()

データバインディング(.riv を駆動する現在の方法)

ステートマシン入力(r.stateMachineInputs(name)、.value、.fire())は、ランタイムの型では非推奨です。ビューモデルがない古いファイルにのみ使用してください。

const vmi = r.viewModelInstance          // autoBind: true が必要
vmi.number('Progress').value = 0.75
vmi.string('Title').value = 'Hello'
vmi.boolean('Active').value = true
vmi.color('Accent').value = 0xFFFF5500    // ARGB
vmi.enum('Mood').value = 'Happy'
vmi.trigger('Jump').trigger()
vmi.number('Progress').on((e) => console.log(e.data))

React

import { useRive, useViewModel, useViewModelInstance,
  useViewModelInstanceNumber, useViewModelInstanceTrigger } from '@rive-app/react-canvas'

const { rive, RiveComponent } = useRive({ src: '/hero.riv', stateMachines: 'State Machine 1', autoplay: true })
const vm = useViewModel(rive)
const vmi = useViewModelInstance(vm, { useDefault: true, rive })
const { setValue: setProgress } = useViewModelInstanceNumber('Progress', vmi)
const { trigger: jump } = useViewModelInstanceTrigger('Jump', vmi)

return <RiveComponent style={{ width: 400, height: 400 }} onClick={jump} />

コンテナには明示的なサイズが必要です。RiveComponent は親要素を埋めます。

動画用

Remotion では、@remotion/rive から <RemotionRiveCanvas src="..." /> を使用します。これはファイルを現在のフレームに同期して再生します(プロパティについては remotion-docs を確認してください)。クリックやホバーを待つインタラクティブなステートマシンロジックはレンダリング中には動作しません。動画で使用する場合は、タイムラインアニメーションを持つ .riv を設計してください。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

関連スキル