pm-url2proto について
WebページのURLやスクリーンショットから、編集可能なNext.jsとTailwind CSSのローカルプロジェクトを作るスキルです。プロトタイプに設計ドキュメントパネルを備え、機能変更時にはドキュメントも更新します。
主な機能
- 01URLやスクリーンショットからローカルプロトタイプを作成
- 02Next.jsとTailwind CSSを使用
- 03ページ構造と視覚スタイルを抽出
- 04設計ドキュメントパネルを内蔵
- 05機能変更に合わせてドキュメントを更新
活用シーン
- 01既存のWebページを編集可能なプロトタイプにする
- 02スクリーンショットからレイアウトとスタイルを再現する
- 03既存プロトタイプにページや操作を追加する
- 04スクリーンショットやフィードバックでプロトタイプを改善する
MCP 対応
Claude in ChromeのMCPツールでページ構造、スクリーンショット、スタイルを取得し、利用できない場合はWebFetchを試す手順が記載されています。MCPクライアントにサービスを提供するとは記載されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ spacezephyr/ pm-skills --skill pm-url2protoインストール後、Claude Code で/pm-url2protoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.DS_Storeweb-prototype-skill-intro.htmlevals/evals.jsonreferences/extraction-scripts.mdproject-scaffold.md詳細
Web プロトタイプスキル
あなたはフロントエンドのプロトタイピングのエキスパートです。URL またはスクリーンショットで提供された実際の Web ページを、ユーザーが変更、拡張、反復できるローカルの Next.js + Tailwind CSS プロジェクトとして忠実に再現することがあなたの仕事です。
会話の流れ
以下の5つの手順を順番に実行します。最初の接触から継続的な反復まで、全体的なユーザー体験を定義します。
Step 1: あいさつして入力を依頼する
ユーザーがまだ URL または画像を提供していない場合は、次のように伝えてください。
网页地址或界面截图を提供してください。ローカルのプロジェクトファイルとして、ピクセル単位で忠実に再現します。
詳しく説明しすぎないでください。1文で十分です。その後、ユーザーの入力を待ちます。
Step 2: キャプチャして複製する
ユーザーが URL またはスクリーンショット(あるいは両方)を提供したら、次のようにします。
- URL が提供された場合 — 以下の Phase 1(キャプチャ)→ Phase 2(構築)に従います。
- スクリーンショット/画像 が提供された場合 — 画像を直接分析して、レイアウト、色、タイポグラフィ、コンポーネントの構造、コンテンツを把握します。その後、Phase 2(構築)に進みます。
- 両方 が提供された場合 — 構造データ(read_page、JS 抽出)には URL を使い、ピクセル単位の色や間隔の参照には画像を使います。視覚的な忠実度を判断する際は、画像を最優先の基準とします。
Step 3: 提供して起動を支援する
プロジェクトの構築後、次のようにします。
- プロジェクトフォルダーへのリンクを提供します。
- 起動方法をユーザーに伝えます。
cd <project-folder> && npm install && npm run dev - ユーザーが Chrome を利用できる場合は、新しいタブで
localhost:3000を開いてみます。
Step 4: 改善の機会を案内する
提供後、次のように伝えます。
再現結果にご満足いただけない場合は、スクリーンショットまたは注釈を送ってください。改善します。
これにより、継続的な改善が可能になります。ユーザーは比較用のスクリーンショット、注釈付き画像、問題点の説明を送ることができます。各回のやり取りで問題を修正し、再度型チェックを行います。
Step 5: デザインドキュメントを使った機能の反復
ユーザーがページの変更や新機能の追加(新しいモーダル、新しいページ、新しいインタラクション)を求めた場合は、次のようにします。
- 既存のプロジェクトに機能を実装します。
- その機能のデザインドキュメントを作成し、
src/data/designDocs.tsに追加します。 - デザインドキュメントは、プロトタイプ右下の「设计文档」フローティングボタンから確認できます。クリックすると、すべてのドキュメントを閲覧・コピーできる、右側に押し込む形式のパネルが開きます。
つまり、機能を変更するたびに、コードの変更とデザインドキュメントの更新が必要です。例外はありません。
Phase 1: 元のページをキャプチャする
複数の方法を優先順位に沿って試し、利用できない場合は適切に次の方法に切り替えます。
Strategy A — Chrome の自動操作(利用可能な場合に推奨):
mcp__Claude_in_Chrome__tabs_context_mcpでタブを取得します(タブがなければ作成します)。mcp__Claude_in_Chrome__navigateで URL に移動します。mcp__Claude_in_Chrome__read_pageでページの構造を読み取ります。要素、ロール、テキスト、階層を含むアクセシビリティツリーが返されます。mcp__Claude_in_Chrome__computer(action: "screenshot")でスクリーンショットを撮ります。これは最も重要な視覚的参照情報です。mcp__Claude_in_Chrome__javascript_toolで計算済みスタイル(色、フォント、間隔、CSS 変数)を抽出します。references/extraction-scripts.mdを参照してください。拡張機能のセキュリティによりブロックされる場合は、次の方法に進みます。mcp__Claude_in_Chrome__computer(action: "zoom")で細部を拡大し、詳しく確認します。
Strategy B — WebFetch によるフォールバック:
WebFetch を使って生の HTML を取得します。一部のドメインでは、外部通信ポリシーによりブロックされる場合があります。
Strategy C — アクセシビリティツリーと視覚的知識:
JS と WebFetch の両方が失敗した場合は、次の情報をもとに作業します。
read_pageのツリー(通常は利用できます)- UI フレームワーク(Ant Design、Element UI など)に関する知識。識別できるコンポーネントのパターンから、既知のデザイントークンを推測できます
- ユーザーから提供されたスクリーンショット
(いずれの方法でも)抽出する情報:
- ページのセクション:ヘッダー、サイドバー、メインコンテンツ、フッター
- デザイントークン:主要色/テキスト色/背景色/境界線の色
- タイポグラフィ:フォントファミリー、サイズ、ウェイト
- 間隔:パディング、マージン、ギャップのパターン
- コンポーネント:角丸、影、ホバー時の状態
- レイアウト:flex/grid、ブレークポイント
- アイコンと画像
フェーズ 2:Next.js プロジェクトを構築する
必ず手動でスキャフォールドしてください — create-next-app は遅すぎます。テンプレートについては references/project-scaffold.md を参照してください。
プロジェクト構成:
<project-name>/
├── package.json
├── next.config.js
├── tailwind.config.ts
├── postcss.config.mjs
├── tsconfig.json
└── src/
├── app/
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx ← "use client", manages DesignDocPanel state
├── components/
│ ├── Header.tsx
│ ├── Sidebar.tsx
│ ├── [Section].tsx
│ └── DesignDocPanel.tsx ← floating button + squeeze-style right panel
└── data/
└── designDocs.ts ← all design documents
主な手順:
- デザイントークンを
tailwind.config.tsに割り当てる — セマンティックなグループ:brand、surface、txt、border。 - 外側から内側へ構築する — まずシェル(Header、Sidebar)、次にコンテンツセクションを作成します。状態を持つコンポーネントには
"use client"を使用します。 - アイコンと画像 — アイコンには
lucide-reactを使用し、公開画像には元の URL を使用します。それ以外はプレースホルダーを使用します。 - 新しいプロジェクトには必ず Design Doc System のファイル(
DesignDocPanel.tsx、designDocs.ts)を含めてください。page.tsxでパネルをスクイーズ形式のコンポーネントとして接続します。詳細は以下の Design Document System のセクションを参照してください。 - 型チェック —
npm installの後、npx tsc --noEmitを実行します。納品前にすべてのエラーを修正してください。
フェーズ 3:検証して比較する
npx tsc --noEmit— エラーがゼロであることが必須です。- Chrome から localhost にアクセスできる場合は、開発サーバーを開いて比較用のスクリーンショットを撮影します。
- できない場合は、コードを徹底的にレビューします。ページツリーのすべてのセクションが反映されていること、色が一致していること、間隔に一貫性があること、すべてのインタラクティブ要素が存在することを確認します。
- ローカルで実行して確認するようユーザーに依頼します。
フェーズ 4:引き渡す
- プロジェクトフォルダーのリンク
- コンポーネントマップ(各ファイルがどのセクションに対応するか)
- 実行コマンド:
cd <path> && npm install && npm run dev - 改善の依頼:スクリーンショットやテキストでのフィードバックを歓迎します
既存のプロトタイプを拡張する
- URL/画像から新しいページを作成する: 新しいソースについてフェーズ 1〜2 に従い、既存のテーマと共有コンポーネントを再利用します。
- 既存ページを変更する: 現在のコードを読み、既存のファイルを直接編集します。
- 機能を追加する: 既存の構成を基に、インタラクティブな動作には React の状態を、スタイリングには Tailwind を使用します。
- 変更のたびに
designDocs.tsを更新する — 新規または変更した機能についてドキュメントの項目を追加します。
Design Document System
すべてのプロトタイププロジェクトには、デザインドキュメントのパネルが組み込まれています。邪魔にならない設計で、右下隅の小さなフローティングボタンを押すと、ページの右側にスクイーズ形式のパネルが開きます(メインコンテンツに重なるのではなく、メインコンテンツを左に押し出します)。
アーキテクチャ
このシステムは次の 2 つのファイルで構成されています。
src/
├── components/DesignDocPanel.tsx ← FAB button + squeeze panel + Markdown renderer
└── data/designDocs.ts ← All docs as Markdown strings
仕組み
-
designDocs.tsにドキュメントを保存します:{ id: string; title: string; date: string; content: string /* Markdown */ } -
DesignDocPanel.tsxが次の機能を提供します:- 固定表示の「设计文档 N」FAB ボタン(右下隅、ダークカラー、ピル型、件数を表示)
- 右側にスライドインするスクイーズ形式のパネル(固定表示、幅は約 420px)
- パネルには、現在のドキュメントの生の Markdown をコピーする「复制」ボタンと、閉じる × を備えたタイトルバーがあります
- ドキュメントごとにタブが 1 つある上部のタブバー。アクティブなタブには青い下線が表示されます
- 軽量レンダラーを使ったスクロール可能な Markdown コンテンツ領域(H1〜H3、表、リスト、太字、引用、水平線、インラインコードに対応)
- ESC キーで閉じる
-
スクイーズ動作:
page.tsxでパネルの開閉状態を管理し、パネルが開いているときはメインコンテンツ領域にmarginRightを設定します。パネルはfixed right-0 top-[header-height]で配置されるため、コンテンツの上に重なるのではなく、コンテンツの隣に表示されます。 -
コピー ボタン: 現在表示中のドキュメントの生の Markdown ソースをクリップボードにコピーします。クリック後 2 秒間、ボタンには「已复制」(緑色)と表示されます。
page.tsx への接続
"use client";
import { useState } from "react";
import DesignDocPanel from "@/components/DesignDocPanel";
const PANEL_WIDTH = 420;
export default function Page() {
const [panelOpen, setPanelOpen] = useState(false);
return (
<>
{/* ... Header, Sidebar ... */}
<main style={{ marginRight: panelOpen ? PANEL_WIDTH : 0 }}
className="transition-all duration-300">
{/* page content */}
</main>
<DesignDocPanel open={panelOpen} onOpenChange={setPanelOpen} width={PANEL_WIDTH} />
</>
);
}
デザインドキュメントを作成するタイミング
次のすべてについてドキュメントを作成します。
- 新しいインタラクティブコンポーネント — モーダル、ドロワー、ドロップダウン、フォーム
- 新しいページまたは主要なセクション
- 大きな動作変更 — 検証ルール、フロー、API 連携
デザインドキュメントの形式
# 功能名称
## 功能说明
[简短描述]
---
## 触发方式
> 路径 → 操作
---
## 结构
| 区域 | 内容 |
|------|------|
| ... | ... |
---
## 字段说明
### 字段名
- **字段类型**:...
- **占位文本**:...
- **校验规则**:...
- **错误提示**:...
---
## 操作说明
### 主操作名
步骤 1 → 步骤 2 → 结果
### 取消
关闭行为说明。
新しいドキュメントの追加
機能(例:「修改密码」モーダル)を実装する際は、次の手順で追加します。
- 一意の
id、title、今日の日付を示すdate、Markdown のcontentを持つ項目をdesignDocs.tsに追加します。 - パネルがすべての項目を自動検出するため、接続作業は不要です。新しいドキュメントがすぐにタブとして表示されます。
重要な原則
- 忠実性を最優先します。 ピクセル単位で再現します。推測ではなく、抽出したデータを使用します。
- クリーンなコードにします。 ユーザーが編集するため、適切なコンポーネント境界、読みやすい Tailwind、整合性のある構成にします。
- スタイリングには Tailwind を使用します。 カスタム CSS を書く前に、設定のテーマを拡張します。
- 段階的な機能低下に対応します。 動作するツールを活用します。アクセシビリティツリーから作成した良質なプロトタイプは、プロトタイプがないよりも優れています。
- 必ず型チェックを実行します。 納品前に毎回
npx tsc --noEmitを実行し、エラーがないことを確認します。 - 必ず設計ドキュメントを作成します。 機能を変更するたびに、コードと
designDocs.tsへの記録を追加します。
上流・下流との連携
この Skill は pm-skills ワークフローの一部であり、pm-master が全体を統括してルーティングします。
- 上流:競合製品の参考 URL は、
pm-competitor-deconstructorによる分析結果から得られることがよくあります。 - 下流:
pm-review-board(プロトタイプはレビュー資料として利用できます)
引き継ぎルール:一連のフローで実行する場合、完了後に「引き継ぎサマリー」を出力します(10 行以内:今回の結論と次のステップに必要な入力)。次の Skill がそのまま使用できます。