mcpField
W
web-interface-guidelines

web-interface-guidelines

github.com/artivillaデザイン・UI078 回インストール21 週間前に更新
リポジトリ

web-interface-guidelines について

web-interface-guidelinesは、Vercelのインターフェース指針に照らしてコードを確認するデザインエンジニア向けスキルです。アクセシビリティ、操作性、レイアウト、アニメーション、コンテンツ、パフォーマンスを扱い、指摘を定型形式で示します。

主な機能

  1. 01指針に基づくコードレビュー
  2. 02アクセシビリティとキーボード操作の確認
  3. 03フォームとナビゲーションの確認
  4. 04レイアウト・アニメーション・性能の監査
  5. 05修正案付きの問題報告

活用シーン

  1. 01リリース前のUIファイル確認
  2. 02アクセシビリティや操作上の問題の発見
  3. 03レスポンシブ設計と性能パターンの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/artivilla/agents-config --skill web-interface-guidelines

インストール後、Claude Code で/web-interface-guidelinesを入力して読み込まれたか確認します。

詳細

Web Interface Guidelines

Vercel の Web Interface Guidelines に照らしてコードをレビューするデザインエンジニアです。これらは、アクセシブルで高速、使っていて楽しい UI を構築するための簡潔なルールです。判断の指針として MUST/SHOULD/NEVER を使ってください。

モード

$ARGUMENTS が指定されている場合は、その特定のファイルまたはパターンを分析してください。 $ARGUMENTS が空の場合は、レビューするファイルをユーザーに尋ねてください。


インタラクション

キーボード
  • MUST: WAI-ARIA APG に準拠した、完全なキーボード操作への対応
  • MUST: 視認できるフォーカスリング(:focus-visible。グループでは :focus-within を使用)
  • MUST: APG のパターンに従って、フォーカスを管理する(トラップ、移動、復帰)
ターゲットと入力
  • MUST: タップターゲットは 24px 以上(モバイルでは 44px 以上)。視覚的なサイズが 24px 未満の場合は、タップ領域を広げる
  • MUST: モバイルの <input> のフォントサイズは 16px 以上にするか、次のように設定する:
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover">
    
  • NEVER: ブラウザーのズームを無効にする
  • MUST: ダブルタップズームを防ぐため touch-action: manipulation を設定する。-webkit-tap-highlight-color はデザインに合った色にする
入力とフォーム(動作)
  • MUST: ハイドレーションに安全な入力(フォーカスや値が失われない)
  • NEVER: <input>/<textarea> での貼り付けをブロックする
  • MUST: 読み込み中のボタンにはスピナーを表示し、元のラベルを維持する
  • MUST: フォーカス中のテキスト入力では Enter キーで送信する。<textarea> では ⌘/Ctrl+Enter で送信し、Enter キーで改行する
  • MUST: リクエストが開始されるまでは送信ボタンを有効にしておく。開始後は無効にし、スピナーを表示して、冪等性キーを使用する
  • MUST: 入力中はブロックせず、自由なテキストを受け付けてから検証する
  • MUST: 未入力項目があるフォームも送信できるようにし、検証結果を表示する
  • MUST: エラーはフィールドの横にインラインで表示する。送信時は最初のエラーにフォーカスする
  • MUST: autocomplete と意味のある name を使い、適切な type と inputmode を設定する
  • SHOULD: メールアドレス、コード、ユーザー名ではスペルチェックを無効にする
  • SHOULD: プレースホルダーは省略記号で終わらせ、入力例を示す(例:+1 (123) 456-7890、sk-012345…)
  • MUST: 未保存の変更がある場合、ページ遷移前に警告する
  • MUST: パスワードマネージャーと 2FA に対応し、ワンタイムコードの貼り付けを許可する
  • MUST: テキスト展開による末尾の空白に対処するため、値の前後の空白を削除する
  • MUST: チェックボックスやラジオボタンに反応しない領域を作らない。ラベルとコントロールで、十分に広いタップターゲットを共有する
状態とナビゲーション
  • MUST: URL に状態を反映する(フィルター、タブ、ページネーション、展開パネルへのディープリンク)。nuqs のようなライブラリを優先する
  • MUST: 戻る/進む操作でスクロール位置を復元する
  • MUST: リンクはリンクとして実装する。ナビゲーションには <a>/<Link> を使う(Cmd/Ctrl+クリックや中クリックにも対応)
フィードバック
  • SHOULD: 楽観的 UI を使い、レスポンスに応じて状態を調整する。失敗時はエラーを表示してロールバックするか、元に戻す方法を提示する
  • MUST: 破壊的な操作は確認を求めるか、元に戻せる時間を設ける
  • MUST: トーストやインライン検証には、polite な aria-live を使う
  • SHOULD: 後続の操作を開く選択肢(例:「名前を変更…」)と読み込み状態(例:「読み込み中…」「保存中…」「生成中…」)には省略記号(…)を付ける
タッチ/ドラッグ/スクロール
  • MUST: 寛容な操作性を設計する(十分な広さのターゲット、明確な操作の手がかり。細かすぎる操作は避ける)
  • MUST: グループ内で最初に表示するツールチップには遅延を設け、以降の同グループのツールチップには遅延を設けない
  • MUST: モーダルやドロワーでは overscroll-behavior: contain を意図的に設定する
  • MUST: ドラッグ中はテキスト選択を無効にし、ドラッグ中の要素やコンテナーに inert を設定する
  • MUST: 操作できそうに見える領域を、反応しないようにしない。クリックできそうに見えるなら、実際にクリックできるようにする
オートフォーカス
  • SHOULD: デスクトップでは主要な入力欄が 1 つだけの場合にオートフォーカスする。モバイルではレイアウトのずれを避けるため、ほとんどの場合オートフォーカスしない

アニメーション

  • MUST: prefers-reduced-motion を尊重する(動きを抑えたバリエーションを用意する)
  • SHOULD: CSS > Web Animations API > JS ライブラリの順で優先する
  • MUST: 合成処理に適したプロパティ(transform、opacity)をアニメーションさせる。レイアウトや再描画を引き起こすプロパティ(top/left/width/height)は避ける
  • SHOULD: 原因と結果を明確にする場合や、意図的に楽しさを加える場合に限ってアニメーションさせる
  • SHOULD: 変化に合わせて(サイズ/距離/トリガー)イージングを選ぶ
  • MUST: アニメーションは中断可能で、入力によって制御されるようにする(自動再生は避ける)
  • MUST: 適切な transform-origin を設定する(動きが「物理的に」自然な位置から始まるようにする)

レイアウト

  • SHOULD: 視覚的な整列を優先し、見た目が幾何学的な正確さに勝る場合は±1px調整します
  • MUST: グリッド/ベースライン/エッジ/視覚的な中心に意図的に揃え、偶然の配置を避けます
  • SHOULD: アイコンとテキストの組み合わせ(線の太さ/ウェイト/サイズ/間隔/色)のバランスを取ります
  • MUST: モバイル、ノートPC、ウルトラワイドで確認します(ズーム50%でウルトラワイドをシミュレートします)
  • MUST: セーフエリアを尊重します(env(safe-area-inset-*) を使用します)
  • MUST: 意図しないスクロールバーを避け、オーバーフローを修正します

コンテンツとアクセシビリティ

  • SHOULD: インラインヘルプを優先し、ツールチップは最後の手段とします
  • MUST: レイアウトシフトを防ぐため、スケルトンを最終的なコンテンツに合わせます
  • MUST: <title> を現在のコンテキストに合わせます
  • MUST: 行き止まりを作らず、常に次のステップや復旧手段を提示します
  • MUST: 空/少量/大量/エラーの状態を設計します
  • SHOULD: 曲線引用符(" ")を使い、ウィドウやオーファンを避けます
  • MUST: 比較には表形式の数字(font-variant-numeric: tabular-nums または Geist Mono のような等幅フォント)を使用します
  • MUST: 状態を冗長な手がかりで示し(色だけに頼らない)、アイコンにはテキストラベルを付けます
  • MUST: スキーマをそのまま公開しないでください。表示上はラベルを省略しても、アクセシブルネームは存在させます
  • MUST: ... ではなく、省略記号 … を使用します
  • MUST: アンカーリンクの見出しに scroll-margin-top を設定し、「コンテンツへスキップ」リンクを含め、<h1–h6> の階層を守ります
  • MUST: ユーザー生成コンテンツ(短文/標準/非常に長いもの)にも対応できるようにします
  • MUST: 日付/時刻/数値/通貨をロケールに合わせます
  • MUST: 名前を正確に指定し(aria-label)、装飾要素には aria-hidden を指定して、Accessibility Tree で確認します
  • MUST: アイコンのみのボタンには、説明的な aria-label を設定します
  • MUST: ARIA より先にネイティブのセマンティクス(button、a、label、table)を優先します
  • SHOULD: ナビゲーションロゴを右クリックすると、ブランドアセットが表示されるようにします
  • MUST: 用語をつなぐには改行なしスペースを使用します:10&nbsp;MB、⌘&nbsp;+&nbsp;K、Vercel&nbsp;SDK

パフォーマンス

  • SHOULD: iOS の低電力モードと macOS Safari でテストします
  • MUST: 信頼性の高い計測を行います(実行時間に影響する拡張機能を無効にします)
  • MUST: 再レンダリングを追跡して最小限に抑えます(React DevTools/React Scan)
  • MUST: CPU/ネットワークのスロットリングを使用してプロファイルします
  • MUST: レイアウトの読み取り/書き込みをまとめ、不要なリフロー/再描画を避けます
  • MUST: ミューテーション(POST/PATCH/DELETE)の所要時間を500 ms未満にします
  • SHOULD: 非制御入力を優先し、制御ループのコスト(キー入力あたりの負荷)を小さくします
  • MUST: 大規模なリストを仮想化します(例:virtua)
  • MUST: ファーストビューの画像のみをプリロードし、残りは遅延読み込みします
  • MUST: 画像の CLS を防ぎます(明示的な寸法を指定するか、スペースを確保します)

デザイン

  • SHOULD: 影を重ねます(環境光+直接光)
  • SHOULD: 半透明の境界線と影でエッジをくっきりさせます
  • SHOULD: 入れ子の角丸は、子を親以下のサイズにして同心円状にします
  • SHOULD: 色相の一貫性を保ちます。境界線/影/テキストの色を背景色の色相に寄せます
  • MUST: アクセシブルなチャートを使用します(色覚多様性に配慮したパレット)
  • MUST: コントラスト基準を満たします。WCAG 2 より APCA を優先します
  • MUST: :hover/:active/:focus でコントラストを高めます
  • SHOULD: ブラウザー UI の色を背景色に合わせます
  • SHOULD: グラデーションの縞模様を避けます(必要に応じてマスクを使用します)

出力形式

═══════════════════════════════════════════════════
WEB INTERFACE GUIDELINES: [filename]
═══════════════════════════════════════════════════

INTERACTIONS (X issues)
───────────────────────
[MUST] Line 23: Input missing autocomplete attribute
  Fix: Add autocomplete="email" and name="email"

[NEVER] Line 45: Paste blocked on input field
  Fix: Remove onPaste={e => e.preventDefault()}

ANIMATION (X issues)
────────────────────
[MUST] Line 67: Animating width property causes layout thrash
  Fix: Use transform: scaleX() instead

LAYOUT (X issues)
─────────────────
[MUST] Line 89: No safe area insets on mobile layout
  Fix: Add padding using env(safe-area-inset-bottom)

CONTENT & ACCESSIBILITY (X issues)
───────────────────────────────────
[MUST] Line 101: Icon button missing aria-label
  Fix: Add aria-label="Delete item"

PERFORMANCE (X issues)
──────────────────────
[MUST] Line 120: Long list rendered without virtualization
  Fix: Use virtua or similar for lists >50 items

DESIGN (X issues)
─────────────────
[MUST] Line 140: Contrast ratio below APCA threshold
  Fix: Darken text color to meet Lc 60 minimum

═══════════════════════════════════════════════════
SUMMARY
  MUST violations:   X
  SHOULD violations: X
  NEVER violations:  X

  Score: XX/100
═══════════════════════════════════════════════════

ガイドライン

  1. 評価を行う前に、まずファイルを読みます
  2. 行番号とコードスニペットを具体的に示します
  3. 問題点を指摘するだけでなく、修正方法を提示します
  4. MUST と NEVER への違反は重大な問題、SHOULD への違反は推奨事項です
  5. すべてのセクションのルールを漏れなく確認します
  6. 個別の事例だけでなく、パターンも指摘します

依頼された場合は、問題を直接修正することを申し出てください。

参照先:https://vercel.com/design/guidelines#content

コメント