DEV Community

スシロー
スシロー

Posted on • Edited on

【2026】Auth0 代替 (Clerk/Supabase Auth/WorkOS):料金・移行コストで選ぶ

結論(おすすめ1つ)

ほとんどのSPAおよびNext.jsプロジェクトには Clerk への移行を勧める。

React/Next.js との統合が最も薄く、<SignIn /> コンポーネントを貼るだけで MFA・ソーシャルログイン・セッション管理が揃う。Auth0 で頭を悩ませがちな「テナント設定の複雑さ」と「ルールの負債」を引き継がずに済む。ただし自前 DB に認証データを持ちたい場合は Supabase Auth、エンタープライズ SSO が主目的なら WorkOS を選ぶこと。


比較表(料金/無料枠/移行コスト/対応言語)

項目 Auth0 Clerk Supabase Auth WorkOS
無料枠 公式の料金ページで要確認 公式の料金ページで要確認 公式の料金ページで要確認 公式の料金ページで要確認
有料プラン開始 公式の料金ページで要確認 公式の料金ページで要確認 公式の料金ページで要確認 公式の料金ページで要確認
移行コスト(感覚値) 基準 低〜中(UI層の差し替えが主) 中(DB移行が伴う) 中〜高(SAML/SCIM設定が主)
React SDK あり ファーストクラス あり(@supabase/auth-ui-react あり(@workos-inc/authkit-react
Next.js App Router対応 部分的 ネイティブ対応 手動実装が必要な箇所あり あり
セルフホスト 不可 不可 可(Supabase OSS) 不可
SAML/SCIM 高額プランのみ エンタープライズ向けに提供 限定的 コア機能
ユーザーデータの所在 Auth0テナント Clerkテナント 自前 Postgres WorkOSテナント

移行手順

1. Clerk への移行(Next.js App Router の場合)

パッケージのインストール

npm install @clerk/nextjs
Enter fullscreen mode Exit fullscreen mode

環境変数の設定(.env.local

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxxx
CLERK_SECRET_KEY=sk_test_xxxx
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/dashboard
Enter fullscreen mode Exit fullscreen mode

ルートレイアウトへの組み込み(app/layout.tsx

import { ClerkProvider } from '@clerk/nextjs'

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <ClerkProvider>
      <html lang="ja">
        <body>{children}</body>
      </html>
    </ClerkProvider>
  )
}
Enter fullscreen mode Exit fullscreen mode

ミドルウェアによるルート保護(middleware.ts

import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server'

const isProtectedRoute = createRouteMatcher(['/dashboard(.*)'])

export default clerkMiddleware((auth, req) => {
  if (isProtectedRoute(req)) auth().protect()
})

export const config = {
  matcher: ['/((?!_next|.*\\..*).*)'],
}
Enter fullscreen mode Exit fullscreen mode

既存ユーザーの移行

Auth0 の Management API でユーザーリストを取得し、Clerk の Backend API POST /v1/users でインポートする。パスワードハッシュは Clerk の password_hasher パラメータで bcrypt / argon2 を指定できる。

# Auth0からユーザーエクスポート(Auth0 CLIが必要)
auth0 users export --format json > users.json

# Clerkへの一括インポート(Node.jsスクリプト例)
node scripts/import-to-clerk.mjs
Enter fullscreen mode Exit fullscreen mode

2. Supabase Auth への移行(既存DBがある場合)

npm install @supabase/supabase-js @supabase/auth-ui-react @supabase/auth-ui-shared
Enter fullscreen mode Exit fullscreen mode
// lib/supabase.ts
import { createClient } from '@supabase/supabase-js'

export const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)
Enter fullscreen mode Exit fullscreen mode

Auth0 の sub をユーザーIDとして使っていた箇所は、Supabase の user.id(UUID)へ置換する必要がある。外部キーの張り替えが必要になるため、移行前にスキーマの影響範囲を洗い出すこと。


向き不向き

Clerk が向くケース

  • Next.js / React を中心とした SPA・SSR プロジェクト
  • 少人数チームで認証に工数をかけたくない
  • Auth0 のルール・アクションが複雑化して保守が辛くなってきた
  • B2C プロダクトで MFA・パスキー・ソーシャルログインを素早く揃えたい

Clerk を避けるべきケース

  • データを自社インフラ外に出せない規制業種(医療・金融)
  • セルフホストが必須要件
  • Next.js 以外のフレームワークが中心で SDK サポートが手薄になる

Supabase Auth が向くケース

  • すでに Supabase を DB として使っている、または使う予定がある
  • 認証データを自前 Postgres で管理したい
  • OSS版でセルフホストして完全にコントロールしたい

Supabase Auth を避けるべきケース

  • SAML SSO や SCIM プロビジョニングが必須の B2B SaaS
  • 認証だけ切り出して独立させたい(Supabase の他機能とセット前提の設計になる)

WorkOS が向くケース

  • エンタープライズ顧客向けの B2B SaaS で SAML・SCIM が契約要件になっている
  • Okta / Azure AD / Google Workspace との接続が主目的
  • Auth0 Enterprise プランのコストが重くなってきた大規模チーム

WorkOS を避けるべきケース

  • ユーザー数が少なく SAML が不要な段階(オーバースペック)
  • B2C プロダクト(コア強みが B2B SSO なので恩恵が薄い)
  • 認証 UI を自前で細かく作り込みたいチーム

If you found this useful: I packaged 50 copy-paste AI debugging prompts + drop-in Claude Code config templates (CLAUDE.md, settings.json, MCP) into a small kit.
Launch deal: code START50 = 50% off → 50 AI Debugging Prompts + Claude Code Config Pack (about $6, 50% off applied)
New: my 10-chapter ebook Practical Claude Code — automation & unattended operation (about $9, 50% off applied)

Top comments (0)