design-code について
アダプターを通じて、コンポーネント仕様を指定フレームワーク向けに実装するスキルです。トークンベースのスタイル、アクセシビリティ、完全なファイル出力、検証を重視します。
主な機能
- 01フレームワーク用アダプターの選択または作成
- 02コンポーネントとARIA仕様の読み込み
- 03共通デザイントークンの使用
- 04操作状態とアクセシビリティへの対応
- 05テーマ、レスポンシブ表示、出力の検証
活用シーン
- 01指定フレームワークでのコンポーネント実装
- 02トークンベースのアクセシブルなUI要素の構築
- 03納品前の生成UIコードの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ plugin87/ ux-ui-agent-skills --skill design-codeインストール後、Claude Code で/design-codeを入力して読み込まれたか確認します。
詳細
スキル:デザインコード
ステップ 0:キットはありますか? このスキルはキットのファイルを読み込みます。一度だけ確認してください:
ls ${CLAUDE_SKILL_DIR}/../../../tokens >/dev/null 2>&1 && echo KIT_OK || echo KIT_MISSINGKIT_MISSINGの場合、インストールされているのはスキルフォルダーのみです。これはnpx skills addの動作です。その旨を明確に伝え、npx ux-ui-agent-skills initまたはプラグインのインストールを案内して、そこで終了してください。開けなかったファイルの内容を推測してはいけません。
アダプターシステムを通じて、コンポーネントを対象のフレームワーク向けにレンダリングします。
手順
- リクエストから対象のフレームワークとスタイリング方法を特定します(または質問します)。
${CLAUDE_SKILL_DIR}/../../../frameworks/adapter-protocol.md(トークンの解決、コンポーネントの契約、スタイリング、ダークモード、モーション、出力ルールに関する共通仕様)を読み込みます。- 該当するアダプターを読み込みます:
- 詳細なリファレンス:
${CLAUDE_SKILL_DIR}/../../../frameworks/react-tailwind.md、${CLAUDE_SKILL_DIR}/../../../frameworks/nextjs.md、${CLAUDE_SKILL_DIR}/../../../frameworks/swiftui.md。 - 簡潔なアダプター:
${CLAUDE_SKILL_DIR}/../../../frameworks/adapters/{vue,svelte,angular,solid,web-components-lit,react-native,flutter,jetpack-compose,vanilla-css,css-in-js}.md。 - 対象のファイルがない場合: プロトコルの「新しいアダプターを作成する」チェックリストを使って、その場でアダプターを作成します。
- 詳細なリファレンス:
${CLAUDE_SKILL_DIR}/../../../components/*からコンポーネント仕様を、${CLAUDE_SKILL_DIR}/../../../accessibility/aria-patterns.mdから ARIA パターンを取得します。- すべての値をトークンに解決します(
${CLAUDE_SKILL_DIR}/../../../tokens/*.json)。要望があれば、美的な方向性を適用します(apply-aestheticスキル)。
出力ルール(必須)
トークンを使用する(ハードコードしない) · すべてのインタラクティブ要素にアクセシビリティ対応を含める · 該当する 8 つの状態すべてに対応する · セマンティックレイヤーでダークモードに対応する · モバイルファースト · 動きを抑える設定に対応する · プレースホルダーを使わず、ファイルを完全な形で提供する(${CLAUDE_SKILL_DIR}/../../../workflows/redesign-audit.md → 出力の完全性)
検証(完了を宣言する前に必ず実施)
コードは最も重要な成果物です。毎回、次の項目を自己チェックしてください。
- ハードコードされた値がないこと:すべての色/サイズ/角丸/シャドウ/時間/フォントがトークン(CSS 変数/テーマキー/アセット)に由来していることを確認します。出力に対して
${CLAUDE_SKILL_DIR}/../../../scripts/lint_hardcodes.pyを実行し、未加工の hex/px/ms と未加工の Tailwind パレットユーティリティ(bg-gray-500、text-blue-600)がゼロであることを確認します。セマンティックユーティリティ/トークン(bg-surface、text-primary)を使用してください。${CLAUDE_SKILL_DIR}/../../../scripts/validate_theme_refs.pyを実行し、すべてのvar(--…)が定義済みのテーマトークンを参照していること(宙に浮いたトークンがないこと)を確認します。許可される例外は、サードパーティのテーマ設定(MUI/Mantine)で、当社のトークンをその API にマッピングする場合のみです。 - 該当する状態がすべて揃っていること:Default、Hover、Focus(-visible リング)、Active、Disabled、Loading(+
aria-busy)、Error、Selected、または妥当な理由を示した N/A。 - アクセシビリティが適切に設定されていること:
${CLAUDE_SKILL_DIR}/../../../accessibility/aria-patterns.mdに従った正しい role/ARIA、キーボード操作モデル、フォーカス管理、24px 以上のターゲットを確認します。新しい色の組み合わせについては、${CLAUDE_SKILL_DIR}/../../../scripts/contrast.pyを使ってコントラストを検証します。 - ダークモード+動きを抑える設定+レスポンシブ対応:セマンティックトークンが切り替わること、動きに
prefers-reduced-motionのフォールバックがあること、レイアウトがモバイルファーストであることを確認します。 - 完全性:ファイル全体を含め、
// ...を残さないこと。N 個を求められた場合は N 個を提供します。いずれかのチェックに失敗したら、返す前に修正してください(不確かな場合はa11y-auditを実行します)。 - 単一テーマの一貫性:プロジェクトで共有されている唯一のトークンテーマ(ルートの CSS 変数レイヤー)を使用してください。ページごとのパレットや新しい色は定義しないでください。複数のページ/画面にわたり、同じセマンティックトークンですべてのサーフェスを制御し、製品全体の見た目を統一して、一元的にテーマ設定できるようにします(
${CLAUDE_SKILL_DIR}/../../../.claude/rules/tokens-and-color.md→ Single-Theme Consistency)。 - 共有プリミティブレイヤーは 1 つだけにすること:各アトム(
Button、Input、Modal、Badge)につき再利用可能なコンポーネントを 1 つ(cva/相当するものを使用)構築します。複数ファイル内でユーティリティクラスのまとまりをインラインで繰り返したり、画面ごとに div をモーダルとして独自実装したりしないでください。オーバーレイでは単一のModalプリミティブを再利用します。フォーカストラップ、role="dialog"、aria-modal="true"、aria-labelledby、Escape キー、閉じたときにフォーカスを元に戻すこと、バックドロップに対応します(WCAG 2.4.3 + 2.1.2)。${CLAUDE_SKILL_DIR}/../../../examples/golden/Button.tsxと${CLAUDE_SKILL_DIR}/../../../examples/golden/Modal.tsxを参照してください。 - フォントの読み込み:CSS で Web フォントを
@importすることは絶対に避けてください(レンダリングをブロックします)。フレームワークのローダー(next/font)、またはfont-display: swapを指定した<link rel="preconnect">+<link rel="preload">を使用します。可能であればセルフホストしてください。フォントファミリーはトークン(--font-sans)から指定し、リテラルで指定しないでください。 - 意図に沿ったセマンティックトークン+一貫性:トークンの意味はアクションに一致させます。破壊的な操作(Delete/Remove)には
action.destructive(危険)を使い、action.primaryは絶対に使いません。セカンダリは濃色テキストを伴う、ニュートラルなアウトライン/透明スタイルにします(色のついた塗りつぶしは絶対に使用しない → 青地に濃色テキストは禁止)。同じアクションには、どこでも同じバリアントを使います(トリガーボタンと確認ボタンの色が、一方では赤、もう一方では青といった不一致にならないようにします)。ゲートでは検出できません。必ず確認してください。 - アイコンに絵文字を使わないこと:実際のアイコンセット(デフォルトは lucide)をインライン SVG と
currentColorで使用してください。JavaScript でラベルを切り替える場合も含め、絵文字は使用しません(テキスト/絵文字の文字列ではなく<svg>を切り替えます)。${CLAUDE_SKILL_DIR}/../../../scripts/lint_taste.pyを意識して実行してください(アイコンとして使われた絵文字を検出します)。 - 破壊的操作の確認 UX:取り消せない操作(アカウント/データの削除、「元に戻せません」と明記された操作など)には、WCAG 3.3.4/3.3.6 に準じた実質的な確認手順が必要です。確認ダイアログを表示し、確認ボタンに操作内容を明記します(「削除」/「OK」/「はい」ではなく「アカウントを削除」)。重大な操作では、入力による確認も必要です。
${CLAUDE_SKILL_DIR}/../../../examples/sample-app/preview.htmlと${CLAUDE_SKILL_DIR}/../../../content/voice-tone.mdを参照してください。 - 見た目の事前チェック:
${CLAUDE_SKILL_DIR}/../../../taste/design-taste.mdの 12 項目の美的チェックを実行します。また、HTML をレンダリングする場合はDS_REQUIRE_BROWSER=1 node ${CLAUDE_SKILL_DIR}/../../../scripts/taste_audit.mjs <file>を実行します(レンダリングに基づき、控えめすぎる文字サイズのコントラスト、均一な繰り返し、広すぎる行幅、パレットの乱立を検出します)。見た目の評価はヒューリスティックです。検出結果を重要な手がかりとして扱い、実際のスクリーンショットのレビューも行ってください。正しさのように自動で証明できるものではありません。 - ゲートを実行し、結果を報告する(必須):完了を宣言する前に、
node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs verify_states.mjs <file>と--dark(すべての要素について default/hover/focus)を実行し、さらにnode ${CLAUDE_SKILL_DIR}/../../../scripts/accuracy_report.mjsを実行してください。実際の出力を報告します。直近で測定していないコントラスト値や「100%」を入力してはいけません(CLAUDE.md → Verification Protocol)。