web-ui-vuetify
Vue 3でMaterial DesignのUIを簡単に構築できる、豊富なコンポーネントが揃ったライブラリを活用し、洗練されたWebアプリケーションの画面を効率的に開発するSkill。
📜 元の英語説明(参考)
Material Design component library for Vue 3
🇯🇵 日本人クリエイター向け解説
Vue 3でMaterial DesignのUIを簡単に構築できる、豊富なコンポーネントが揃ったライブラリを活用し、洗練されたWebアプリケーションの画面を効率的に開発するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o web-ui-vuetify.zip https://jpskill.com/download/10323.zip && unzip -o web-ui-vuetify.zip && rm web-ui-vuetify.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/10323.zip -OutFile "$d\web-ui-vuetify.zip"; Expand-Archive "$d\web-ui-vuetify.zip" -DestinationPath $d -Force; ri "$d\web-ui-vuetify.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
web-ui-vuetify.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
web-ui-vuetifyフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Vuetify のパターン
クイックガイド: Vuetify は、Material Design を実装する 80 以上の事前スタイリングされた Vue 3 コンポーネントを提供します。
createVuetify()で設定します。色にはtheme、グローバルなコンポーネントの props にはdefaults、MD3 準拠にはblueprint: md3を設定します。スコープされた prop のオーバーライドにはv-defaults-providerを使用します。コンパイル時の変更には、SASS レベルで@use 'vuetify/settings'を使用してカスタマイズします。現在: v3.8.x -- フォームの検証にはuseRulesコンポーザブル、日付ピッカーの改善、パフォーマンスの最適化が利用可能です。Vuetify は テンプレート駆動 です。命令的な JS よりも宣言的な props/slots を優先してください。
<critical_requirements>
重要: この Skill を使用する前に
すべてのコードは、CLAUDE.md のプロジェクト規約に従う必要があります (kebab-case、名前付きエクスポート、インポート順序、
import type、名前付き定数)
(Vuetify を Vue プラグインとして app.use(vuetify) でインストールおよび登録する必要があります。プラグインがないとコンポーネントはレンダリングされません)
(コンポーネントの props を一貫させるために、createVuetify() または v-defaults-provider で defaults システムを使用する必要があります。同じ prop をすべてのインスタンスで繰り返さないでください)
(コンポーネントのカスタマイズには、名前付きスロット (v-slot:item.<key>、v-slot:prepend) を使用する必要があります。手動でスタイリングされたラッパー div は使用しないでください)
(v-data-table のヘッダーと列の配列はコンポーネントの外で定義する必要があります。インライン配列は、親の更新ごとに再レンダリングを引き起こします)
</critical_requirements>
自動検出: Vuetify, vuetify, createVuetify, v-btn, v-card, v-data-table, v-text-field, v-select, v-autocomplete, v-dialog, v-navigation-drawer, v-app-bar, v-toolbar, v-chip, v-snackbar, v-form, v-defaults-provider, v-theme-provider, useTheme, useDisplay, useDate, useRules, mdi, @mdi/font, vuetify/blueprints, vuetify/settings, vuetify/styles
使用する場合:
- 事前スタイリングされた Material Design コンポーネントを使用して Vue 3 アプリケーションを構築する場合
- 管理ダッシュボード、データテーブル、および CRUD インターフェースを迅速に開発する場合
- 包括的な defaults/theming システムの恩恵を受けるプロジェクト
- 組み込みのアクセシビリティ、RTL、および i18n サポートを必要とするアプリケーション
使用しない場合:
- Vue 以外のプロジェクト (Vuetify は Vue 専用です)
- 大幅なカスタマイズなしに、Material Design 以外の美的感覚を必要とするプロジェクト
- 最小限のバンドルサイズが重要で、必要なコンポーネントがわずかしかない場合 (ヘッドレスライブラリを検討してください)
- Vue 2 を使用するプロジェクト (Vuetify 3 には Vue 3 が必要です)
カバーされる主要なパターン:
createVuetify()、テーマ、およびブループリントを使用したプラグインのセットアップv-defaults-providerを使用したグローバルデフォルトとスコープされたデフォルト- コンパイル時の SASS 変数のカスタマイズ
- スロットベースのコンポーネントのカスタマイズ
- ソート、フィルタリング、ページネーション、およびカスタム列レンダリングを備えたデータテーブル
- ルール配列と
useRulesコンポーザブルを使用したフォームの検証 - テーマの切り替えと
useTheme/useDisplayコンポーザブル
詳細なリソース:
- examples/core.md -- プラグインのセットアップ、テーマ、デフォルト、SASS 変数、ブループリント、TypeScript、コンポーザブル
- examples/data-tables.md -- v-data-table ヘッダー、スロット、ソート、フィルタリング、ページネーション、サーバーサイド
- examples/forms.md -- v-form、検証ルール、useRules、入力コンポーネント、カスタム検証
- examples/layout.md -- v-app、v-app-bar、v-navigation-drawer、v-container/v-row/v-col グリッド、レスポンシブパターン
- reference.md -- 意思決定フレームワーク、コンポーネントのクイックリファレンス、アンチパターン
<philosophy>
哲学
Vuetify は 意見が強く、必要なものがすべて揃った コンポーネントライブラリです。ヘッドレスライブラリとは異なり、Vuetify は完全なデザインシステムを備えたスタイル付きコンポーネントを提供します。その力は、3 つのレイヤーのカスタマイズから生まれます。
- テーマレイヤー --
createVuetify({ theme })を介した色、ダークモード、タイポグラフィ。すべてのコンポーネントが自動的に継承します。 - デフォルトレイヤー --
defaults構成またはv-defaults-providerを介したグローバルまたはスコープされた prop 値。1 行で、すべてのv-btnをvariant="outlined"に変更します。 - SASS レイヤー --
@use 'vuetify/settings'を介したコンパイル時の変数オーバーライド。CSS レベルで border-radius、高さ、フォントファミリーを変更します。
Vuetify 3.x の主な機能:
- 完全な Vue 3 Composition API のサポート
vuetify-loader/vite-plugin-vuetifyを介したツリーシェイカブルコンポーネント- MD3 準拠のための Material Design 3 ブループリント (
md3) - 組み込みのコンポーザブル:
useTheme、useDisplay、useDate、useRules - スコープされた prop のカスケードのための
v-defaults-provider(Vuetify 独自) - CSS ハックなしでコンポーネントを深くカスタマイズするための広範なスロットシステム
- 組み込みの i18n、RTL、およびアクセシビリティ
</philosophy>
<patterns>
コアパターン
パターン 1: プラグインのセットアップ
すべての Vuetify アプリには createVuetify() と app.use() が必要です。プラグインは、テーマ、デフォルト、アイコン、およびロケールをすべてのコンポーネントに提供します。
import { createApp } from "vue";
import { createVuetify } from "vuetify";
const vuetify = createVuetify({
theme: {
defaultTheme: "light",
themes: {
light: {
colors: {
primary: "#1867C0",
secondary: "#5CBBF6",
},
},
},
},
defaults: {
VBtn: { variant: "flat", rounded: "lg" },
VTextField: { variant: "outlined", density: "comfortable" },
VCard: { elevation: 2, rounded: "lg" },
},
});
const app = createApp(App);
app.use(vuetify);
app.mount("#app");
良い点: 単一の設定ポイント、すべてのコンポーネントがテーマとデフォルトの props を継承、ツリーシェイカブル
ブループリント、SASS 変数、TypeScript 拡張、および SSR のセットアップについては、examples/core.md を参照してください。
パターン 2: テーマとダークモード
createVuetify で複数のテーマを定義し、useTheme で切り替えます。Vuetify は各テーマの CSS 変数を生成します。
<script setup>
import { useTheme } from "vuetify";
const theme = useTheme();
function toggleTheme() {
theme.global.name.value = theme.global.current.value.dark ? "light" : "dark";
}
</script>
<template>
<v-btn @click="toggleTheme" icon="mdi-brightness-6 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Vuetify Patterns
Quick Guide: Vuetify provides 80+ pre-styled Vue 3 components implementing Material Design. Configure with
createVuetify()-- setthemefor colors,defaultsfor global component props, andblueprint: md3for MD3 compliance. Usev-defaults-providerfor scoped prop overrides. Customize at the SASS level with@use 'vuetify/settings'for compile-time changes. Current: v3.8.x --useRulescomposable for form validation, date picker improvements, performance optimizations. Vuetify is template-driven -- prefer declarative props/slots over imperative JS.
<critical_requirements>
CRITICAL: Before Using This Skill
All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering,
import type, named constants)
(You MUST install and register Vuetify as a Vue plugin via app.use(vuetify) -- components will not render without the plugin)
(You MUST use the defaults system in createVuetify() or v-defaults-provider for consistent component props -- never repeat the same prop on every instance)
(You MUST use named slots (v-slot:item.<key>, v-slot:prepend) for component customization -- not wrapper divs with manual styling)
(You MUST define v-data-table headers and column arrays outside the component -- inline arrays cause re-renders on every parent update)
</critical_requirements>
Auto-detection: Vuetify, vuetify, createVuetify, v-btn, v-card, v-data-table, v-text-field, v-select, v-autocomplete, v-dialog, v-navigation-drawer, v-app-bar, v-toolbar, v-chip, v-snackbar, v-form, v-defaults-provider, v-theme-provider, useTheme, useDisplay, useDate, useRules, mdi, @mdi/font, vuetify/blueprints, vuetify/settings, vuetify/styles
When to use:
- Building Vue 3 applications with pre-styled Material Design components
- Rapid development of admin dashboards, data tables, and CRUD interfaces
- Projects that benefit from a comprehensive defaults/theming system
- Applications requiring built-in accessibility, RTL, and i18n support
When NOT to use:
- Non-Vue projects (Vuetify is Vue-only)
- Projects requiring a non-Material Design aesthetic without heavy customization
- Minimal bundle size is critical and only a few components are needed (consider a headless library)
- Projects using Vue 2 (Vuetify 3 requires Vue 3)
Key patterns covered:
- Plugin setup with
createVuetify(), themes, and blueprints - Global defaults and scoped defaults with
v-defaults-provider - SASS variable customization at compile time
- Slot-based component customization
- Data tables with sorting, filtering, pagination, and custom column rendering
- Form validation with rules arrays and
useRulescomposable - Theme toggling and
useTheme/useDisplaycomposables
Detailed Resources:
- examples/core.md -- Plugin setup, theming, defaults, SASS variables, blueprints, TypeScript, composables
- examples/data-tables.md -- v-data-table headers, slots, sorting, filtering, pagination, server-side
- examples/forms.md -- v-form, validation rules, useRules, input components, custom validation
- examples/layout.md -- v-app, v-app-bar, v-navigation-drawer, v-container/v-row/v-col grid, responsive patterns
- reference.md -- Decision frameworks, component quick reference, anti-patterns
<philosophy>
Philosophy
Vuetify is an opinionated, batteries-included component library. Unlike headless libraries, Vuetify ships styled components with a complete design system. Its power comes from three layers of customization:
- Theme layer -- colors, dark mode, typography via
createVuetify({ theme }). All components inherit automatically. - Defaults layer -- global or scoped prop values via
defaultsconfig orv-defaults-provider. Change everyv-btntovariant="outlined"in one line. - SASS layer -- compile-time variable overrides via
@use 'vuetify/settings'. Changes border-radius, heights, font families at the CSS level.
Vuetify 3.x key features:
- Full Vue 3 Composition API support
- Tree-shakeable components via
vuetify-loader/vite-plugin-vuetify - Material Design 3 blueprint (
md3) for MD3 compliance - Built-in composables:
useTheme,useDisplay,useDate,useRules v-defaults-providerfor scoped prop cascading (unique to Vuetify)- Extensive slot system for deep component customization without CSS hacks
- Built-in i18n, RTL, and accessibility
</philosophy>
<patterns>
Core Patterns
Pattern 1: Plugin Setup
Every Vuetify app requires createVuetify() and app.use(). The plugin provides the theme, defaults, icons, and locale to all components.
import { createApp } from "vue";
import { createVuetify } from "vuetify";
const vuetify = createVuetify({
theme: {
defaultTheme: "light",
themes: {
light: {
colors: {
primary: "#1867C0",
secondary: "#5CBBF6",
},
},
},
},
defaults: {
VBtn: { variant: "flat", rounded: "lg" },
VTextField: { variant: "outlined", density: "comfortable" },
VCard: { elevation: 2, rounded: "lg" },
},
});
const app = createApp(App);
app.use(vuetify);
app.mount("#app");
Why good: single configuration point, all components inherit theme and default props, tree-shakeable
For blueprints, SASS variables, TypeScript augmentation, and SSR setup, see examples/core.md.
Pattern 2: Theming and Dark Mode
Define multiple themes in createVuetify and toggle with useTheme. Vuetify generates CSS variables for each theme.
<script setup>
import { useTheme } from "vuetify";
const theme = useTheme();
function toggleTheme() {
theme.global.name.value = theme.global.current.value.dark ? "light" : "dark";
}
</script>
<template>
<v-btn @click="toggleTheme" icon="mdi-brightness-6" />
</template>
Why good: reactive theme switching, CSS variables prevent flash of wrong theme, custom themes can extend built-in ones
For custom theme creation and color variations, see examples/core.md.
Pattern 3: Global Defaults and Scoped Defaults
The defaults system is Vuetify's most powerful consistency tool. Set props globally in createVuetify() or scope them with v-defaults-provider.
<template>
<!-- All buttons inside this provider get these defaults -->
<v-defaults-provider
:defaults="{
VBtn: { color: 'secondary', variant: 'tonal' },
VCard: { elevation: 0, border: true },
}"
>
<v-card>
<v-card-text>
<!-- This button is tonal + secondary without explicit props -->
<v-btn>Scoped Default</v-btn>
</v-card-text>
</v-card>
</v-defaults-provider>
</template>
Why good: eliminates prop repetition, section-specific styling without CSS, nests and cascades like CSS scoping
Pattern 4: Slot-Based Component Customization
Vuetify components expose named slots for every internal element. Use v-slot to replace or augment internal rendering.
<template>
<v-text-field label="Amount" type="number">
<template v-slot:prepend-inner>
<v-icon>mdi-currency-usd</v-icon>
</template>
<template v-slot:append-inner>
<v-chip size="x-small" color="success">.00</v-chip>
</template>
</v-text-field>
</template>
Why good: customizes internal elements without CSS overrides, type-safe slot props, preserves component behavior
For data table column slots, see examples/data-tables.md.
Pattern 5: Data Table Overview
v-data-table handles sorting, pagination, filtering, and selection. Define headers outside the template, use v-slot:item.<key> for custom column rendering.
<script setup>
const headers = [
{ title: "Name", key: "name" },
{ title: "Status", key: "status" },
{ title: "Actions", key: "actions", sortable: false },
];
</script>
<template>
<v-data-table :items="items" :headers="headers">
<template v-slot:item.status="{ item }">
<v-chip
:color="item.status === 'active' ? 'success' : 'error'"
size="small"
>
{{ item.status }}
</v-chip>
</template>
<template v-slot:item.actions="{ item }">
<v-icon size="small" @click="edit(item)">mdi-pencil</v-icon>
</template>
</v-data-table>
</template>
Why good: headers array is stable (no re-render), slot customization per column, built-in sort/filter/paginate
For server-side data tables, expandable rows, and search, see examples/data-tables.md.
Pattern 6: Form Validation
Vuetify forms use :rules arrays on inputs. Each rule is a function returning true or an error string. The useRules composable (v3.8+) provides common validators.
<script setup>
import { ref } from "vue";
import { useRules } from "vuetify/labs/rules";
const form = ref(null);
const email = ref("");
const rules = useRules();
async function submit(event: SubmitEvent) {
const { valid } = await form.value.validate();
if (!valid) return;
// proceed with submission
}
</script>
<template>
<v-form ref="form" validate-on="submit" @submit.prevent="submit">
<v-text-field
v-model="email"
label="Email"
:rules="[rules.required(), rules.email()]"
/>
<v-btn type="submit" color="primary">Submit</v-btn>
</v-form>
</template>
Why good: declarative validation, useRules eliminates boilerplate rule functions, validate-on controls timing
For custom rules, multi-field validation, and input types, see examples/forms.md.
Pattern 7: Responsive Design with useDisplay
The useDisplay composable provides reactive breakpoint state. Use it for logic-driven responsive behavior (template responsiveness uses Vuetify's grid props).
<script setup>
import { useDisplay } from "vuetify";
const { mobile, mdAndUp, name } = useDisplay();
</script>
<template>
<v-navigation-drawer v-if="mdAndUp" permanent />
<v-navigation-drawer v-else v-model="drawer" temporary />
<v-app-bar :density="mobile ? 'compact' : 'default'" />
</template>
Why good: reactive breakpoint booleans, avoids CSS media query duplication in script, matches Vuetify's breakpoint system
</patterns>
<performance>
Performance
Tree-Shaking
Use vite-plugin-vuetify (Vite) or webpack-plugin-vuetify (Webpack) for automatic tree-shaking. Only imported components are bundled.
// vite.config.ts
import vuetify from "vite-plugin-vuetify";
export default {
plugins: [vuetify({ autoImport: true })],
};
Without the plugin, import vuetify/components and vuetify/directives to include everything (larger bundle).
Stable References
// GOOD: headers defined outside component
const headers: DataTableHeader[] = [{ title: "Name", key: "name" }];
// BAD: inline array recreated every render
// <v-data-table :headers="[{ title: 'Name', key: 'name' }]" />
SASS Variable Customization vs Runtime Theming
Need to change at runtime? --> Use theme colors in createVuetify()
Need compile-time CSS changes? --> Use SASS variables (@use 'vuetify/settings')
Need per-section prop defaults? --> Use v-defaults-provider (zero CSS cost)
</performance>
<red_flags>
RED FLAGS
High Priority Issues:
- Missing
app.use(vuetify)-- components render as empty custom elements without the plugin - Inline header/column arrays on
v-data-table-- causes full table re-render on every parent update - Using
this.$vuetifyin Composition API -- useuseTheme(),useDisplay(),useDate()composables instead - Importing
vuetify/componentsandvuetify/directiveswhenvite-plugin-vuetifyis available -- negates tree-shaking
Medium Priority Issues:
- Setting
variant,density,roundedon every component instance -- usedefaultsincreateVuetify()instead - Wrapping Vuetify components in extra divs for styling -- use the component's own props/slots/classes
- Hardcoding colors (
#1867C0) in templates instead of using theme colors (color="primary") - Using
v-ifto toggle dialogs/drawers instead ofv-model-- loses transition animations and internal state
Common Mistakes:
- Forgetting
import 'vuetify/styles'when not using the build plugin -- no styles load at all - Using CSS
!importantto override Vuetify styles -- use SASS variables orclassprop with higher specificity - Not setting
validate-ononv-form-- defaults toinputwhich validates on every keystroke (use"submit"or"blur lazy"for better UX) - Placing
v-colwithout a parentv-rowinsidev-container-- grid system requires the full nesting
Gotchas & Edge Cases:
densityaccepts"default","comfortable","compact"-- it is NOT a numeric valuev-data-table-serveris a separate component for server-side pagination -- do not usev-data-tablewith manual paginationv-defaults-providercascades -- nested providers merge with parent, later values winuseDisplaybreakpoints differ from CSS breakpoints in default config (xs: 0, sm: 600, md: 960, lg: 1280, xl: 1920, xxl: 2560)- Theme
variationsgenerate-lighten-Nand-darken-Ncolor variants automatically -- do not manually define them v-modelonv-dialogcontrols visibility -- do not usevalueprop (Vue 3v-modelreplaces.sync)- SASS variables require the Vite/Webpack plugin with
styles.configFilepointing to your settings file
</red_flags>
<critical_reminders>
CRITICAL REMINDERS
All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering,
import type, named constants)
(You MUST install and register Vuetify as a Vue plugin via app.use(vuetify) -- components will not render without the plugin)
(You MUST use the defaults system in createVuetify() or v-defaults-provider for consistent component props -- never repeat the same prop on every instance)
(You MUST use named slots (v-slot:item.<key>, v-slot:prepend) for component customization -- not wrapper divs with manual styling)
(You MUST define v-data-table headers and column arrays outside the component -- inline arrays cause re-renders on every parent update)
Failure to follow these rules will produce unstyled components, unnecessary re-renders, and inconsistent UI.
</critical_reminders>