Communitygithub.com

uix-skill

デザイン性とアクセシビリティに優れたUIを設計・構築し、監査・磨き・アニメーション追加を支援します。ランディングページ、マーケティングサイト、ダッシュボード、アプリ画面、フォーム、コンポーネントの構築、再設計、監査、テーマ適用、アニメーション追加時に使用します。DESIGN.mdの読み書き時、ユーザーが「/uix」「この見た目を良くして」「この画面を監査して」「アニメーションを追加して」と発言した場合もトリガーされます。アートディレクションを選び、トークンをDESIGN.mdに固定し、静的チェックとブラウザーチェックを組み合わせて構築します。22のスタックに対応。Web: React, Next.js, Vue, Nuxt, Nuxt UI, Svelte, Angular, Astro, Laravel, shadcn/ui, Three.js, HTML + Tailwind。ネイティブ: SwiftUI, Jetpack Compose, Flutter, React Native, WPF, WinUI, UWP, Uno, Avalonia, JavaFX。無料ツールのみ使用。

uix-skill とは?

uix-skillは、エージェントがデザインシステムに従いながら、アクセシビリティと一貫性を備えたUIを構築・監査・改良するためのスキルです。このスキルは、エージェントがDESIGN.mdという単一のデザイン基準ファイルを中心に動作します。`/uix init`でプロジェクトを分析し、3つの質問と3つの方向性からアートディレクションを決定、DESIGN.mdを生成・検証します。`/uix build`では既存のDESIGN.mdに従いUIを構築し、静的なルールチェックとブラウザーレンダリングチェックを自動実行。`/uix audit`では問題を報告し、`/uix polish`で優先度の高い問題を修正、`/uix motion`でアニメーションを追加・レビューします。22以上のWeb/モバイル/デスクトップフレームワークをサポートし、無料ツールのみを使用。React, Next.js, Vue, Nuxt, Svelte, Angular, Astro, Laravel, shadcn/ui, Three.js, HTML+Tailwindに加え、SwiftUI, Jetpack Compose, Flutter, React Native, WPF, WinUI, UWP, Uno, Avalonia, JavaFXなどのネイティブスタックもカバー。独自のトークンやテーマが既存の場合はそれを優先し、エージェントは決められたファイルのみを読み込み、不要な創発を避ける設計になっています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dtthaison/uix-skill/tree/main/skills/uix-skill

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

uix-skill は何をしますか?

「生成された」のではなく「デザインされた」ように見えるUIを構築します。見た目を一度決め(DESIGN.md)、そこから構築し、スクリプトで結果を確認します。

パス: 以下の references/、data/、scripts/ のパスはすべて、このSKILL.mdを含むフォルダーからの相対パスです。スクリプトはユーザーのプロジェクトルートから node <そのフォルダー>/scripts/<名前>.mjs として実行します。スクリプトにはNode 22が必要です。

コマンド

コマンド役割
/uix initプロジェクトを読み込み、3つの質問をし、3つの方向性を提案し、DESIGN.mdを書き、lintを実行します。
/uix buildDESIGN.mdに従ってページ、画面、またはコンポーネントを構築し、チェックし、修正します。デフォルト。
/uix auditチェックを実行し、レポートします。編集はしません。
/uix polish監査結果の上位問題を修正します。ロジック、ルート、コピーの意味は保持します。
/uix motion4つの質問に答えた後、モーションをレビューまたは追加します。

動詞は /uix-skill <動詞>、uix <動詞>、またはプレーンなリクエスト(「設定ページを作成して」「この画面を監査して」)として到着します。プレーンなリクエストは最も近い動詞にマッピングします。明確な一致がない場合は build とします。

ハードルール

  1. DESIGN.mdが存在する場合: まずそれを読み、そこから構築します。初期診断と方向性の提案はスキップします。DESIGN.mdで定義されていない色、フォント、角丸は決して発明してはいけません。
  2. scripts/rules.mjs が実行され、Webスタックの場合は scripts/check.mjs も実行されるまでは、決して完了を報告してはいけません。チェックが実行できない場合(「チェック」セクションを参照)、unverified: <理由> と報告します。
  3. チェック後の修復ラウンドは最大2回までです。その後、残っているものを報告します。
  4. 画像: プロジェクトのアセット、次にOpenverse/Wikimedia(クレジット付き)、最後にCSS/SVGアート。空のプレースホルダーは絶対に使用しません。
  5. 無料ツールのみ。有料API、キーは使用禁止。
  6. リクエストのUIスコープ外のファイルは編集しません。/uix audit は何も編集しません。
  7. 以下の表に記載されているファイルのみを読み込みます。スタックファイルは1つだけ読み込みます。ただし shadcn と nuxt-ui は例外で、そのガイドに加えてホストフレームワークのガイドも読み込みます。

実行順序

  1. プロジェクトを読み込む: package.json、設定、既存のスタイル、DESIGN.md、public/ または assets/。
  2. スタックを検出する(以下の表)。そのガイドを読み込む。
  3. 初期診断。3つの質問(対象ユーザー、画面の役割、トーン)を1つのメッセージでまとめて行う。モバイルスタックの場合: トーンの質問では「落ち着いたモーション?活発なモーション?」も尋ねる;回答をDESIGN.md(references/design-md.md)にモーションティアとして記録する。ユーザーまたはプロジェクトがすでに回答している質問はスキップする。
  4. references/directions.md から、トーン、密度、色温度が明確に異なる3つの方向性を提案する。選択を待つ。所有者が事前に方向性を決定している場合は提案をスキップする。
  5. DESIGN.md(references/design-md.md)を書き、lintを実行する。すべてのlintエラーを修正する。
  6. references/layouts-web.md(マーケティング、コンテンツ用)または references/layouts-app.md(ログイン後の画面用)から構造を選択する。
  7. 最初のセクションを構築する。実際のコピー、実際の画像、すべてのコンポーネントの状態を含める。
  8. チェックする(以下参照)。エラー、次に警告を修正する。最大2ラウンド。
  9. 報告する。

ステップ3から5は init に属します。build は既存のDESIGN.mdを使用します。存在しない場合は最初に init を実行します。

既存のデザインシステムを優先

  • DESIGN.mdが存在する場合: それを読み、lintし、そこから構築する。
  • DESIGN.mdはないが、プロジェクトに独自のトークンやテーマがある場合(Tailwind設定、CSS変数、テーマファイル): /uix init はそれらのトークンからDESIGN.mdを(プロジェクトルートに)作成する。ユーザーが新しい見た目を要求しない限り、新しい方向性を提案してはいけない。
  • どちらでもない場合: 完全な init を実行する。
  • 独自のトークンとは、フレームワークのデフォルトの初期設定を超える色、フォント、スペーシングが、Tailwind v4の @theme ブロック、Tailwind設定、CSSカスタムプロパティ、またはプラットフォームのテーマファイルに存在することを意味する。create-next-appのデフォルトの --background/--foreground はこれに該当しない。

読み込むもの

必要になるまで、これ以外は読み込まない。

タイミング読み込むもの
任意のbuild、polish、auditreferences/anti-slop.md、references/components-a11y.md
init、またはDESIGN.mdへの書き込みreferences/design-md.md
init(方向性の提案時)references/directions.md、次に選択された data/fonts.csv、data/palettes.csv、data/styles.csv の行
マーケティング、コンテンツ、カタログページreferences/layouts-web.md
ダッシュボード、テーブル、フォーム、設定、認証references/layouts-app.md
任意のモーション、または /uix motionreferences/motion.md
モバイルのbuild、polish、auditreferences/mobile-foundations.md、references/mobile-patterns.md
モバイルモーションreferences/motion.md の代わりに references/mobile-motion.md
モバイル: アプリの安全な表示、Expo Goと開発ビルドの違い、タップとスワイプのチェックreferences/mobile-testing.md
モバイルアプリの initdata/styles.csv の代わりに data/mobile-styles.csv(選択された行)
任意の画像スロットreferences/images.md
サンプルDESIGN.mdの形状data/examples/ledger.md、field-notes.md、または harbor.md。1つだけ。
すべてのタスク1つの references/stacks/<id>.md。shadcn または nuxt-ui の場合は、ホストガイドも含める(「スタック検出」セクション参照)。

スタック検出

最初に一致したものが優先されます(上から下)。何も一致しない場合: html-tailwind。依存関係名は正確に一致させること(nextは一致するが next-themes は一致しない)。

シグナルスタックID
package.json に @nuxt/uinuxt-ui
components.json にshadcn、または @/components/uishadcn
artisan ファイル、または composer.json に laravel/frameworklaravel
package.json に nuxtnuxtjs
package.json に nextnextjs
@angular/core または angular.jsonangular
package.json に astro、または astro.config.*astro
svelte または @sveltejs/kitsvelte
package.json に vuevue
package.json に threethreejs
package.json に react-native または exporeact-native
package.json に reactreact
pubspec.yamlflutter
Compose(androidx.compose)を含む build.gradle(.kts)jetpack-compose
*.xcodeproj または SwiftUIを含む Package.swiftswiftui
Avalonia を含む *.csprojavalonia
Uno. または Uno.WinUI を含む *.csprojuno
Microsoft.WindowsAppSDK を含む *.csprojwinui
<UseWPF>true</UseWPF> を含む *.csprojwpf
TargetPlatformIdentifier が UAP、または Microsoft.NETCore.UniversalWindowsPlatform を含む *.csprojuwp
pom.xml または javafx を含む build.gradlejavafx
上記のいずれでもないhtml-tailwind

Web ID: angular, astro, html-tailwind, laravel, nextjs, nuxt-ui, nuxtjs, react, shadcn, svelte, threejs, vue。残りはネイティブです。 「モバイルスタック」とは react-native、flutter、swiftui、jetpack-compose を意味します。これらのリクエストは「読み込むもの」テーブルのモバイル行も読み込みます。 より具体的なスタックが優先されます: nextjs > react、react-native > react、laravel > そのJSフロントエンド。 コンポーネントレイヤーのスタックは2つのガイドを読み込みます: shadcn とそのホストガイド(このテーブルで shadcn 行をスキップして検出された nextjs、react、astro、laravel ...)、および nuxt-ui と nuxtjs。他のプロジェクトは1つだけ読み込みます。

チェック

ユーザーのプロジェクトルートから実行します。<skill> はこのSKILL.mdが入っているフォルダーに置き換えてください。

node <skill>/scripts/rules.mjs [--design DESIGN.md] <path...>
node <skill>/scripts/check.mjs <url|file> [--widths 375,768,1280] [--out .uix/shots] [--themes attr=v1,v2]
node <skill>/scripts/images.mjs "<query>" [--count 6]
  • 3つすべてがJSONを出力します。rules.mjs は {findings, skipped} を出力します:1MB超または読み取り不能なファイルは skipped に理由とともに記録され、エラーとはなりません。check.mjs は {shots, findings, notes} を出力します。notes を読んでください(例:早期にプローブされた読み込みタイムアウト、失敗したスクリーンショット)。終了コード0: 正常。終了コード1: エラーの発見(rules.mjs、check.mjs)。終了コード2: 使用法または環境の問題(3つすべて)。images.mjs は終了コード0または2のみを返します。
  • 終了コード2は決して正常結果ではなく、修復ラウンドとしてカウントしません。check.mjs がページに到達できず、プロジェクトに明白な開発スクリプト(npm run dev 等)がある場合は、バックグラウンドで1回起動してリトライします。それ以外の場合はユーザーに尋ねます。不足しているもの(Chrome、Node 22、起動していないサーバー)を具体的に伝えます。
  • それでもチェックが実行できない場合、レポートは unverified: <理由> と表示します。
  • Webスタック: ソースに対して rules.mjs を実行し、次に開発サーバーのURLまたはビルドファイルに対して check.mjs を実行します。幅は375、768、1280です。スクリーンショットは .uix/shots に保存されます: <w>.png はページ全体、<w>-<n>.png は最大1600pxのタイルです。全体ショットは縮小されて読めなくなるため、タイルを見てください。check.mjs は最初にページをスクロールするため、スクロールで表示されるコンテンツも確認できます。
  • プロジェクトが複数のテーマを定義している場合([data-theme]、[data-skin]、.darkなど)、--themes で渡します(例:--themes data-skin=oatmeal,rose または --themes class=dark)。各テーマは最後の幅でプローブされ、その発見結果には theme が含まれます。
  • コントラストの発見結果は色のペアごとにグループ化されます(count、sample、selectors)。各要素ではなく、トークンを修正します。
  • React Native (Expo): rules.mjs を実行し、次に実行中のMetroサーバーに対して node <skill>/scripts/check-mobile.mjs --app exp://127.0.0.1:<port> を実行します。Androidエミュレーターの場合は --platform android を追加します(フラグとルートファイルはスタックガイドにあります)。{shots, findings, notes} を出力し、check.mjs と同様に終了コード0、1、または2を返します。maestro missing: で始まるノートは、階層とフローが実行されなかったことを意味し、「完了できませんでした: <理由>」として報告し、成功とはみなしません。ショットは .uix/mobile-shots に保存されます。route-not-navigated という発見結果はエラーであり、決して正常結果ではありません: ショットは別の画面を示しています。修復ループ: 完全なマトリックスではなく、--only <routes> と1つの --devices エントリで再チェックします。
  • 他のモバイルスタック: rules.mjs を実行します。ネイティブiOSアプリ(SwiftUI)はその後 check-mobile.mjs --native を使用します(フラグはスタックガイドにあります);監査パスでは --out "$(mktemp -d)" を使用します。その他はスタックファイルの「確認方法」にある手動スクリーンショットのレシピを使用します(ライト、ダーク、xxxl テキスト)。シミュレーターが利用できない場合: unverified: <理由>。2ラウンドの制限が適用されます。
  • 他のネイティブスタック: rules.mjs を実行し、次にスタックファイルの「確認方法」にある手動チェックリストを実行します。ブラウザーチェックはありません。
  • error の発見結果は warn より先に修正します。保持する warn には1行の理由が必要です。
  • 修復ループ: チェック、修正、再チェック。最大2ラウンド。その後停止して報告します。
  • ルールIDとその修正方法は references/anti-slop.md にあります。また、スクリプトでは捕捉できない判断ルールもリストされているので、それらは自分で確認します。

コマンド契約

init

  1. プロジェクトを読み込み、スタックを検出し、そのガイドを読み込む。
  2. 既存のトークンまたはDESIGN.mdがある場合: 「既存のデザインシステムを優先」セクションを参照。
  3. それ以外の場合は3つの質問をし、明確に異なる3つの方向性を提案し、選択を待つ。 任意のスタック: コンテンツの言語(lang、i18nファイル、コピー)を検出し、data/fonts.csv の行のうち scripts 列がそれをカバーするものだけを選択する。
  4. DESIGN.mdを書く。Lint: npx --yes @google/[email protected] lint DESIGN.md。エラーを修正する。
  5. 選択された方向性、書き込まれたファイル、およびlint結果を報告する。

build

  1. DESIGN.md、スタックガイド、レイアウトファイルを読み込む。
  2. 構造を1つ選択する。どれを選んだか、その理由を1行で述べる。
  3. 最初のセクションを完全に構築する。次に残りを構築する。
  4. チェックを実行する。最大2ラウンドで修正する。
  5. 報告する。

audit

  1. スタックを検出し、そのガイドを読み込む。
  2. チェックを実行する。判断ルールを確認する。check.mjs と check-mobile.mjs にも --out "$(mktemp -d)" を渡し、監査でプロジェクトに何も書き込まないようにする。
  3. テーブルを出力する。何も編集しない。
変更前変更後理由
現在の状態あるべき状態ルールIDまたは理由

polish

  1. スタックを検出し、そのガイドを読み込む。
  2. 最初に監査を実行する。
  3. 上位の問題を、エラーから優先して修正する。ロジック、ルート、コピーの意味は変更しない。
  4. チェックを再実行する。最大2ラウンド。報告する。

motion

  1. references/motion.md(モバイルスタック: references/mobile-motion.md)を読み込む。各アニメーションについて、その4つの質問(必要か、何を伝えるか、どのイージングか、どのくらいの長さか)に文章で回答する。
  2. 明確な回答がないアニメーションは削除する。prefers-reduced-motion の処理を追加する(スタックガイドにネイティブ相当のものが記載されている)。
  3. Before / After / Why のテーブルを出力する。ユーザーがモーションの追加または修正を依頼した場合のみ変更を適用し、レビューのみの場合は適用しない。

レポート

すべての実行を以下で終了します:

  • 変更されたもの(ファイル)
  • 残っている発見結果(各ルールIDと理由)
  • スクリーンショットとタイルのパス(.uix/shots、Webの場合)、ショットのパス(.uix/mobile-shots、モバイルの場合)、または実行された手動チェック(他のネイティブの場合)
  • 追加された画像クレジット

関連スキル