primevue-skilld について
primevue-skilldは、PrimeVue 5.0.1でVue 3の画面を構築する開発者向けのガイドです。設定やテーマ、コンポーネントの組み合わせ方に加え、v5で非推奨となったAPIの代替方法を扱います。
主な機能
- 01Vue 3 UIコンポーネントライブラリーのガイド
- 02プラグイン設定とテーマ構成
- 03コンポーネントとスタイルの個別インポート
- 04複合コンポーネントとサービスの使用法
- 05v5非推奨APIの移行案内
活用シーン
- 01Vue 3プロジェクトでUIコンポーネントを構築
- 02PrimeVueアプリのテーマとプラグインを設定
- 03旧来のコンポーネント記述をv5 APIに置き換え
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ skilld-dev/ vue-ecosystem-skills --skill primevue-skilldインストール後、Claude Code で/primevue-skilldを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/components.mdsetup.mdv5-changes.md詳細
PrimeVue([email protected])
バージョン 5.0.1、準備済みソース input/source/package.json。Vue 3 向け UI コンポーネントライブラリです。
ドキュメント:https://primevue.dev(コンポーネントのページは https://primevue.dev/<name> にあります。例:https://primevue.dev/inputtags/)。
v5 の重要な情報
- ライセンスキーが必要です。 v5 は PrimeUI デュアルライセンス(無料の Community または有料の Commercial)で提供されています。プラグインのインストール時に、
license文字列オプションとしてキーを渡してください。検証はオフラインで行われます。キーがない場合、無効な場合、または期限切れの場合は、ライセンス通知が表示されることがあります(input/source/LICENSE.md)。 - v4 からの公開 API の破壊的変更はありません。 公式移行ガイド(https://primevue.dev/migration/v5/)によると、v4 で非推奨となった API は v5 でも引き続き動作し、v6 で削除されます。新しいコードでは、v5 changes に記載されている置き換え先を使用してください。
- ルートフォントの基準サイズは 16px です。 v5 はドキュメントのルートを 16px と想定します。v4 では 14px を想定していました。すべてのプリセットに、14px レイアウト用の
-compatバリアントが用意されており、2027 年 6 月まで保守されます(https://primevue.dev/theming/styled/)。 - 設定プラグイン。
app.useで一度インストールします。primevue/configのデフォルトエクスポートは、パッケージのルートからConfigとしても再エクスポートされています(input/source/index.mjs:139)。
セットアップ
// main.js
import { createApp } from 'vue';
import PrimeVue from 'primevue/config'; // or: import { Config } from 'primevue'
import Aura from '@primeuix/themes/aura';
import App from './App.vue';
const app = createApp(App);
app.use(PrimeVue, {
license: '<your PrimeUI license key>',
ripple: true, // optional, disabled by default
theme: {
preset: Aura,
options: {
darkModeSelector: '.app-dark' // default is 'system'
}
}
});
詳細:テーマオプション、ロケール、unstyled モード、Nuxt モジュール、自動インポートについては setup を参照してください。
インポートパターン
<script setup>
// Tree-shakeable subpath imports (package.json exports map "./*")
import Button from 'primevue/button';
import Select from 'primevue/select';
// Style classes for a component (design token CSS)
import SelectStyle from 'primevue/select/style';
</script>
from 'primevue'でのルートインポートも使用でき、すべてのコンポーネント、スタイル、サービス、コンポーザブルがエクスポートされます(input/source/index.mjs)。- アイコン:SVG アイコンコンポーネントは
@primeicons/vueからインポートします(input/source/package.jsonの依存関係^8.0.0)。@primevue/iconsパッケージは v5 で非推奨になりました。
基本ルール
- 新しいコードで非推奨のコンポーネントを使用しないでください。 v5 で非推奨(v6 で削除):
MultiSelect、Galleria、Image、ColorPicker、ImageCompare、ScrollPanel、Password、InputMask(コンポーネント)、PanelMenu、Chart、Editor、multipleを指定したAutoComplete、valueで制御するCarousel、scrollableを指定したTabs。置き換え先は v5 changes の表を参照してください。 - ボタンのコンテンツはデフォルトスロットで構成します。
label、icon、iconPos、iconClass、badge、badgeClass、badgeSeverity、loading、loadingIconの各 props は v5.0.0 以降、すべて非推奨です(input/source/button/index.d.ts)。 - props 主導のテンプレートより複合コンポーネントを使用してください:
Tabs/TabList/Tab/TabPanels/TabPanel、Accordion/AccordionPanel/AccordionHeader/AccordionContent、Stepper ファミリー、Sidebar ファミリー、Gallery ファミリー、Carousel ファミリー。アクティブ状態はv-model:valueでバインドします(Accordion のactiveIndexprop とイベントは v5 で削除されました)。 - オーバーレイは Teleport ベースです:
appendTo="body"(デフォルト)または"self"を設定してください。ほとんどのオーバーレイコンポーネントはoverlayStyle/overlayClassを受け付けます(panel* props は v5 で削除されました)。 - CSS の上書きよりデザイントークンを優先してください:
:deep()やスタイルクラスの代わりに、スコープ付きトークンにはdtprop を使用し、プリセットのカスタマイズにはdefinePresetを使用してください(https://primevue.dev/theming/styled/)。
よくあるタスク
Button(スロットによる構成)
<Button severity="contrast" size="small">
<i class="pi pi-check" />
<span>Confirm</span>
<Badge value="2" />
</Button>
スロット内のアイコンの順序で iconPos を置き換えます。loading の代わりに disabled と独自のスピナーを使用してください。
複数選択(MultiSelect の置き換え)
<Select v-model="selectedCities" multiple :options="cities" optionLabel="name" fluid />
Select の multiple(「指定すると、複数の値を選択できます」、input/source/select/index.d.ts)。
タグ入力(AutoComplete multiple の置き換え)
<InputTags v-model="tags" typeahead :suggestions="suggestions" @complete="search" delimiter="," />
主な props:max、allowDuplicate、addOnBlur、addOnPaste、addOnTab、delimiter(文字列または RegExp)。add、remove、option-select、complete を emit します(input/source/inputtags/index.d.ts)。
Toast サービス
// main.js: app.use(ToastService)
import { useToast } from 'primevue/usetoast';
const toast = useToast();
toast.add({ severity: 'info', summary: 'Saved', life: 3000 });
サービスのメソッド:add、remove、removeGroup、removeAllGroups(input/source/toastservice/index.d.ts)。ConfirmationService + useConfirm と DialogService + useDialog(動的ダイアログ)も同じパターンです。
マスクディレクティブ(InputMask コンポーネントの置き換え)
<InputText v-mask="{ mask: '99-9999', unmask: true }" v-model="value" />
オプション:mask、slotChar(デフォルトは _)、autoClear(デフォルトは true)、unmask、{ value, rawValue } を受け取る onChange(input/source/mask/index.d.ts)。
アプリのサイドバー(複合コンポーネント)
<SidebarLayout>
<SidebarAside>
<SidebarHeader>…</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarGroupLabel>Admin</SidebarGroupLabel>
<SidebarGroupContent>
<SidebarMenu>
<SidebarMenuItem><SidebarMenuButton>Users</SidebarMenuButton></SidebarMenuItem>
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>…</SidebarFooter>
</SidebarAside>
<SidebarMain><RouterView /></SidebarMain>
</SidebarLayout>
SidebarLayout 内の Sidebar には一意の id が必要です。side、variant(sidebar|floating|inset)、collapsible(offcanvas|icon|none)、v-model:open、openOnHover、overlay、width に対応しています(input/source/sidebar/index.d.ts)。すべてのパーツの一覧はコンポーネントを参照してください。
フォームフィールド
FloatLabel、IftaLabel(フィールド内ラベル)、または通常のLabelを使用します。- 各フィールドに
fluidを指定する代わりに、全幅の入力欄にする領域を<Fluid>で囲みます。 - 任意の入力コンポーネントの
invalidプロパティでエラースタイルを適用できます。検証状態は@primevue/forms(別パッケージ、https://primevue.dev/forms/)で管理します。
DataTable のパフォーマンス
dataKey を設定した場合、大規模なデータで O(1) の検索を行うには、expandedRows に行オブジェクトの配列ではなくオブジェクト({ '1004': true })をバインドします(公式 DataTable ドキュメント)。stateStorage と stateKey を使用すると、ユーザー設定を保持できます。
参考資料
- セットアップと設定:インストール、ライセンス、テーマプリセット、ダークモード、ロケール、スタイルなしモード、Nuxt。
- v5 の変更点と移行:置き換え先を含む非推奨化および削除の一覧。
- コンポーネントと置き換え先:複合コンポーネントのファミリー、v5 の新しいコンポーネント、サービス、ユーティリティ。