interactive-prototype について
interactive-prototype は、画面フローを検証したいデザイン・開発向けの、クリック可能なプロトタイプを作るスキルです。React と Babel を使い、コンテキスト確認からプレビュー検証、引き継ぎまでを扱います。
主な機能
- 01React と Babel による操作可能なプロトタイプ作成
- 02デザイントークン・コードベース・設計コンテキストの確認
- 03画面・操作・トランジションの計画
- 04DeviceFrame によるプロトタイプ構成
- 05ローカル HTTP サーバーでのプレビューと検証
活用シーン
- 01要件からクリック可能なプロトタイプを作成
- 02画面遷移や操作をプロトタイプで模擬
- 03既存コードベースやデザインシステムに沿った画面作成
- 04検証後にオフライン提供や開発チームへの引き継ぎを準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bluzir/ claude-code-design --skill interactive-prototypeインストール後、Claude Code で/interactive-prototypeを入力して読み込まれたか確認します。
詳細
インタラクティブプロトタイプ
静的なモックアップではなく、クリックして操作できるプロトタイプを作成します。バージョンを固定した React + Babel のインライン構成を使用し、DeviceFrame でラップします。
フェーズ 0 — コンテキストの事前確認(自動検出、質問は最大 1 つ)
デザインに関する質問をする前に、コンテキストを何も言わずに確認します。
.claude/design-tokens.jsonが存在する場合はRead .claude/design-tokens.jsonBash(ls ~/.claude/design-systems/ 2>/dev/null)— brief にフォルダー名と一致するブランドの記載がある場合は自動的に適用します- コードベースのトークンを
Globで検索します:**/tailwind.config.*、**/theme.{ts,js,json}、**/tokens.{css,scss}、**/_variables.* - brief をスキャンします:github URL →
Skill: ingest-github、Figma URL →Skill: ingest-figma、画像の添付 →Skill: ingest-screenshot、.md/.pdf→Read
何も見つからない場合は、AskUserQuestion を 1 回だけ使用して、レジストリ/コードベース/スクリーンショット/Figma/なし(frontend-design を使用)/Claude に任せる、から選んでもらいます。「Using . Proceeding.」と報告します。
フェーズ 1 — 曖昧さの確認
brief で次の項目を確認します:プラットフォーム(iOS/Android/デスクトップ/ウェブ)、アプリのカテゴリー(フードデリバリー、ソーシャル、生産性など)、機能の数、デザインコンテキスト(ブランド/コードベース)。
プラットフォームとカテゴリーが記載されている場合、確認質問は最大 2 つです。それ以外の場合は AskUserQuestion を使用します。
- プラットフォーム
- 必要な画面(リスト)
- 画面間の遷移(即時/スライド/フェード/カスタム)
- 「ライブデータ」のモック(偽の API 応答)が必要か
- 操作方法 — タップのみか、スクロール/スワイプ/ドラッグも含むか
- 希望するバリエーション
ブランドのコンテキストについては質問しないでください。 フェーズ 0 で確認済みです。
フェーズ 2 — ビジュアルシステム
フェーズ 0 で得たコンテキストを使い、モバイルに適したシステムを確定します。
- モバイルではタップ領域を最低 44px にします
- 読み込んだトークンに基づき、スペーシング/文字サイズのスケールを統一します
- トークンがない場合は
Skill: frontend-designを呼び出します
フェーズ 3 — ビルド
- 次のシェルを含む
artifacts/<slug>.htmlを作成します。<!doctype html> <html> <head> <meta charset="utf-8"/> <title>{{name}}</title> <script src="https://unpkg.com/[email protected]/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script> <script src="https://unpkg.com/[email protected]/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script> <script src="https://unpkg.com/@babel/[email protected]/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script> <script src="./device_frame.jsx" type="text/babel"></script> <script src="./animations.jsx" type="text/babel"></script> <style>body { margin: 0; display: flex; align-items: center; justify-content: center; min-height: 100vh; background: #f4f4f6; }</style> </head> <body> <div id="root"></div> <script type="text/babel"> const { useState } = React; // your components here function App() { const [screen, setScreen] = useState('home'); return <DeviceFrame kind="ios"> {screen === 'home' && <HomeScreen onNav={setScreen}/>} {screen === 'detail' && <DetailScreen onBack={() => setScreen('home')}/>} </DeviceFrame>; } ReactDOM.createRoot(document.getElementById('root')).render(<App/>); </script> </body> </html> Bash(cp starters/device_frame.jsx "$(dirname <html>)/")+Bash(cp starters/animations.jsx "$(dirname <html>)/")— HTML と同じディレクトリにコピーします- ナビゲーションパターン:現在の画面には
useStateを使用します。遷移には animations.jsx の<Transition>を使用します。 - 重要な React のルール:
const styles = {...}は使用しないでください。const headerStyles、const cardStylesのように、コンポーネント名を先頭に付けてください。インラインスタイルも使用できます。 - モックデータはインラインで記述し、外部 fetch は使用しません。
フェーズ 4 — 検証
重要: この成果物は外部の .jsx スターターを読み込むため、file:// では CORS エラーが発生します。最初に /serve を実行してください(初回のみ)。その後、http 経由でプレビューします。
/serve
/done http://127.0.0.1:4567/artifacts/<slug>.html
エラーを修正し、バックグラウンドで Skill: verify-artifact を実行します。
フェーズ 5 — 次のステップ
/make-tweakableで調整項目(primaryColor、fontSize、density variants)を公開します/export-standaloneでオフライン用の成果物を作成します/handoffで開発チーム向けのコンポーネントファイルを作成します/register-assetで概要に追加します