mcpField
C
clerk-nuxt-patterns

clerk-nuxt-patterns

github.com/midudev開発7.0k57 回インストール1 週間前に更新
リポジトリ

clerk-nuxt-patterns について

clerk-nuxt-patternsは、NuxtプロジェクトにClerkを組み込む開発者向けのスキルです。ルート保護、Nitroサーバールート、コンポーザブル、SSR認証を扱い、モジュールの自動設定とサーバー・クライアントでの認証状態の使い分けを説明します。

主な機能

  1. 01Nuxtルートの保護
  2. 02Nitroルートでの認証処理
  3. 03認証コンポーザブルの利用
  4. 04SSRとクライアント認証パターンの説明
  5. 05モジュールの自動設定の説明

活用シーン

  1. 01Nuxtページルートへのアクセスを制限
  2. 02Nitro APIルートで認証情報を参照
  3. 03コンポーネントでユーザーと認証状態を利用
  4. 04SSRのハイドレーションや環境変数の問題を調査

インストール

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

$npx skills add https://github.com/midudev/autoskills --skill clerk-nuxt-patterns

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

同梱ファイル

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

evals/
evals.json
references/
composables.md
nuxt-middleware.md
server-api-routes.md
ssr-auth.md
templates/nuxt-basic-auth/
app.vue
nuxt.config.ts
package.json

詳細

Nuxt のパターン

必要な情報は?

タスクリファレンス
ミドルウェアでルートを保護するreferences/nuxt-middleware.md
サーバー API ルート(Nitro)での認証references/server-api-routes.md
コンポーネントでの useAuth / useUserreferences/composables.md
SSR に対応した認証パターンreferences/ssr-auth.md

リファレンス

リファレンス説明
references/nuxt-middleware.mdルート保護、clerkMiddleware()
references/server-api-routes.mdNitro サーバールートの認証
references/composables.mduseAuth、useUser、useClerk
references/ssr-auth.mdSSR のハイドレーション、サーバーとクライアント

セットアップ

npm install @clerk/nuxt

.env:

NUXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
NUXT_CLERK_SECRET_KEY=sk_...

nuxt.config.ts:

export default defineNuxtConfig({
  modules: ['@clerk/nuxt'],
})

この1行で、ミドルウェア、プラグイン、コンポーネントの自動インポートが自動設定されます。

基本的な考え方

@clerk/nuxt はすべての Clerk コンポーネントとコンポーザブルを自動インポートするため、<script setup> で明示的にインポートする必要はありません。

  • コンポーザブル(useAuth、useUser)— クライアント側でリアクティブに動作し、<script setup> 内で使用します
  • サーバールート(clerkClient)— Nitro のサーバールートで使用し、event.context.auth を使います
  • ミドルウェア(clerkMiddleware)— 自動登録されます。ルートを保護するには auth().protect() を使います

最小限のパターン


<script setup lang="ts">
definePageMeta({ middleware: 'auth' })
const { userId } = useAuth()
</script>

<template>
  <Show when="signed-in">
    <p>Hello {{ userId }}</p>
  </Show>
</template>

definePageMeta({ middleware: 'auth' }) は、@clerk/nuxt に組み込まれている認証ミドルウェアを使用します。

よくある問題

症状原因対処法
サーバー上でコンポーザブルが undefined を返すuseAuth はクライアント専用ですサーバールートでは event.context.auth を使います
ルートが保護されていないmiddleware: 'auth' メタデータがありませんdefinePageMeta({ middleware: 'auth' }) を追加します
clerkClient が利用できないインポートパスが正しくありません@clerk/nuxt/server からインポートします
ハイドレーションの不一致マウント前に認証状態をレンダリングしています<ClientOnly> で囲むか、isLoaded を確認します
環境変数が読み込まれないプレフィックスが正しくありませんNuxt では、公開用に NUXT_PUBLIC_、サーバー用に NUXT_ が必要です

組織対応パターン

<script setup lang="ts">
const { orgId, orgRole } = useAuth()
</script>

<template>
  <div v-if="orgId">
    <p>Org: {{ orgId }}</p>
    <p v-if="orgRole === 'org:admin'">Admin panel</p>
  </div>
  <div v-else>
    <OrganizationSwitcher />
  </div>
</template>

関連項目

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

ドキュメント

Nuxt SDK

コメント