Claude-skill-registry interface-review
Review web interface implementations across Interactivity, Typography, Motion, Touch, Optimizations, Accessibility, and Design/UX. Based on industry best practices and UX psychology principles. Use for UI component and page implementation reviews.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/interface-review" ~/.claude/skills/majiayu000-claude-skill-registry-interface-review && rm -rf "$T"
skills/data/interface-review/SKILL.mdInterface Review Skill
このスキルは、Web インターフェースの実装を業界のベストプラクティスと UX 心理学に基づいてレビューします。
目的
- インタラクティブ要素のユーザビリティを検証
- タイポグラフィの品質を確認
- アニメーションとモーションの適切性をチェック
- タッチデバイス対応を検証
- パフォーマンス最適化を確認
- アクセシビリティ準拠を検証
- デザイン、ユーザー体験、UX 心理効果を統合的に評価
レビュー領域
1. Interactivity(インタラクティビティ)
主要チェックポイント:
- フォーム要素の適切な実装
- ボタンの二重送信防止
- インタラクティブ要素の
設定user-select - ラベルとインプットの関連付け
- Enter キーでのフォーム送信
検証項目:
// ✅ 正しい実装 <form onSubmit={handleSubmit}> <label htmlFor="email">Email</label> <input id="email" type="email" required autoComplete="off" spellCheck="false" /> <button type="submit" disabled={isSubmitting}> Submit </button> </form> // ❌ 問題のある実装 <div> {/* form タグなし */} <span>Email</span> {/* label なし */} <input type="text" /> {/* type が不適切 */} <button onClick={handleClick}> {/* 二重送信防止なし */} Submit </button> </div>
2. Typography(タイポグラフィ)
主要チェックポイント:
- フォントスムージングの適用
- フォントウェイトの適切な使用(400 以上)
- タブラー数字の使用(テーブル、タイマーなど)
- レスポンシブなフォントサイズ(
の使用)clamp() - iOS での予期しないテキストリサイズ防止
検証項目:
/* ✅ 推奨スタイル */ body { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; -webkit-text-size-adjust: 100%; } h1 { font-size: clamp(48px, 5vw, 72px); font-weight: 500; /* 400 以上 */ } .timer { font-variant-numeric: tabular-nums; } /* ❌ 問題のあるスタイル */ p { font-weight: 300; /* 400 未満 */ }
3. Motion(モーション・アニメーション)
主要チェックポイント:
- アニメーション時間は 200ms 以内
- テーマ切り替え時のトランジション防止
- 頻繁な操作には過度なアニメーションを避ける
- スケールアニメーションの適切な値
- 画面外での無限ループアニメーション停止
検証項目:
// ✅ 適切なアニメーション const Dialog = styled.div` animation: fadeIn 150ms ease-out; @keyframes fadeIn { from { opacity: 0; transform: scale(0.95); /* 0 からではなく 0.95 から */ } to { opacity: 1; transform: scale(1); } } `; // ❌ 過度なアニメーション const Button = styled.button` transition: all 500ms; /* 長すぎる */ &:active { transform: scale(0.5); /* 変化が大きすぎる */ } `;
4. Touch(タッチデバイス対応)
⚠️ プロジェクト固有:
:hover は PostCSS プラグイン (postcss-media-hover-any-hover) が自動的に @media (any-hover: hover) でラップします。手動でメディアクエリを追加しないでください。
主要チェックポイント:
- インプットのフォントサイズ 16px 以上(iOS ズーム防止)
- タッチデバイスでの自動フォーカス無効化
- ビデオの自動再生設定(
,muted
)playsinline - iOS タップハイライトの適切な置き換え
検証項目:
/* ✅ 正しい実装 */ button { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } button:hover { background-color: #eee; /* PostCSS が自動ラップ */ } input { font-size: 16px; /* iOS ズーム防止 */ } /* ❌ 間違った実装 */ @media (any-hover: hover) { /* 冗長 */ button:hover { background-color: #eee; } } input { font-size: 14px; /* iOS でズーム発生 */ }
5. Optimizations(パフォーマンス最適化)
主要チェックポイント:
- 大きな
値の回避blur() - GPU レンダリングの適切な使用 (
)transform: translateZ(0)
の慎重な使用will-change- 画面外ビデオの停止または削除
- React レンダリングのバイパス(必要時のみ)
検証項目:
// ✅ 最適化された実装 const BlurredBox = styled.div` backdrop-filter: blur(8px); /* 適度な値 */ `; // スクロールアニメーション時のみ will-change を適用 const handleScroll = () => { element.style.willChange = 'transform'; // アニメーション処理 requestAnimationFrame(() => { element.style.willChange = 'auto'; // 終了後に削除 }); }; // ❌ パフォーマンス問題 const HeavyBlur = styled.div` backdrop-filter: blur(50px); /* 重すぎる */ will-change: transform, opacity; /* 常時適用は避ける */ `;
6. Accessibility(アクセシビリティ)
主要チェックポイント:
- 無効化ボタンへのツールチップ禁止
- フォーカスリングに
を使用box-shadow - アイコンのみの要素に
追加aria-label - 画像は
タグで実装<img> - キーボードナビゲーション対応(↑↓ キー)
検証項目:
// ✅ アクセシブルな実装 <button aria-label="閉じる"> <CloseIcon /> </button> <img src="photo.jpg" alt="製品写真" /> const FocusRing = styled.button` &:focus-visible { box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.5); outline: none; } `; // ❌ アクセシビリティ問題 <button disabled title="保存できません"> {/* disabled + tooltip */} 保存 </button> <button> {/* aria-label なし */} <Icon /> </button> <div style={{backgroundImage: 'url(photo.jpg)'}} /> {/* img タグなし */}
7. Design & UX(デザイン・UX・心理効果)
実装面のチェックポイント
UI パターンと実装:
- 楽観的 UI 更新とロールバック
- サーバー側での認証リダイレクト
のスタイリング::selection- フィードバックのトリガー相対配置
- 空状態の適切な処理
検証項目:
// ✅ 楽観的 UI 更新 const handleDelete = async (id) => { // 即座に UI を更新 setItems(items.filter((item) => item.id !== id)); try { await api.delete(id); } catch (error) { // エラー時にロールバック setItems(originalItems); showError('削除に失敗しました'); } }; // ✅ フィードバックの相対配置 <button onClick={handleCopy}> コピー {copied && <CheckIcon />} {/* ボタン内に表示 */} </button>; // ❌ 不適切なフィードバック const handleCopy = () => { copy(text); showNotification('コピーしました'); /* 通知は不要 */ };
UX 心理効果のチェックポイント
主要な心理効果:
- 美的ユーザビリティ効果(視覚的洗練さ)
- 認知負荷の軽減(情報量、レイアウト、タイポグラフィ)
- 視覚的階層(見出し、本文、コードの優先度)
- ドハティの閾値(応答 400ms 以内)
- バナー・ブラインドネス回避(広告風デザインを避ける)
- 段階的開示(アコーディオン、タブの活用)
- 系列位置効果(重要項目の配置)
- ピーク・エンドの法則(ハイライトと締めくくり)
技術ブログで特に重視すべき点:
- コンテンツの質と明確性を最優先
- 技術記事ではコードブロック、シンタックスハイライト、適切な空白に注意
- タイトルの明確性(クリックベイト回避)
- 各記事の完結性を重視
- 過度な CTA や購読促進は控えめに
検証項目:
// ✅ 認知負荷の軽減と視覚的階層 const Article = () => ( <article> <h1>明確なタイトル</h1> {/* 好奇心ギャップ回避 */} {/* 視覚的階層: 見出し → 本文 → コード */} <section> <h2>セクション見出し</h2> <p>説明文...</p> <CodeBlock language="typescript"> {/* シンタックスハイライト適用 */} </CodeBlock> </section> {/* 段階的開示 */} <Accordion> <AccordionItem title="詳細な説明"> 複雑な内容は折りたたみ </AccordionItem> </Accordion> </article> ); // ✅ ドハティの閾値(400ms 以内) const handleAction = async () => { // 即座に UI フィードバック setLoading(true); // バックグラウンド処理 await processData(); setLoading(false); }; // ✅ バナー・ブラインドネス回避 const ImportantNotice = styled.div` /* 広告風デザインを避ける */ background: transparent; /* 派手な背景色を避ける */ border: 1px solid var(--border); padding: 16px; `; // ❌ 問題のある実装 const ClickbaitTitle = () => ( <h1>この方法を知らないと損します!</h1> {/* 好奇心ギャップ */} ); const OverwhelmingContent = () => ( <div> {/* 認知負荷が高すぎる */} <p>段落1段落1段落1...</p> <p>段落2段落2段落2...</p> {/* 適切な空白・階層なし */} </div> ); const SlowResponse = async () => { await heavyOperation(); // 400ms 超過 updateUI(); // 遅すぎるフィードバック };
チェックリスト:
- 楽観的 UI 更新を実装(実装面)
- フィードバックが適切な位置に表示(実装面)
- 空状態が適切に処理される(実装面)
- ページ応答時間が 400ms 以内(心理効果)
- 視覚的階層が明確(見出し、本文、コードの区別)(心理効果)
- 適切な空白とレイアウト(認知負荷軽減)(心理効果)
- コードブロックにシンタックスハイライト適用(心理効果)
- 重要情報が広告風デザインになっていない(心理効果)
- ナビゲーション項目が 7±2 個以内(心理効果)
- タイトルが明確で具体的(心理効果)
- 過度な購読促進・ポップアップなし(心理効果)
- 美的に洗練されたデザイン(心理効果)
- 複雑な情報は段階的に開示(心理効果)
レビュー手順
Step 1: ファイルの特定
対象ファイルを特定します:
- UI コンポーネント(
)src/components/UI/ - Page コンポーネント(
)src/components/Page/ - スタイル定義(
)src/ui/
Step 2: 領域別チェック
各領域のチェックポイントに従って検証:
- Interactivity: フォーム、ボタン、インタラクティブ要素
- Typography: CSS のフォント設定、font-weight
- Motion: アニメーション、トランジション
- Touch: メディアクエリ、フォントサイズ、タップ処理
- Optimizations: blur, will-change、GPU 処理
- Accessibility: aria-label、フォーカス、キーボード対応
- Design & UX: UI パターン、フィードバック、心理効果、認知負荷、視覚的階層
Step 3: 優先度の判定
検出された問題を優先度別に分類:
| 優先度 | 問題の種類 |
|---|---|
| 高 | アクセシビリティ違反、重大なUX問題 |
| 中 | パフォーマンス問題、タッチデバイス非対応 |
| 低 | 最適化の余地、細かいUX改善 |
Step 4: レビュー結果の生成
検出された問題と改善提案を報告します。
出力形式
## インターフェースレビュー結果 ### 📊 レビューサマリー - ファイル: `src/components/UI/Button/Button.tsx` - チェック領域: 7 - 合格: 5 - 改善推奨: 1 - 問題検出: 1 ### ✅ 適切に実装されている項目 - [✓] Interactivity: フォーム送信、ボタン無効化 - [✓] Typography: フォントスムージング適用 - [✓] Accessibility: aria-label 設定 ### ⚠️ 改善推奨 - [例] **Performance**: 画像最適化が必要 **影響**: ページロード時間が長くなる **提案**: Next.js Image コンポーネントを使用 > **Note**: このプロジェクトでは `:hover` のメディアクエリは PostCSS プラグインが自動処理するため、手動での追加を推奨しません ### ❌ 問題検出 - [Button.tsx:45] **Motion**: アニメーション時間が長すぎる (500ms) **影響**: インタラクションが遅く感じられる **修正**: ```diff - transition: all 500ms; + transition: all 150ms ease-out; ```
📝 総合評価
- 評価: ⚠️ 改善推奨
- 優先修正: Motion のアニメーション時間短縮
- 推奨改善: Touch デバイス対応の強化
## 使用例 ### 例 1: UI コンポーネントのレビュー
User: Button コンポーネントのインターフェースをレビューして Assistant: [スキルを起動して 7 つの領域から検証]
### 例 2: ページ全体のレビュー
User: HomePage のアクセシビリティとタッチ対応をチェック Assistant: [Accessibility と Touch の領域を重点的に検証]
### 例 3: 特定領域のレビュー
User: このアニメーションがベストプラクティスに従っているか確認 Assistant: [Motion 領域を重点的に検証]
### 例 4: Design & UX のレビュー
User: この記事ページの認知負荷と視覚的階層をチェック Assistant: [Design & UX 領域(UX 心理効果)を重点的に検証]
## 参照ドキュメント 詳細なガイドラインは以下を参照してください: - `references/web-interface-guidelines.md` - Web インターフェースのベストプラクティス(raunofreiberg/interfaces より) - `references/ux-psychology.md` - UX 心理効果と認知負荷のガイドライン(技術ブログ向け) ## 注意事項 - このスキルは **read-only** です(allowed-tools: Read, Grep, Glob) - コードの自動修正は行いません - レビュー結果に基づき、ユーザーが手動で修正します - WAI-ARIA 仕様の詳細は含まれていませんが、基本的なアクセシビリティはカバーされています ## ベストプラクティスの出典 このスキルは以下のガイドラインに基づいています: - [raunofreiberg/interfaces](https://github.com/raunofreiberg/interfaces) - Web インターフェース実装 - プロジェクト独自の UX 心理効果ガイドライン - 技術ブログにおける心理効果