
smywとは
smyw、つまり「show me you want」は、Claude Code、DeepSeek Harnessなど、SKILL.mdに対応したAgentで使える、コーディングAgent向けのskillです。Agentがページ、インタラクションフロー、フロントエンドとバックエンドのインターフェースを変更する前に、まずコードを読み、構造化されたspecを作成し、その後オフラインで開ける単一ファイルHTMLプロトタイプを生成します。
このプロトタイプは最終的なビジュアルデザインではなく、モジュール構成、レイアウト位置、トリガー関係、機能変更を表現するための低忠実度ワイヤーフレームです。正式な実装では、引き続きプロジェクト既存のデザイン規約に従ってください。
解決する課題
従来のAgentによるコーディングフローでは、文章による要件から直接実装に入ることが多く、ページ構成、インタラクション方式、インターフェースの境界で認識のずれが生じやすくなります。smywは、要件とコードの間に視覚的な確認段階を追加します。
- ユーザーが機能要件を提示する。
- Agentがプロジェクトのコードを読み、
spec.jsonを生成する。 - ビルドスクリプトがspecを検証し、
preview.htmlを出力する。 - ユーザーがブラウザで案を確認、デモ、ドラッグ、注釈追加する。
- ユーザーがフィードバックをコピーして会話に戻す。
- Agentがフィードバックを反映し、次のプロトタイプを生成する。
- ユーザーが案を確認してから、Agentがコードを書き始める。
smywの目的はデザインツールを置き換えることではなく、実装前にユーザーとコーディングAgentが「何を変更するか、どこに配置するか、どうトリガーするか」について共通認識を持てるようにすることです。
主な機能
番号付きマーカーと変更前後の比較
プロトタイプは実際のページレイアウトに沿って画面全体を描画し、変更を色で区別します。黄色は変更、緑色は追加、赤色は削除を表します。最外層に変更があるモジュールだけに番号を付けるため、内部要素に大量の重複マーカーが表示されることはありません。
キャンバス上の番号または左側の変更一覧をクリックすると、キャンバスが該当領域にフォーカスし、右側に変更前後の部分ワイヤーフレーム、フィールドの差分、Agentの説明、コードコンポーネント、関連する関数またはインターフェースが表示されます。
モジュール全体が新規追加の場合、詳細の「変更前」には、そのモジュールがもともと存在しなかったことが表示されます。内部のボタンやテキストには個別の番号が付きません。
コンポーネントの移動を正確に表現
コンポーネントがある位置から別の位置へ移動すると、元の位置には赤色の「移出」、新しい位置には緑色の「移入」が表示されます。2つの記録は相互に移動できるため、削除と無関係な追加の組み合わせではないことを確認できます。
モーダル、メニュー、展開コンテンツ
モーダル、ドロワー、ドロップダウンメニュー、ポップオーバー、クリック後に展開されるコンテンツは、メイン画面の横にある独立したパネルに配置され、線でトリガーボタンと接続されます。1つのモーダルには複数のトリガー入口を関連付けることができ、削除されたモーダルは赤色の破線で表されます。
多階層メニューは隣接するパネルにさらに分割されます。元の位置で展開されるコンテンツは、ページ内に紫色の破線スロットを残し、展開後に表示される位置を示します。ページ遷移と状態切り替えの接続線はデフォルトで非表示ですが、関連要素を選択すると確認でき、「すべての接続線」ですべて表示することもできます。
クリック可能なデモモード
右上の「▶ デモ」をクリックすると、プロトタイプは変更枠を非表示にし、1画面で実際の操作をシミュレートします。メニューの展開、ドロワーのスライド表示、モーダルの表示、ボタン状態の変更、ページ遷移などをデモできます。
操作できない領域をクリックすると、現在クリック可能なすべての位置が青い枠で点滅し、左側にも実行可能な操作が一覧表示されます。デモでは、戻る、最初から開始、「変更前」と「変更後」の切り替えに対応しています。
直接編集とフィードバックの集約
- 構造を編集:コンポーネントをドラッグして順序やコンテナの所属を調整し、テキスト、種類、幅、配置を変更します。
- 形態を変換:インラインモジュールをモーダル、ドロップダウンメニュー、ドロワー、ポップオーバーに変換すると、システムがトリガーボタンと接続線を生成します。
- 元に戻す・やり直す:CtrlまたはCommandとZで操作を取り消せます。
- 要素に注釈:指定した要素に、位置、インタラクション、コンポーネントの種類、スタイル、文言、機能不足などのカテゴリで意見を追加します。
- 意見のレベル:注釈には「必須修正」「提案」「疑問」のいずれかを設定できます。
- 全体フィードバック:スタイルに関する意見、参考方針を記録し、Agentがあらかじめ提示した確認事項に回答します。
- パッチを返送:構造変更はIDで位置を特定するパッチとしてフィードバック末尾に付加されるため、案全体を返送する必要はありません。
インストール前の準備
smywプロトタイプのビルドに必要なのはNode.js 18以上だけです。プロジェクト自体にサーバーは不要で、実行時の依存関係もありません。まずNode.jsのバージョンを確認します。
node --version
リポジトリのエンドツーエンドテストを実行したり、スクリーンショットを再生成したりする場合は、Google Chromeもインストールする必要があります。デフォルト以外のインストールパスは、CHROME環境変数で指定できます。
smyw skillをインストール
ステップ1:リポジトリをクローン
git clone https://github.com/nishuzumi/show-me-you-want-skill.git
cd show-me-you-want-skill
ステップ2:Agentが読み取れる場所にskillを配置
Claude Codeユーザーはグローバルシンボリックリンクを作成して、すべてのプロジェクトでsmywを使えるようにできます。
ln -s "$PWD/skills/smyw" ~/.claude/skills/smyw
Agentが共通のskillsディレクトリを読み取る場合は、次の場所にリンクすることもできます。
ln -s "$PWD/skills/smyw" ~/.agents/skills/smyw
特定のプロジェクトだけで有効にする場合は、そのプロジェクトのローカルskillディレクトリにコピーします。
cp -r skills/smyw <あなたのプロジェクト>/.claude/skills/smyw
インストールが完了したら、画面やインターフェースを変更する要件をAgentに伝えるか、直接「まずプロトタイプを作って見せてください。」と伝えます。
まずリポジトリのサンプルを実行
リポジトリには生成済みのHTMLサンプルが2つ用意されています。サーバーを起動する必要はなく、ブラウザで直接開けます。
skills/smyw/examples/helpdesk-ai/preview.html:AIによる返信提案を追加したカスタマーサービスワークベンチの、完全な1画面サンプル。skills/smyw/examples/task-tags/preview.html
サンプルのspecを変更した後は、次のコマンドでプレビューを再生成できます。
node skills/smyw/scripts/build.mjs skills/smyw/examples/helpdesk-ai/spec.json
ビルド結果は純粋なフロントエンドの単一ファイルで、オフラインで開いてレビューできます。
要件からプロトタイプを作る基本的な使い方
ステップ1:Agentに要件を説明
ビジネス目標と制約をできるだけ説明します。ただし、すべての画面の詳細を事前に決める必要はありません。例えば次のように伝えます。
カスタマーサービスチケットの詳細にAIによる返信提案を追加してください。まず既存のページとインターフェースを読み、すぐにコードを書かないでください。smywでプロトタイプを生成し、ドロワーの入口、返信の置き換えフロー、関係するインターフェースを確認させてください。
ステップ2:生成されたspecとプレビューを確認
Agentは、次のようなディレクトリに構造化された案を保存します。
.smyw/<日付>-<名前>/spec.json
続いてbuild.mjsで検証し、preview.htmlを生成します。プレビューを開いたら、次の順番で確認できます。
- まず「全体表示」でキャンバス全体をビューポートに収める。
- 黄色、緑色、赤色の変更枠が要件に合っているか確認する。
- 変更一覧を順にクリックし、変更前後の比較とフィールドの変化を確認する。
- 関連するコンポーネント、関数、インターフェースが既存コードと対応しているか確認する。
- 「フローの変更」と「バックエンドの変更」を開き、レイヤーをまたぐ影響を確認する。
- デモモードに入り、メニュー、モーダル、ドロワー、状態ボタンを実際にクリックする。
ステップ3:案を編集して注釈を追加
構造が期待どおりでない場合は、「案を編集」に切り替えてコンポーネントを直接ドラッグするか、インラインコンテンツをモーダルに変換します。直接編集に適さない意見については、要素を選択して注釈を追加し、カテゴリと優先度を設定します。
フィードバックは次の3種類に明確に分けることをおすすめします。
- 必須修正:実装前に必ず対応する問題。
- 提案:Agentが採用するか評価できますが、採用しない場合は理由を説明する必要があります。
- 疑問:まず回答と確認を行い、その後どのように調整するかを決めます。
ステップ4:フィードバックをコピーしてAgentに返す
「フィードバック」ページを開き、全体的なスタイルの意見を補足し、確認待ちの質問に回答してから、「フィードバックをコピー」をクリックします。生成されたMarkdownをAgentとの会話に貼り付けます。
Agentは通常、フィードバックをfeedback-v<N>.mdとして保存し、次のコマンドを実行します。
node skills/smyw/scripts/apply-feedback.mjs .smyw/<dir>/feedback-v1.md .smyw/<dir>/spec.json
node skills/smyw/scripts/build.mjs .smyw/<dir>/spec.json
apply-feedback.mjsは古いspecをバックアップし、フィードバック内のパッチを適用してバージョン番号を増やします。フィードバックのバージョンと現在のspecが一致しない場合、より新しい案が上書きされるのを防ぐため、スクリプトは適用を拒否します。
ステップ5:確認してからコーディングを開始
次のバージョンのプロトタイプを確認し、すべての「必須修正」が反映され、「疑問」に回答されていることを確認します。他に問題がなければ、「案を確認しました。作業を開始できます」をクリックし、Agentに正式な実装段階へ進んでもらいます。
specの基本構造を理解する
smywは1つのツリーで変更前後の画面を同時に記述します。各ノードはchangeで変更を示し、インタラクションと状態はon、hidden、statesで記述します。
{
"id": "reply",
"type": "form",
"label": "顧客への返信",
"component": "<ReplyBox>",
"change": "modified",
"before": { "label": "返信" },
"children": [
{
"id": "reply-quick",
"type": "select",
"text": "クイック返信",
"change": "removed"
},
{
"id": "reply-polish",
"type": "button",
"label": "AI 文章校正",
"change": "added",
"fn": "openDraftDrawer({ mode: \"polish\" })",
"on": [
{ "action": "open", "target": "ai-drawer" }
]
}
]
}
この例では、返信フォームのタイトルが「返信」から「顧客への返信」に変更され、既存のクイック返信が削除され、AI ドロワーを開くボタンが追加されています。component はコードコンポーネントに対応し、fn は関連する動作または API のプレースホルダーを示します。
フィールドの詳細については spec-format.md を、Agent の実行ルールについては SKILL.md を参照してください。
応用テクニック
画面、フロー、バックエンドを同時に確認する
ページレイアウトだけをレビューしないでください。API やデータの変更を伴う機能では、プロセスのスイムレーンとバックエンドの変更も確認してください。スイムレーンでは、ユーザー、フロントエンド、バックエンド、データベース、外部サービスごとに変更前後を比較できます。各ステップの移動先から、対応する画面要素に戻ることもできます。
ツールバーでコードへの影響を把握する
- 「ƒ 関数」を開くと、要素の背後にある動作または API のプレースホルダーを確認できます。
- 「コンポーネント」を開くと、モジュールに対応するコードコンポーネントを確認できます。
- 「未変更部分を薄く表示」を開くと、今回の要件の影響範囲に集中できます。
- 完全なトリガー関係を確認する必要がある場合は、「すべての接続線」を開いてください。
デモモードで状態変化を検証する
デモモードは画面遷移の確認だけでなく、状態の連動を検証するのにも適しています。たとえば、「返信ボックスに置き換える」ボタンを押すと、下書きを返信ボックスに入力してドロワーを閉じることができます。注釈には、その時点で表示していたページ、開いていた内容、クリック履歴が自動的に記録されるため、Agent による問題の再現に役立ちます。
ID を安定させる
フィードバック内の構造変更はノード ID で特定されるため、複数回のイテレーションでは既存ノードの ID をできるだけ維持してください。要素自体が削除された場合や意味が完全に変わった場合を除き、ID を不用意に変更しないでください。
ビルド検証を重視する
build.mjs は、重複 ID、変更ノードに before がないこと、「(変更なし)」で実際のモジュールを代用していること、ポップアップにトリガーがないことなど、よくある問題を検査します。エラーが発生した場合は、まず spec を修正してから、生成結果をレビューしてください。
狭いウィンドウとサンドボックスの制限に対応する
Agent のサイドプレビューなどの狭いウィンドウでは、変更一覧が「☰ 変更」ボタンに収まり、詳細はキャンバス上に表示されます。制限されたサンドボックスでは、ブラウザーによって進捗の保存や自動コピーが禁止される場合があります。コピーに失敗した場合、ページがフィードバック内容を自動的に選択するので、Ctrl または Command を押しながら C を押してください。
プロジェクトの開発とテスト
smyw 自体を変更する必要がある場合は、エンドツーエンドテストを実行するか、README のスクリーンショットを再生成できます。
node tests/e2e.mjs
node tests/readme-shots.mjs
テストには Node.js 18 以上と Google Chrome が必要です。Chrome がデフォルトのパスにない場合は、次のように指定できます。
CHROME=/path/to/chrome node tests/e2e.mjs
このプロジェクトは MIT ライセンスを採用しています。
まとめ
smyw は、コーディング Agent のワークフローを「要件を理解したらすぐにコードを書く」から、「まずコードを読み、spec を生成し、操作可能なプロトタイプを提示し、構造化されたフィードバックを収集してから実装を開始する」へと変えます。特に、ページレイアウト、ポップアップ、状態の切り替え、複数ページのフロー、フロントエンドとバックエンドの API に関わる要件に適しています。
まずはリポジトリのサンプルから試し、Agent が skill を読み取れることを確認してから、実際のプロジェクトで利用してください。変更マーカー、デモモード、直接編集、注釈、バージョン管理されたフィードバックを活用することで、要件の理解におけるずれを大幅に減らし、確認済みの方針に基づいて正式なコーディングを始められます。
