mcpField
B
better-auth-scaffold

better-auth-scaffold

github.com/pproencaセキュリティ218133 回インストール11 週間前に更新
リポジトリ

better-auth-scaffold について

Drizzle を使う Next.js App Router プロジェクトに Better Auth を導入するテンプレートスキルです。認証プリセットに応じたファイルを生成し、スキーマ生成とマイグレーションの手順を案内します。

主な機能

  1. 01パラメーター対応の認証テンプレート
  2. 02minimal、social、advanced のプリセット
  3. 03サーバー・クライアント・ルート・ミドルウェアのファイル
  4. 04Drizzle スキーマとクライアントのテンプレート
  5. 05生成・マイグレーションコマンドの案内

活用シーン

  1. 01Next.js プロジェクトへの認証設定
  2. 02Next.js と Drizzle への Better Auth 導入
  3. 03ソーシャルまたは高度な設定の生成
  4. 04既存の認証設定に不足する要素の補完

インストール

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

$npx skills add https://github.com/pproenca/dot-skills --skill better-auth-scaffold

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

同梱ファイル

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

config.json
gotchas.md
metadata.json
assets/templates/
auth-client.ts.template
auth.ts.template
db-index.ts.template
db-schema-better-auth.ts.template
email.ts.template
env.template
middleware.ts.template
permissions.ts.template
route.ts.template
sign-in-page.tsx.template
references/
conventions.md

詳細

Better Auth スキャフォールド(Next.js + Drizzle)

Drizzle アダプターを使用して Next.js App Router プロジェクトに Better Auth のセットアップを構築するための、パラメーター指定可能なテンプレートです。各テンプレートでは、references/conventions.md に記載されている規約(ファイル構成、プラグインの順序、環境変数の扱い、ランタイムの選択)に従います。

適用するタイミング

以下の場合に、これらのテンプレートを参照してください。

  • 認証が必要な新しい Next.js プロジェクトを開始するとき
  • 既存の Next.js + Drizzle コードベースに Better Auth を追加するとき
  • キャッチオールルート、ミドルウェア、または nextCookies() の順序が不足している、不完全な Better Auth セットアップをリファクタリングするとき
  • 既存のプロジェクトに機能ごとのバリエーション(minimal、social、advanced)を追加するとき

セットアップ

必須パラメーター
パラメーター必須デフォルト説明
presetいいえminimalminimal(メール+パスワード)| social(Google + GitHub を追加)| advanced(social + twoFactor + magicLink)
db_providerはい—pg | mysql | sqlite(Drizzle プロバイダー)
app_nameはい—表示名(preset=advanced の場合、認証アプリで2FAの発行者名として使用されます)
任意のパラメーター
パラメーターデフォルト説明
auth_pathlib/auth.tsサーバー認証モジュールのパス
client_pathlib/auth-client.tsクライアントモジュールのパス
api_route_pathapp/api/auth/[...all]/route.tsキャッチオールルートハンドラーのパス
protected_paths["/dashboard"]ミドルウェアで保護するルート

config.json がすでに存在し、値が設定されている場合は、その値を使用します。それ以外の場合は、ユーザーに確認します。

利用可能なテンプレート

テンプレート出力ファイル出力するタイミング
auth.ts.templatelib/auth.ts常に
auth-client.ts.templatelib/auth-client.ts常に
route.ts.templateapp/api/auth/[...all]/route.ts常に
middleware.ts.templatemiddleware.tsprotected_paths が空でない場合
env.template.env.example常に
db-schema-better-auth.ts.templatedb/schema/auth.ts常に(スタブ — better-auth generate の出力に置き換えてください)
db-index.ts.templatedb/index.tsプロジェクトに Drizzle クライアントがまだない場合
email.ts.templatelib/email.tspreset=advanced の場合(ファイルがまだ存在しない場合)
sign-in-page.tsx.templateapp/sign-in/page.tsxプロジェクトにサインインページがない場合(ミドルウェアのリダイレクトループを解消します)
permissions.ts.templatelib/permissions.tsorg/admin プラグイン作業用の任意のスターター

使用方法

  1. パラメーターを解決します。 まず config.json を読み込みます。必須パラメーター(db_provider、app_name)が不足している場合は、AskUserQuestion を使ってユーザーに質問します。

  2. 各テンプレートをレンダリングします。 各テンプレートファイルについて、次の手順を行います。

    • テンプレートを読み込みます。
    • {{placeholder}} の値({{app_name}}、{{db_provider}} など)を、解決済みのパラメーター値に置き換えます。
    • 次のルールに従って、PRESET[...] 条件ブロックを適用します。
      1. // PRESET[<tags>] と // /PRESET[<tags>] のマーカー行のペアをすべて探します(JS 以外のファイルでは /* PRESET[...] */ または # PRESET[...] を使用します。構文は同じで、コメント形式が異なります)。
      2. <tags> をカンマ区切りのリストとして解析します(例:social,advanced)。
      3. 選択したプリセット値が <tags> に含まれている場合は、2 つのマーカー行だけを削除し、その間の行は残します。
      4. 選択したプリセット値が <tags> に含まれていない場合は、両方のマーカー行を含むブロック全体を削除します。
      5. マーカーはネストしている場合があります(例:PRESET[minimal,social,advanced] 内の PRESET[advanced])。内側から順に処理します。
    • middleware.ts.template の Mustache 形式の反復(// {{#protected_paths}} ... // {{/protected_paths}})では、リスト内の各項目につきマーカー間の行を 1 回ずつ繰り返し、{{path}} を各値に置き換えます。
  3. 出力ファイルを書き込みます。 書き込む前に、対象ファイルがすでに存在するか確認します。

    • 存在しない場合 → 書き込みます。
    • 存在し、内容が同一の場合 → 何もしません。
    • 存在し、内容が異なる場合 → 差分を表示し、ユーザーに確認します(上書き/マージ/スキップ)。
  4. CLI の手順を実行します。 すべてのファイルを書き込んだ後、次を実行します。

    npx @better-auth/cli@latest generate
    npx drizzle-kit generate
    npx drizzle-kit migrate
    

    これらのコマンドは、プレースホルダーの db/schema/auth.ts を実際のスキーマに置き換え、マイグレーションを適用します。

  5. 次の手順を表示します。 ユーザーに次の作業を伝えます。

    • .env.example をコピーして .env.local に必要事項を入力する
    • シークレットを生成する:openssl rand -base64 32
    • 各プロバイダーのコンソールで OAuth リダイレクト URI を登録する(social/advanced プリセットの場合)
    • トランザクションメールを接続するために lib/email.ts を実装する(advanced プリセットの場合)

規約

各テンプレートに含まれる規約の理由については、references/conventions.md を参照してください。主な内容は次のとおりです。

  • lib/auth.ts はサーバー専用です(import "server-only")
  • nextCookies() は配列内で必ず最後のプラグインにします
  • ミドルウェアでは Cookie の有無だけを確認し、実際の検証はページで行います
  • すべてのシークレットはインラインで記述せず、process.env.* を使います
  • cookieCache を有効にしたスライディングウィンドウセッション

関連スキル

  • better-auth — セットアップ、セッション、セキュリティ、プラグイン、マイグレーションに関する 42 のルールを含む、ライブラリ/API リファレンスです。このテンプレートは、それらのルールを実現する標準的な方法の 1 つです。変更が必要な場合は、根拠を確認するために該当するルールを読んでください。

注意点

gotchas.md を参照してください。現在は空のファイルで、注意点が判明するたびに追記されます。

コメント