Communitygithub.com

jovd83/プロトタイプスケッチスキル

Angular/React/Vue/静的Webアプリ向けの、可逆的で非破壊的な手書きスキン(Balsamiq、Sharpie、Pencil、Doodle、Blueprint)。スケッチ度を0~100%で調整可能なインタラクティブオーバーレイ付き。ルック&フィールのみ。

プロトタイプスケッチスキル とは?

このスキルは、Webアプリケーションに手書き風の外観(スキン)を追加することで、クライアントに「これはプロトタイプであり、完成品ではない」ことを明確に伝えるためのものです。Angular、React、Vue、および静的なHTMLサイトに対応しており、CSSとSVGフィルターを使って実現される純粋なルック&フィールの変更であり、アプリケーションの動作やコンポーネントには一切影響を与えません。5種類のスタイル(清潔なグレースケールのワイヤーフレーム「Balsamiq」、太い黒マーカーの「Sharpie」、柔らかい鉛筆画の「Pencil」、遊び心のある色付きの「Doodle」、青い紙に白インクの「Blueprint」)と、0~100の5段階で線の揺れ具合を調整できるスケッチレベルが用意されています。スキンの適用は、`<html>`タグに2つの属性(`data-sketch`と`data-sketch-level`)を追加するだけで完了し、属性を削除するだけで完全に元に戻せます。また、オプションのインタラクティブオーバーレイを追加すれば、ユーザーがリアルタイムでスタイルを切り替えたり、スケッチ度を調整したりすることも可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add jovd83/prototype-sketching-skill

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

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

プレビュー

スキル README より

プロトタイプスケッチスキル preview

ドキュメント

プロトタイプ スケッチ スキル

動作するWebアプリを手書き風に見せることで、クライアントに「これはプロトタイプであり、完成品ではない」と認識させます。これはルック&フィールのスキンに過ぎません。純粋に付加的なものであり、完全に元に戻せます。

スコープのガードレール(最初に読むこと、決して破らないこと)

  1. スタイルのエントリーポイントと index.html のみを変更すること。 スタイルシートの追加、1つのSVGブロックの貼り付け、2つの属性の設定のみを行います。それ以外は行いません。
  2. コンポーネント、テンプレート、.ts/.tsx/.jsx/.vue のロジック、ルーティング、状態管理、サービス、テストは決して編集しないこと。
  3. スケッチ風のコンポーネントライブラリ(例:wired-elements)とコンポーネントを差し替えないこと。 それはマークアップを書き換えることになり、禁止されています。
  4. ロゴ、写真、チャート、アイコンなど、鮮明に保つ必要があるものの色を変更したり、歪めたりしないこと。 代わりにオプトアウトクラスを使用してください。
  5. 元に戻すのは簡単であること: 2つの <html> 属性を削除すれば、スキン全体がオフになります。

仕組み(一つの考え方)

  • 1つのスタイルシート assets/sketch-skin.css が5つのスタイルすべてとスケッチ度の段階を定義します。
  • 1つのSVGブロック assets/sketch-filters.html が揺れフィルター(#sketch-25 … #sketch-100)を定義します。
  • 有効化は <html> に2つの属性を設定することです: data-sketch="<style>" と data-sketch-level="<0|25|50|75|100>"。
  • 見た目は以下から作られます:手書き風のフォント置き換え + 手描き風のボックス(不規則なボーダー半径、平坦な塗りつぶし) + SVG変位フィルター(その強度がスケッチ度となります。フォントはテキストをそのまま表示し、フィルターはボックスの装飾のみを揺らし、テキストをぼかすことはありません)。

クイックスタート(この順序で行うこと)

  1. リクエストがスキンのみであることを確認する。 ユーザーが動作やレイアウトの変更を望んでいる場合は、そこで止めてください — それはスコープ外です。
  2. フレームワークを特定し、そのグローバルスタイルシートと index.html を見つけます(以下のレシピ表を参照)。
  3. スタイル(「スタイル」の表)とレベル(0、25、50、75、100)を選択します。
  4. スキンCSSを プロジェクトのグローバルスタイルに追加します:
    • assets/sketch-skin.css をプロジェクト内にコピー(例:src/styles.scss)または @import します。フォントの @import はすでにそのファイル内に含まれています(オンラインで使用する場合)。
  5. SVGフィルターを assets/sketch-filters.html から index.html の開始 <body> タグの直後に貼り付けます。(必須 — filter: url(#sketch-…) は、これらの定義がDOM内にある場合のみ解決されます。)
  6. 有効化するには、index.html の <html> タグを編集します:
    <html lang="ja" data-sketch="balsamiq" data-sketch-level="50">
    
  7. ブラウザで確認します。 元に戻すには、2つの data-sketch* 属性を削除します(追加したCSS/SVGは非アクティブのまま残ります — 属性がなければ何の効果もありません)。

スタイル

data-sketch見た目フォント使用目的
balsamiq清潔なグレースケールワイヤーフレーム、平坦なボックスBalsamiq Sansデフォルトの「これはモックアップです」
sharpie太い黒マーカー、強いストロークPermanent Markerホワイトボード / ワークショップスケッチ
pencil薄いグラファイト、柔らかいストロークGaegu優しい「紙に鉛筆」のドラフト
doodle遊び心のある、薄い色のアクセントShort Stackフレンドリーで、フォーマルではないコンセプト
blueprint青い紙に白インクPatrick Hand技術的な「製図板」の雰囲気

スケッチ度

data-sketch-level は線の揺れ具合を制御します。異なるSVG変位フィルターを選択します:

レベル効果
0手描き風のボックス+フォントだが、直線で安定した線(最もクリーン)
25微妙な揺れ
50はっきりと手描き風(推奨デフォルト)
75ラフでエネルギッシュなスケッチ
100非常にラフ、最大の「落書き」

data-sketch が設定されていて data-sketch-level が省略された場合、スキンはデフォルトでレベル 50 になります。

斜めの透かし(オプション)

画面全体にドラフトであることを示すスタンプを押すには、表示したいテキストを指定して3つ目の <html> 属性を追加します:

<html data-sketch="balsamiq" data-sketch-level="50" data-sketch-watermark="DRAFT">

data-sketch-watermark は、ビューポート全体に斜めに1語の薄い手書き文字を描画します。これは固定された非インタラクティブなレイヤー(pointer-events: none)であるため、クリックを妨げず、レイアウトを変更せず、ページやルートの変更があってもその場に留まります。任意のテキストが機能します(DRAFT、PROTOTYPE、CONFIDENTIAL、クライアント名など)。属性を削除すればオフになります。オーバーレイを使用する場合、透かしテキストフィールドでライブ設定できます。

モーダル、ポップアップ、SPAナビゲーション

スキンは <html> の属性によってアクティブ化され、グローバルな [data-sketch] … セレクターでスタイルが適用されるため、アクティブ化後に表示されるものはすべて自動的に継承します — ダイアログ、ポップオーバー、ドロップダウンメニュー、ツールチップ、トースト(ポータルにマウントされたものを含む)、およびシングルページアプリケーションでナビゲートするすべての画面が対象です。コンポーネントやルートごとに配線する必要はありません。

一貫性を保つための2つのポイント:

  • セレクターリストはすでに dialog、[popover]、[role="dialog"]、[aria-modal="true"]、.modal、.popover、メニュー、ツールチップ、トースト、そしてネイティブの ::backdrop をカバーしています。
  • オーバーレイスクリプトは <body> を監視し、フレームワークがルート変更時にボディを置き換えた場合にSVGフィルターを再注入するため、揺れが静かに消えることはありません。(静的な属性モデルの場合、sketch-filters.html を <body> の後に一度だけ貼り付けます。SPAフレームワークは子ルートにマウントされ、それをそのまま残します。)

フレームワーク注入レシピ

スキンはフレームワークに依存しません。以下は正確なターゲットです。詳細は references/implementation.md にあります。

スタックCSSを追加する場所SVGを貼り付ける場所属性を設定する場所
Angularsrc/styles.scss (または styles.css)src/index.html の <body> の後src/index.html の <html>
React / Vitesrc/index.css (main.tsx からインポート)index.html の <body> の後index.html の <html>
Vuesrc/assets/main.css (main.ts からインポート)index.html の <body> の後index.html の <html>
静的HTML<head> 内で sketch-skin.css をリンクindex.html の <body> の後index.html の <html>

特定のアセットを鮮明に保つ(オプトアウト)

スキンはマークアップを編集しませんが、ユーザーが特定の要素(ロゴ、チャート)を保護するよう明示的に要求した場合に許可される唯一のマークアップ変更は、その単一の要素にオプトアウトフックを追加することです:

<img src="logo.svg" class="no-sketch" alt="Logo">

.no-sketch (または data-no-sketch)は、その要素から揺れフィルターと色のオーバーライドを削除します。控えめに、かつ要求された場合にのみ使用してください。

インタラクティブプレビューオーバーレイ(オプション)

ユーザーがスタイルをライブで切り替えたい場合(例:クライアントにスイッチを見せる)、静的な属性の代わりにオーバーレイを使用します:

  1. グローバルスタイルに assets/sketch-skin.css を追加します(クイックスタートと同様)。
  2. </body> の前に1つのスクリプトタグを追加します:
    <script src="sketch-toggle.js" defer></script>
    
  3. 完了です。スクリプトは、OFF + テーマごとに1つのラジオボタン、0~100%のスケッチ度スライダー、透かしテキストフィールドを備えたフローティングパネルをレンダリングし、<html> 属性をライブで切り替え、選択内容を localStorage に記憶します。また、SVGフィルターを自動注入します(SPAがボディを置き換えた場合も再注入します)。そのため、クイックスタートのステップ5(sketch-filters.html の貼り付け)は不要です。

これもスキンのみで非破壊的です — スクリプトは属性を設定するだけです。タグを削除すれば無効になります。リクエストが「私/クライアントがスタイルを切り替えられるようにしてほしい」である場合にこのモデルを選択します。固定された、スクリーンショットで安定した外観が必要な場合は静的な属性を使用します。

スクリーンショットギャラリー

README.md には、demo/screenshots/ にあるPNGを使用して、すべてのスタイルと0→100%の段階が示されています。これらの画像は事前レンダリングされています。これらの画像を生成するインタラクティブデモアプリとPlaywrightキャプチャスクリプトは、プロジェクトの開発用ソースに含まれており、インストールされたスキルにはバンドルされていません。スキルそのものは assets/ + references/ のみです — ビルドステップも依存関係もありません。

例

例1 — Balsamiq、中程度のスケッチのAngularデモ

  • 入力:「明日のデモのために、このAngularアプリをBalsamiqワイヤーフレームのように見せてください。」
  • アクション:sketch-skin.css を src/styles.scss に追加。フィルターを src/index.html に貼り付け。<html data-sketch="balsamiq" data-sketch-level="50"> を設定。
  • 結果:アプリは全く同じように動作し、グレースケールのワイヤーフレームとしてレンダリングされます。

例2 — React、最大限のSharpie

  • 入力:「Reactアプリ、完全にホワイトボードマーカー風で、非常にラフに。」
  • アクション:sketch-skin.css を main.tsx でインポート。フィルターを index.html に貼り付け。data-sketch="sharpie" data-sketch-level="100" を設定。

例3 — オフにする

  • 入力:「本当のUIに戻してください。」
  • アクション:<html> から data-sketch と data-sketch-level を削除。完了 — 他に変更は必要ありません。

トラブルシューティング

症状原因修正
ボックスは手書き風だが線が完全にまっすぐSVGフィルターがDOM内にない、またはレベルが0sketch-filters.html が <body> の後に貼り付けられていることを確認。レベルを25以上に設定
何も変わらない属性がない、またはCSSが読み込まれていない<html data-sketch="…"> が存在し、sketch-skin.css がグローバルスタイルにあることを確認
テキストがぼやけて見えるフィルターがテキスト/<body>全体に適用されているfilter: をボディやテキストに追加しないでください。スキンはボックス装飾のみをフィルターします — sketch-skin.css を変更せずにコピーし直してください
フォントが手書きにならないオフライン / Googleフォントがブロックされているフォントをセルフホスト — assets/fonts/README.md を参照
大きなテーブル/グリッドでページが遅く感じる大きなDOMでの feDisplacementMap のコストレベルを下げるか、揺れセレクターリストの範囲を限定する(references/implementation.md を参照)
ロゴの彩度が低下したり、歪んだりしたそのアセットにオプトアウトがないその単一の要素に class="no-sketch" を追加
アイコンフォント / SVGアイコンが消えた過度な平坦化アイコンコンテナに no-sketch を追加するか、references/implementation.md のアイコンに関する注記を参照

参考ファイル(必要なときのみ読むこと)

  • references/styles.md — 5つのスタイルそれぞれの正確なフォント/パレット/ストローク仕様、および新しいスタイルを追加する方法。
  • references/implementation.md — SVGフィルターの計算、フレームワークごとの手順、セレクターの調整、オフラインフォント、パフォーマンス、元に戻す詳細。

関連スキル