スキル一覧に戻る
pluginagentmarketplace

vue-pinia

by pluginagentmarketplace

Vue Development Plugin

1🍴 0📅 2026年1月7日
GitHubで見るManusで実行

SKILL.md


name: vue-pinia description: Master Pinia State Management - Stores, Actions, Getters, Plugins, Persistence sasmp_version: "1.3.0" bonded_agent: 03-vue-pinia bond_type: PRIMARY_BOND version: "2.0.0" last_updated: "2025-01"

Vue Pinia Skill

Production-grade skill for mastering Pinia state management in Vue applications.

Purpose

Single Responsibility: Teach scalable state management patterns with Pinia including store design, actions, getters, plugins, and persistence strategies.

Parameter Schema

interface PiniaParams {
  topic: 'stores' | 'actions' | 'getters' | 'plugins' | 'persistence' | 'all';
  level: 'beginner' | 'intermediate' | 'advanced';
  context?: {
    app_size?: 'small' | 'medium' | 'large';
    existing_state?: string[];
  };
}

Learning Modules

Module 1: Store Fundamentals

Prerequisites: vue-composition-api
Duration: 2-3 hours
Outcome: Create and use Pinia stores
TopicConceptExercise
SetupInstall and configureApp setup
defineStoreCreate storesCounter store
StateReactive stateUser store
Using storesstoreToRefsComponent access

Store Syntax Comparison:

// Options Store
defineStore('counter', {
  state: () => ({ count: 0 }),
  getters: { double: (s) => s.count * 2 },
  actions: { increment() { this.count++ } }
})

// Setup Store (Recommended)
defineStore('counter', () => {
  const count = ref(0)
  const double = computed(() => count.value * 2)
  function increment() { count.value++ }
  return { count, double, increment }
})

Module 2: Actions & Async

Prerequisites: Module 1
Duration: 2-3 hours
Outcome: Handle async operations
PatternUse CaseExercise
Sync actionsSimple mutationsCart updates
Async actionsAPI callsFetch users
Error handlingTry/catchError states
Loading statesUX feedbackSpinners
Optimistic updatesFast UXInstant feedback

Module 3: Getters & Computed

Prerequisites: Module 2
Duration: 1-2 hours
Outcome: Derive and filter state
PatternUse CaseExercise
Simple getterDerived valueFull name
ParameterizedFiltered accessFind by ID
Cross-storeCompose storesCart with products
MemoizationPerformanceExpensive calcs

Module 4: Store Architecture

Prerequisites: Modules 1-3
Duration: 3-4 hours
Outcome: Design scalable store structure

Architecture Patterns:

stores/
├── modules/
│   ├── useUserStore.ts      # User domain
│   ├── useProductStore.ts   # Product domain
│   └── useCartStore.ts      # Cart domain
├── shared/
│   └── useNotificationStore.ts
└── index.ts                  # Re-exports
PatternDescriptionWhen to Use
Domain storesOne per featureLarge apps
Composed storesStore uses storeRelated data
Normalized stateID-based lookupMany entities
Module patternOrganized exportsTeam projects

Module 5: Plugins & Persistence

Prerequisites: Modules 1-4
Duration: 2-3 hours
Outcome: Extend Pinia functionality
PluginFunctionExercise
LoggerDev debuggingAction logging
Persisted StateLocalStorageAuth persistence
ResetState resetLogout cleanup
CustomDomain-specificAnalytics

Validation Checkpoints

Beginner Checkpoint

  • Create basic store with state
  • Use storeToRefs in component
  • Implement simple action
  • Access getter value

Intermediate Checkpoint

  • Build async action with loading/error
  • Create parameterized getter
  • Compose two stores together
  • Add persistence plugin

Advanced Checkpoint

  • Design normalized store structure
  • Implement optimistic updates
  • Create custom plugin
  • Test stores in isolation

Retry Logic

const skillConfig = {
  maxAttempts: 3,
  backoffMs: [1000, 2000, 4000],
  onFailure: 'simplify_store_design'
}

Observability

tracking:
  - event: store_created
    data: [store_name, store_type]
  - event: pattern_applied
    data: [pattern_name, success]
  - event: skill_completed
    data: [stores_built, complexity]

Troubleshooting

Common Issues

IssueCauseSolution
Store not reactiveDestructured stateUse storeToRefs()
Circular dependencyA→B→A importsLazy import or reorganize
No active PiniaUsed before app.useCheck setup order
HMR not workingMissing acceptHMRUpdateAdd HMR config

Debug Steps

  1. Check Pinia devtools for state
  2. Verify store ID is unique
  3. Confirm pinia plugin is installed
  4. Check for circular store imports

Unit Test Template

import { describe, it, expect, beforeEach } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
import { useUserStore } from './useUserStore'

describe('useUserStore', () => {
  beforeEach(() => {
    setActivePinia(createPinia())
  })

  it('initializes with null user', () => {
    const store = useUserStore()
    expect(store.user).toBeNull()
  })

  it('logs in user correctly', async () => {
    const store = useUserStore()
    await store.login({ email: 'test@example.com' })
    expect(store.isLoggedIn).toBe(true)
  })

  it('logs out and clears state', () => {
    const store = useUserStore()
    store.$patch({ user: { id: '1', name: 'Test' } })
    store.logout()
    expect(store.user).toBeNull()
  })
})

Usage

Skill("vue-pinia")
  • vue-composition-api - Prerequisite
  • vue-typescript - Typed stores
  • vue-testing - Store testing

Resources

スコア

総合スコア

60/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です