ui-ux-pro-max
npx skills add https://github.com/kimny1143/claude-code-template --skill ui-ux-pro-max
Agent 安装分布
Skill 文档
UI/UX Pro Max
UI/UXãã¶ã¤ã³ããã³å®è£ ã®å°éã¹ãã«ã
æ ¸å¿: ãå ¨é¨ã¡ããã¨ããããAIçææã®æ£ä½ããä½ãæ¨ã¦ãããããã¶ã¤ã³ã
対å¿é å
- ã©ã³ãã£ã³ã°ãã¼ã¸è¨è¨
- ããã·ã¥ãã¼ãUI
- SaaSãããã¯ã
- ã¢ãã¤ã«ã¢ããªï¼ã¬ã¹ãã³ã·ãï¼
è¡åååï¼5ã¤ã®éåï¼
1. ä½ãåã«çã
- å ¨è¦ç´ ã«ãæ¬å½ã«è¦ãï¼ããåã
- çããææ§ãªããã¾ãç¡ãã§ä½ã
2. 主役ã1ã¤æ±ºãã
- åã»ã¯ã·ã§ã³ã§ãä¸çªè¦ããããã®ãã1ã¤ã ãæ±ºãã
- 決ã¾ãã¾ã§ã³ã¼ããæ¸ããª
3. 70ç¹ã並ã¹ããª
- å ¨è¦ç´ ãåãå卿 = 失æ
- 1ã¤ã120ç¹ãæ®ãã60ç¹ã«ãã
4. ãã§ãã¾ãããããããã¾ãããã
- 追å ããåé¤ãææ¡ãã
- è¿·ã£ããåã
5. æ¹å¤ãã¦ããä½ã
- ç¾ç¶ã®åé¡ç¹ã3ã¤ä»¥ä¸æãã¦ããæ¹åæ¡ãåºã
- ãããæãã§ãããã¯ç¦æ¢
AIçææãé¿ãã
ãã£ã¦ã¯ãããªããã¨
- å ¨è¦ç´ ãåãå卿ï¼åä¸ãªä½ç½ãå®å ¨ãªè²ï¼
- 決æã®ä¸å¨ï¼Aã¨Bã©ã¡ãã§ããã好ã¿ã§ï¼
- éå°ãªè£ é£¾ï¼æå³ã®ãªãã°ã©ãã¼ã·ã§ã³ãã¢ãã¡ã¼ã·ã§ã³ï¼
ãããæãã§ãããç¦æ¢
- 宿å¾ããæ¹åã®ä½å°ãããã¨ããã°ãããæ·»ãã
- 決æãæ±ãããããæ±ºæããï¼æ ¹æ ãæ·»ãã¦ä¸ã¤ãæ¨å¥¨ï¼
è¦è¦é層ãã§ãã¯ãªã¹ã
使¥éå§å
- ããã®ã»ã¯ã·ã§ã³ã®ä¸»å½¹ã¯ä½ãããè¨èªåããã
- ãåé¤ã§ããè¦ç´ ã¯ãªããããæ¤è¨ããã
- ããªããã®è²ããã説æã§ããã
使¥ä¸
- å ¨è¦ç´ ãåãå卿ã«ãªã£ã¦ããªãã
- è¦ç·ã®æµãã¯æå³éãã
- èæ¯ãã³ã³ãã³ãã®éªéããã¦ããªãã
使¥å®äºå
- ã¹ããã§è¦ã¦3ç§ä»¥å ã«ãä½ãããã°ããããåããã
- ãAIçææãã®åå ããªãã
- ãããã¯åããã®ã§ã¯ãã¨æãè¦ç´ ããªãã
CRITICAL: ã¢ã¯ã»ã·ããªãã£åªå
ãã®ã»ã¯ã·ã§ã³ã¯æåªå äºé ããã¶ã¤ã³ã®ç¾ãããããã¢ã¯ã»ã·ããªãã£ãåªå ããã
WCAG 2.1 ã³ã³ãã©ã¹ãè¦ä»¶
| ããã¹ããµã¤ãº | æå°ã³ã³ãã©ã¹ãæ¯ |
|---|---|
| é常ããã¹ã (< 18px) | 4.5:1 |
| 大ããããã¹ã (⥠18px bold / ⥠24px) | 3:1 |
| UI ã³ã³ãã¼ãã³ãã»ã¢ã¤ã³ã³ | 3:1 |
å¿ é : ããã¸ã§ã¯ãã® globals.css ã使ç¨
Tailwind ã®ããã©ã«ãè²ãç´æ¥ä½¿ããªãã ããã¸ã§ã¯ãã® globals.css ã§å®ç¾©ããããã¼ã¯ã³ãåªå
ããã
// NG: Tailwind ããã©ã«ãããã®ã¾ã¾ä½¿ç¨
<p className="text-slate-400">...</p>
<p className="text-slate-500">...</p>
// OK: ããã¸ã§ã¯ããã¼ã¯ã³ã使ç¨
<p className="text-muted">...</p>
<p className="text-subtle">...</p>
å®è£
åã«å¿
ã app/globals.css ã確èªããå®ç¾©æ¸ã¿ãã¼ã¯ã³ãææ¡ãããã¨ã
Glassmorphism ã¨ã¢ã¯ã»ã·ããªãã£ã®ä¸¡ç«
è¦å: åéæèæ¯ã¯ã³ã³ãã©ã¹ãè¨ç®ãè¤éã«ãã
| èæ¯ã¿ã¤ã | åé¡ | 対ç |
|---|---|---|
bg-white/5 |
å®å¹èæ¯è²ãä¸ç¢ºå® | ããã¹ã㯠text-white or ååæããè²ãä½¿ç¨ |
bg-black/45 ãªã¼ãã¼ã¬ã¤ |
ä¸å±¤ã¨æ··ãã | éè¦ããã¹ã㯠text-white ãä½¿ç¨ |
| åéæã»ã¯ã·ã§ã³ | èæ¯ç»åã¨æ··ãã | muted text ã¯é¿ããç½ç³»ãä½¿ç¨ |
å®å ¨ãªçµã¿åãã:
// Glass card å
ã®ããã¹ã
<div className="bg-white/5 backdrop-blur-xl ...">
<h3 className="text-white">ã¿ã¤ãã«</h3> {/* OK: ç½ã¯å¸¸ã«å®å
¨ */}
<p className="text-white/80">説ææ</p> {/* OK: 80%ç½ã¯åå */}
</div>
// å±éºãªçµã¿åããï¼é¿ããï¼
<div className="bg-white/5 ...">
<p className="text-slate-400">説ææ</p> {/* NG: ã³ã³ãã©ã¹ãä¸è¶³ã®å¯è½æ§ */}
</div>
ããã¸ã»ã¿ã°ã®ã³ã³ãã©ã¹ã
åç³»è²ã®çµã¿åããã¯å±éº:
// NG: åç³»è²ã§ã³ã³ãã©ã¹ãä¸è¶³
<span className="bg-indigo-600/20 text-indigo-400">Badge</span>
<span className="bg-amber-500/20 text-amber-400">éçºä¸</span>
// OK: ååãªã³ã³ãã©ã¹ãã確ä¿
<span className="bg-indigo-600/30 text-indigo-300">Badge</span>
<span className="bg-amber-600/30 text-amber-200">éçºä¸</span>
ç¡å¹ç¶æ ã®ããã¹ã
// NG: èããã¦ã³ã³ãã©ã¹ãä¸è¶³
<button className="text-white/50" disabled>...</button>
// OK: ç¡å¹ã§ãèªããæ¿ã
<button className="text-white/70" disabled>...</button>
å¤è¨èªã¿ã¤ãã°ã©ãã£
ãªãå¿ è¦ã: æ¥æ¬èªã¯åããã©ã³ããµã¤ãºã§ãè±èªããè¦è¦çã«éãè¦ããï¼ç»æ°ãå¤ãããï¼ãåããµã¤ãºã ã¨æ¥æ¬èªã窮å±ã»éãè¦ããããã1段éå°ãããã¦è¦è¦çãã©ã³ã¹ãåãã
ã¿ã¤ãã°ã©ãã£ãã¼ã¯ã³ï¼globals.css ã§å®ç¾©æ¸ã¿ï¼
| ãã¼ã¯ã³ | ç¨é | è±èª (ãã¹ã¯ããã) | æ¥æ¬èª (ãã¹ã¯ããã) |
|---|---|---|---|
.text-hero |
ã©ã³ãã£ã³ã°ãã¼ã¸ã®ã¡ã¤ã³ã¿ã¤ãã« | 96px | 80px |
.text-section |
ã»ã¯ã·ã§ã³è¦åºãï¼h2ï¼ | 48px | 40px |
.text-headline |
æ©è½ã¿ã¤ãã«ã製åè¦åºã | 30px | 24px |
.text-subhead |
ã¿ã°ã©ã¤ã³ããªã¼ãæ | 24px | 20px |
ä½¿ç¨æ¹æ³
// NG: Tailwindç´æ¥æå®ï¼è¨èªã«ãã調æ´ãªãï¼
<h1 className="text-5xl md:text-8xl font-bold">...</h1>
// OK: ãã¼ã¯ã³ä½¿ç¨ï¼èªåã§è¨èªå¯¾å¿ï¼
<h1 className="text-hero text-white">...</h1>
ã¬ã¹ãã³ã·ã対å¿
ãã¼ã¯ã³ã«ã¯ã¢ãã¤ã«ã»ã¿ãã¬ããã»ãã¹ã¯ãããã®ã¬ã¹ãã³ã·ããµã¤ãºãå«ã¾ããã追å ã®ãã¬ã¼ã¯ãã¤ã³ãæå®ã¯ä¸è¦ã
// NG: åé·ãªãã¬ã¼ã¯ãã¤ã³ãæå®
<h1 className="text-hero sm:text-hero md:text-hero">...</h1>
// OK: ãã¼ã¯ã³ã®ã¿
<h1 className="text-hero">...</h1>
é©ç¨å¯¾è±¡
- ã©ã³ãã£ã³ã°ãã¼ã¸ã®è¦åºãï¼h1, h2ï¼
- ã»ã¯ã·ã§ã³ã¿ã¤ãã«
- 製ååãæ©è½å
- ã¿ã°ã©ã¤ã³ããªã¼ãæ
注æ: æ¬æããã¹ãï¼pè¦ç´ ã®é·æï¼ã«ã¯é©ç¨ããªããæ¬æã¯ text-white/80 çã®é常ã¹ã¿ã¤ã«ã使ç¨ã
ãã¶ã¤ã³ãã¼ã¯ã³éµå®ã«ã¼ã«
åå: Tailwindã®ããã©ã«ãå¤ãç´æ¥ä½¿ç¨ãããglobals.css ã§å®ç¾©ããããã¶ã¤ã³ãã¼ã¯ã³ã使ç¨ããã
è§ä¸¸ï¼Border Radiusï¼
| ãã¼ã¯ã³ | å¤ | ç¨é |
|---|---|---|
--radius-sm |
8px | å°ããããã¸ãã¿ã° |
--radius-md |
12px | ãã¿ã³ãå ¥åãã£ã¼ã«ã |
--radius-lg |
16px | ã«ã¼ããã¢ã¼ãã« |
--radius-full |
999px | ãã«åãã¿ã³ãã¢ãã¿ã¼ |
// NG: Tailwindç´æ¥æå®
<button className="rounded-lg">...</button>
<div className="rounded-xl">...</div>
// OK: ãã¼ã¯ã³ä½¿ç¨
<button className="rounded-[var(--radius-md)]">...</button>
<div className="rounded-[var(--radius-lg)]">...</div>
è²
// NG: Tailwindè²ãç´æ¥ä½¿ç¨
<p className="text-slate-400">...</p>
<div className="bg-gray-900">...</div>
// OK: ããã¸ã§ã¯ããã¼ã¯ã³ä½¿ç¨
<p className="text-muted">...</p>
<div className="bg-mued-bg">...</div>
ãã¼ã¯ã³éåãã§ãã¯
å®è£ å¾ã¯ä»¥ä¸ã§éåã確èª:
# è§ä¸¸ã®Tailwindç´æ¥æå®ãæ¤ç´¢
grep -r "rounded-sm\|rounded-md\|rounded-lg\|rounded-xl\|rounded-2xl" components/
# è²ã®Tailwindç´æ¥æå®ãæ¤ç´¢
grep -r "bg-slate-\|bg-gray-\|text-slate-\|text-gray-" components/
æ¤åºããããã®ã¯é 次ãã¼ã¯ã³ã«ç½®æããã
ãã¶ã¤ã³ã¹ã¿ã¤ã«
ã°ã©ã¹ã¢ã¼ãã£ãºã
/* Glass card - a11y compliant */
.glass-card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
}
注æ: Glass card å
ã®ããã¹ã㯠text-white ã¾ã㯠text-white/80 以ä¸ã使ç¨ã
ãã¼ã¯ã¢ã¼ãåªå
/* Dark mode base - WCAG compliant */
:root {
--bg-primary: #0F0F1A;
--bg-secondary: #1A1A2E;
--text-primary: #FFFFFF;
--text-muted: #CBD5E1; /* slate-300: 4.5:1+ on dark */
--text-subtle: #9CA3AF; /* gray-400: ä½¿ç¨æ³¨æ */
--accent: #4F46E5;
}
ããããªãºã
- ä½ç½ãæããªã
- 1ç»é¢1ã¢ã¯ã·ã§ã³
- è¦è¦çãã¤ãºãæ¸ãã
ã³ã³ãã¼ãã³ãè¦ç´
ãã¿ã³
// Primary CTA
<button className="bg-indigo-600 hover:bg-indigo-700 text-white px-6 py-3 rounded-lg transition-colors cursor-pointer">
CTA
</button>
// Secondary
<button className="bg-white/10 hover:bg-white/20 text-white px-6 py-3 rounded-lg transition-colors cursor-pointer">
Secondary
</button>
// Disabled - ã³ã³ãã©ã¹ãç¶æ
<button className="bg-white/5 text-white/70 cursor-not-allowed" disabled>
Disabled
</button>
ã«ã¼ã
// Glass card with accessible text
<div className="bg-white/5 backdrop-blur-xl border border-white/10 rounded-2xl p-6">
<h3 className="text-white font-semibold">Title</h3>
<p className="text-white/80">Description with sufficient contrast</p>
</div>
ããã¹ãé層
// ã½ãªããèæ¯ï¼#0F0F1A çï¼ã§ã®ä½¿ç¨
<h1 className="text-4xl font-bold text-white">è¦åºã</h1>
<h2 className="text-2xl font-semibold text-white">ãµãè¦åºã</h2>
<p className="text-lg text-muted">æ¬æï¼ããã¸ã§ã¯ããã¼ã¯ã³ä½¿ç¨ï¼</p>
<span className="text-sm text-subtle">è£è¶³</span>
// Glass card å
ã§ã®ä½¿ç¨
<h3 className="text-white">ã¿ã¤ãã«</h3>
<p className="text-white/80">説ææ</p>
ã¢ã¤ã³ã³
- 使ç¨ã©ã¤ãã©ãª: Lucide Icons
- ç¦æ¢: çµµæåãã¢ã¤ã³ã³ã¨ãã¦ä½¿ç¨ããªã
import { Music, Brain, Sparkles, Check, X } from 'lucide-react';
ã¬ã¹ãã³ã·ããã¬ã¼ã¯ãã¤ã³ã
/* Mobile first */
/* sm: 640px */
/* md: 768px */
/* lg: 1024px */
/* xl: 1280px */
/* 2xl: 1536px */
æ¤è¨¼ãã¹ãç»é¢å¹ :
- 320px (æå°ã¢ãã¤ã«)
- 768px (ã¿ãã¬ãã)
- 1024px (ãã¹ã¯ããã)
- 1440px (大ç»é¢)
Pre-Delivery Checklist
- Lighthouse ã¢ã¯ã»ã·ããªã㣠100%ï¼æéè¦ï¼
- ããã¸ã§ã¯ãã® globals.css ãã¼ã¯ã³ã使ç¨
- Glass card å ããã¹ã㯠text-white/80 以ä¸
- ããã¸ã®ã³ã³ãã©ã¹ã確èª
- çµµæåã¢ã¤ã³ã³ä¸ä½¿ç¨ï¼Lucide使ç¨ï¼
- ãã¼ã¯ã¢ã¼ã対å¿
- ã°ã©ã¹ã¢ã¼ãã£ãºã é©ç¨
- cursor-pointer on clickables
- ã¬ã¹ãã³ã·ã対å¿
- ããã©ã¼ãã³ã¹æé©åï¼ç»åãã¢ãã¡ã¼ã·ã§ã³ï¼
ã³ã³ãã©ã¹ãç¢ºèªæ¹æ³
å®è£ å¾ã¯å¿ ã Lighthouse ã§ã¢ã¯ã»ã·ããªãã£ã確èª:
# ãã¼ã«ã«ç¢ºèª
npm run dev
lighthouse http://localhost:3000 --only-categories=accessibility --view
# 詳細ãªå¤±æé
ç®ã®ç¢ºèª
lighthouse http://localhost:3000 --only-categories=accessibility --output=json | jq '.audits["color-contrast"]'
ç®æ¨: Lighthouse Accessibility Score 100%