mcpField
U
ui4-review

ui4-review

github.com/payloadcmsデザイン・UI45.6k81 回インストール今日更新
リポジトリ

ui4-review について

ui4-reviewは、CSSの変更を確認し、トークン違反を自動修正するスキルです。UI4スタイルを管理する開発者向けに、優先順位に沿った検査と手動確認が必要な項目の報告を行います。

主な機能

  1. 01ネストと固定値を検査
  2. 02旧変数とトークンを置換
  3. 03パレット値をセマンティックトークンに変更
  4. 04優先順位に沿って違反を自動修正
  5. 05修正内容と要確認項目を報告

活用シーン

  1. 01提出前のCSS変更の確認
  2. 02コンポーネントスタイルのUI4トークンへの移行
  3. 03置換トークンが明確でない値の特定

インストール

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

$npx skills add https://github.com/payloadcms/payload --skill ui4-review

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

詳細

UI4 レビュー

CSS の変更をレビューし、トークン違反を自動修正します。


重要: パレットトークンとセマンティックトークン

--ramp-* トークンは生のカラーパレットです(例: --ramp-white-1000、--ramp-blue-500)。これらはセマンティックトークンを定義するために colors.css 内でのみ使用されます。

--color-* トークンはコンテキストを認識するセマンティックトークンです(例: --color-bg、--color-text-brand)。これらはライト/ダークテーマを自動的に処理します。

コンポーネントと要素は常に --color-* セマンティックトークンを使用すべきであり、--ramp-* パレットトークンを直接使用してはいけません。

/* ❌ BAD - using raw palette */
background: var(--ramp-white-1000);

/* ✅ GOOD - using semantic token */
background: var(--color-bg);

プロセス

ステップ 1: 変更された CSS ファイルを取得する
git status --porcelain | grep '\.css$'

または、特定のファイルが指定されている場合は、それを直接使用します。

ステップ 2: 並列での違反検出

これらの grep 検索を並列で実行して、すべての違反タイプを一度に検出します:

# 1. SCSS Nesting Violations (BEM patterns that don't work in CSS)
grep -n '&__\|&--' "$FILE"

# 2. Hardcoded Spacing (px/rem values that should be tokens)
grep -nE ':\s*[0-9]+px|:\s*[0-9.]+rem' "$FILE"

# 3. Hardcoded Colors (hex, rgb, rgba - includes box-shadow)
grep -nE '#[0-9a-fA-F]{3,8}|rgba?\(' "$FILE"

# 4. Legacy Theme Variables
grep -nE 'var\(--theme-|var\(--style-|var\(--base\)' "$FILE"

# 5. Old Token Names (pre-UI4 naming)
grep -nE '\-\-bg-default|\-\-bg-secondary|\-\-text-default|\-\-text-secondary|\-\-icon-default|\-\-icon-secondary|\-\-border-default|\-\-border-strong' "$FILE"

# 6. Raw Palette Usage (should use semantic tokens instead)
# Skip this check for colors.css which defines the semantic tokens
grep -nE 'var\(--ramp-' "$FILE"

6 つの grep コマンドをすべて 1 つの並列バッチで呼び出し、その結果を分析します。

注意: 生の --ramp-* 違反はコンポーネントの CSS ファイルでのみ報告され、セマンティックトークンを定義するために使用されている colors.css 内では報告されません。

ステップ 3: 優先度に応じた自動修正
  1. SCSS ネスト(CSS を完全に壊す)— 最初に修正
  2. レガシー変数(非推奨)— 新しいトークンに置き換える
  3. 古いトークン名(UI4 以前)— --color-* の命名に変換する
  4. 生のパレットの使用(コンポーネント内の --ramp-*)— セマンティックな --color-* トークンに置き換える
  5. ハードコードされた値(スペーシング、色、角丸)— トークンに置き換える
ステップ 4: レポート

修正後、以下を報告します:

  • 検出された違反の合計数
  • 自動修正された違反
  • 手動レビューが必要な違反(明確に一致するトークンがないもの)

違反リファレンス

SCSS ネスト(CSS を壊す)
パターン問題修正
&__elementBEM 要素の連結フラットな .block__element セレクターを使用する
&--modifierBEM モディファイアの連結フラットな .block--modifier セレクターを使用する
.child { .parent--mod & }親参照.parent--mod .child に移動する

動作するもの: &:hover、&:focus、&::before、& .child


スペーシングトークン
値トークン
4px / 0.25rem--spacer-1
8px / 0.5rem--spacer-2
12px / 0.75rem--spacer-2-5
16px / 1rem--spacer-3
24px / 1.5rem--spacer-4
32px / 2rem--spacer-5
40px / 2.5rem--spacer-6

丸めのルール — 常に最も近いトークンに丸めます:

ピクセル範囲トークン備考
0-2px--spacer-00 を使用する
3-6px--spacer-1 (4px)5-6px は 4px に丸められる
7-10px--spacer-2 (8px)10px は 8px に切り下げられる
11-14px--spacer-2-5 (12px)13.33px は 12px に丸められる
15-20px--spacer-3 (16px)15px、20px はどちらも 16px に丸められる
21-28px--spacer-4 (24px)
29-36px--spacer-5 (32px)30px は 32px に丸められる
37-48px--spacer-6 (40px)

ルール: 40px 以下の値には、常に単一のトークンを使用します(calc() は使わない)。40px を超える値には、スペーシングトークンとともに calc() を使用します。

例外: 0、パーセンテージ、auto、inherit、-1px(クリップのオフセット用)


ストローク幅トークン
値トークン
1px--stroke-width-small

角丸トークン
値トークン
2px / 0.125rem--radius-small
5px / 0.3125rem--radius-medium
13px / 0.8125rem--radius-large
9999px--radius-full

エレベーショントークン (ボックスシャドウ)

packages/ui/src/css/elevations.css で定義されています。

ボックスシャドウにハードコードされた rgba() を絶対に使用しないでください。 代わりにエレベーショントークンを使用してください:

トークン用途
--elevation-300-tooltipツールチップ、小さなフローティング要素
--elevation-400-menu-panelメニュー、ドロップダウン、フローティングパネル
--elevation-500-modal-windowモーダル、ダイアログ、フルオーバーレイ
/* ❌ BAD - hardcoded shadow */
box-shadow: 0 -2px 16px -2px rgba(0, 0, 0, 0.2);

/* ✅ GOOD - elevation token */
box-shadow: var(--elevation-400-menu-panel);

エレベーションはライト/ダークテーマに合わせて自動的に調整されます。


セマンティックカラートークン (UI4 命名)

すべてのセマンティックカラーは --color- プレフィックスを使用します。default カテゴリとバリアントは暗黙的です。

旧名新名 (UI4)
--bg-default--color-bg
--bg-secondary--color-bg-secondary
--bg-hover--color-bg-hover
--bg-selected--color-bg-selected
--bg-brand--color-bg-brand
--bg-danger--color-bg-danger
--bg-success--color-bg-success
--bg-warning--color-bg-warning
--text-default--color-text
--text-secondary--color-text-secondary
--text-tertiary--color-text-tertiary
--text-brand--color-text-brand
--text-danger--color-text-danger
--text-success--color-text-success
--icon-default--color-icon
--icon-secondary--color-icon-secondary
--icon-tertiary--color-icon-tertiary
--icon-brand--color-icon-brand
--icon-danger--color-icon-danger
--border-default--color-border
--border-strong--color-border-strong
--border-selected--color-border-selected
--border-brand--color-border-brand

レガシー変数 (直ちに置き換えてください)
レガシー置き換え
--theme-elevation-0--color-bg
--theme-elevation-50--color-bg-secondary
--theme-elevation-100--color-border
--theme-text--color-text
--style-radius-m--radius-medium

var(--base) の変換: レガシートークン = 20px。次を使用して変換してください:

元の値ピクセル置き換え
var(--base) * 0.48pxvar(--spacer-2)
var(--base) * 0.510pxcalc(var(--spacer-1) * 2.5)
var(--base) * 0.612pxvar(--spacer-2-5)
var(--base)20pxcalc(var(--spacer-4) * 0.833)
var(--base) * 240pxvar(--spacer-6)

完全な変換表については ui4 スキルのステップ 1 を参照してください。


動作

違反を報告するだけにしないでください。replace_string_in_file または multi_replace_string_in_file を使用して直ちに修正してください。

違反に明確なトークンの一致がない場合 (例: 3px や異常な rem 値)、手動レビューのためにフラグを立ててください。ただし推測はしないでください。

各違反について:

  1. 正確な行と値を特定する
  2. 正しいトークンの置き換えを判断する
  3. replace_string_in_file を使用して直ちに修正する
  4. 修正された内容を報告する

フラグを立てるだけ (修正しない) の条件:

  • 一致するトークンが存在しない (例: 18px のバッジサイズ)
  • 値が意図的なもの (例: 1px のボーダー、0)
  • 置き換えが曖昧

空の CSS ファイル: 移行後にコンポーネントの CSS ファイルが空になる場合 (すべてのスタイルが Button のような共有コンポーネントで処理されるようになった場合)、CSS ファイルを削除し、コンポーネントからそのインポートを削除してください。


出力形式

自動修正後、次を報告してください:

## Auto-Fixed

✅ Collapsible/index.css:9 — `height: 2rem` → `height: var(--spacer-5)`
✅ Collapsible/index.css:120 — `width: 2rem` → `width: var(--spacer-5)`

## Flagged (Manual Review)

⚠️ ErrorPill/index.css:15 — `height: 1.125rem` (18px) — no matching token

概要

すべての修正後、簡単な概要を示します:

ファイル修正済みフラグ付き
Collapsible/index.css21
ErrorPill/index.css02

コメント