betterauth-tanstack-convex について
betterauth-tanstack-convex は、Convex と TanStack Start に Better Auth を導入するための開発者向けスキルです。インストールから SSR 対応認証、認証付きサーバー関数までの設定を説明します。
主な機能
- 01Better Auth と Convex の設定
- 02TanStack Start 認証の構成
- 03SSR 対応認証フロー
- 04認証付きサーバー関数の追加
- 05ファイル構成と設定の参照
活用シーン
- 01新規プロジェクトへの認証導入
- 02Better Auth 設定問題の調査
- 03登録・ログイン・ログアウトの実装
- 04SSR 認証とサーバー関数の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sstobo/ convex-skills --skill betterauth-tanstack-convexインストール後、Claude Code で/betterauth-tanstack-convexを入力して読み込まれたか確認します。
同梱ファイルreferences/setup-guide.md
詳細
Better Auth + Convex + TanStack Start
概要
このスキルでは、Better Auth による認証を Convex バックエンドおよび TanStack Start フレームワークと統合する方法を説明します。インストールから SSR に対応した認証フローまで、セットアップの全手順を取り上げます。
このスキルを使用する場面
- 新しい Convex + TanStack Start プロジェクトで認証をセットアップする場合
- Better Auth の設定に関する問題をトラブルシューティングする場合
- サインアップ、サインイン、サインアウトのフローを実装する場合
expectAuth: trueを使用して SSR 認証を設定する場合- 認証が必要なサーバー関数を追加する場合
- 認証プロバイダーの階層を理解する場合
クイックリファレンス
必須パッケージ
npm install convex@latest @convex-dev/better-auth
npm install [email protected] --save-exact
npm install @types/node --save-dev
環境変数
Convex デプロイメント(CLI 経由):
npx convex env set BETTER_AUTH_SECRET=$(openssl rand -base64 32)
npx convex env set SITE_URL http://localhost:3000
.env.local:
CONVEX_DEPLOYMENT=dev:adjective-animal-123
VITE_CONVEX_URL=https://adjective-animal-123.convex.cloud
VITE_CONVEX_SITE_URL=https://adjective-animal-123.convex.site
VITE_SITE_URL=http://localhost:3000
ファイル構成
| ファイル | 用途 |
|---|---|
convex/convex.config.ts | Better Auth コンポーネントを登録します |
convex/auth.config.ts | 認証プロバイダーを設定します |
convex/auth.ts | Better Auth インスタンスと authComponent を作成します |
convex/http.ts | 認証用 HTTP ルートを登録します |
src/lib/auth-client.ts | クライアント側の認証ユーティリティ |
src/lib/auth-server.ts | サーバー側の認証ユーティリティ |
src/routes/api/auth/$.ts | 認証リクエストを Convex にプロキシします |
src/routes/__root.tsx | 認証プロバイダーのラッパーと SSR トークン |
必須インポート
// Client-side
import { authClient } from '~/lib/auth-client'
// Server-side
import { getToken, fetchAuthQuery, fetchAuthMutation } from '~/lib/auth-server'
// Backend
import { authComponent, createAuth } from './auth'
認証チェック(バックエンド)
const user = await authComponent.getAuthUser(ctx)
if (!user) throw new Error("Not authenticated")
expectAuth を使用したサインアウト
expectAuth: true を使用する場合は、サインアウト後にページを再読み込みしてください。
await authClient.signOut({
fetchOptions: {
onSuccess: () => location.reload(),
},
})
重要な設定
Vite SSR バンドル
モジュール解決の問題を避けるため、vite.config.ts で次の設定が必要です。
ssr: {
noExternal: ['@convex-dev/better-auth'],
}
expectAuth を使用した ConvexQueryClient
シームレスな SSR 認証に必要です。
const convexQueryClient = new ConvexQueryClient(convexUrl, {
expectAuth: true,
})
プロバイダーの階層
ルートコンポーネントでは、次の順序で子要素をラップする必要があります。
ConvexBetterAuthProvider(最外層)QueryClientProvider<Outlet />を含むRootDocument
リファレンスファイル
認証を実装する際は、詳細なセットアップガイドを参照してください。
| ファイル | 使用する場面 |
|---|---|
references/setup-guide.md | インストールと設定の全手順 |
コメント
Markdown 対応