mcpField
C
clerk-vue-patterns

clerk-vue-patterns

github.com/clerk開発8914.1k 回インストール今日更新
リポジトリ

clerk-vue-patterns について

Vue 3 で `@clerk/vue` v2 以降を使うコーディングエージェント向けのリファレンススキルです。Clerk のコンポーザブル、Vue Router のガード、Pinia 連携を説明し、Nuxt には別のスキルを案内します。

主な機能

  1. 01認証とユーザーのコンポーザブルを解説
  2. 02組織向けコンポーザブルを網羅
  3. 03Vue Router のナビゲーションガードを案内
  4. 04Pinia の認証状態連携を説明
  5. 05Vue と Nuxt の使い分けを説明

活用シーン

  1. 01Vue でリアクティブなサインイン状態を読む
  2. 02Vue Router のナビゲーションをガード
  3. 03Clerk の認証状態を Pinia に連携

インストール

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

$npx skills add https://github.com/clerk/skills --skill clerk-vue-patterns

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
references/
composables.md
pinia-integration.md
vue-router-guards.md
templates/vue-basic-auth/
index.html
package.json
vite.config.ts
templates/vue-basic-auth/src/
App.vue
main.ts
style.css

詳細

Vue のパターン

SDK:@clerk/vue v2 以降(Vue 3)。Nuxt では clerk-nuxt-patterns を使用してください。

必要な情報を選んでください

タスクリファレンス
コンポーザブル:useAuth、useUser、useOrganizationreferences/composables.md
Vue Router のナビゲーションガードreferences/vue-router-guards.md
認証状態を持つ Pinia ストアreferences/pinia-integration.md

基本的な考え方

Vue では @clerk/vue のコンポーザブルを使用します。

  • useAuth() — リアクティブな isSignedIn、userId、signOut
  • useUser() — リアクティブな user オブジェクト
  • useClerk() — 高度な操作に使用する完全な Clerk インスタンス
  • useOrganization() — リアクティブな organization、membership

セットアップ

Vue(プレーン)
// main.ts
import { clerkPlugin } from '@clerk/vue'
import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)
app.use(clerkPlugin, {
  publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,
})
app.mount('#app')

コンポーザブルの使用方法

<script setup lang="ts">
import { useAuth, useUser } from '@clerk/vue'

const { isSignedIn, userId, signOut } = useAuth()
const { user } = useUser()
</script>

<template>
  <div v-if="isSignedIn">
    <p>Hello {{ user?.firstName }}</p>
    <button @click="signOut()">Sign Out</button>
  </div>
  <SignInButton v-else />
</template>

組織の切り替え

<script setup lang="ts">
import { useOrganizationList } from '@clerk/vue'

const { userMemberships, setActive } = useOrganizationList()
</script>

<template>
  <button
    v-for="mem in userMemberships.data ?? []"
    :key="mem.organization.id"
    @click="setActive({ organization: mem.organization.id })"
  >
    {{ mem.organization.name }}
  </button>
</template>

よくある落とし穴

症状原因修正方法
コンポーザブルが undefined を返すClerkProvider ツリーの外で使用しているapp.use(clerkPlugin, { publishableKey }) が呼び出されていることを確認してください
userId はリアクティブだが更新されない分割代入によってリアクティビティが失われるconst { userId } = useAuth() を使用してください(toRefs スタイルのコンポーザブルで、リアクティブです)

インポート一覧

対象インポート
コンポーザブル@clerk/vue
プラグインのセットアップ@clerk/vue
コンポーネント@clerk/vue

関連項目

  • clerk-setup - Clerk の初期インストール
  • clerk-custom-ui - カスタムフローと外観
  • clerk-orgs - B2B 組織

ドキュメント

コメント