【ITニュース解説】Authentication Using Better-Auth (Basics Tutorial)
2025年09月17日に「Dev.to」が公開したITニュース「Authentication Using Better-Auth (Basics Tutorial)」について初心者にもわかりやすく解説しています。
ITニュース概要
Node.js/Next.jsプロジェクトで認証機能を簡単に導入できる新ライブラリBetter-Authの基本チュートリアル。メール・パスワードやソーシャルログイン、2FA、レート制限など多彩な機能を備え、Drizzle ORMとの連携やサインアップ/サインインの実装手順を解説。セキュアな認証システム構築を効率化する。
ITニュース解説
ウェブアプリケーション開発において、ユーザーが安全にサービスを利用できるようにするための「認証」は、非常に重要な機能である。認証とは、ユーザーが「あなたである」ことを確認するプロセスであり、ウェブサイトやアプリへのログイン機能がその代表例だ。この記事では、「Better-Auth」という新しい認証ライブラリを使って、Node.jsやNext.jsといった技術を使ったプロジェクトに、この認証機能をどのように組み込むかを初心者にも分かりやすく解説する。
Better-Authは、ウェブアプリケーションに認証機能を素早く、そして安全に実装するための強力なツールである。このライブラリを利用すれば、開発者は複雑な認証システムを一から構築する手間を省き、よりアプリケーションの核となる機能開発に集中できる。Better-Authが提供する主な機能は多岐にわたる。まず、最も基本的な「メールアドレスとパスワードによる認証」をサポートしている。これは多くのウェブサービスで利用されている一般的なログイン方法である。
さらに、GoogleやGitHubなどの既存のアカウントを使ってログインできる「ソーシャルサインイン」機能も備わっている。これにより、ユーザーは新しいアカウント情報を覚える必要がなくなり、利便性が向上する。セキュリティ面では、「レートリミット」機能が組み込まれており、ログイン試行回数などに制限を設けることで、不正なアクセスや総当たり攻撃からシステムを保護する。また、「二要素認証(2FA)」にも対応しており、パスワードだけでなく、スマートフォンに送られるコードなども併用することで、より高いセキュリティレベルを実現できる。
データベース管理についても、Better-Authは開発者の負担を軽減する。自動的なデータベース管理機能と、様々なデータベースに対応する「アダプター」が提供されているため、認証に必要なユーザー情報などのデータを簡単に保存・管理できる。フロントエンド(ユーザーが直接操作する画面)との連携も考慮されており、シンプルで使いやすい「クライアントAPI」が用意されているため、ウェブページにログインフォームなどを組み込むのが容易になっている。
それでは、具体的なBetter-Authの導入手順を見ていこう。まず、プロジェクトの準備として、Node.jsとNext.jsで構築されたウェブアプリケーションが必要である。記事では、例として乗車共有アプリが挙げられているが、これは認証機能を組み込むための土台となる任意のプロジェクトであればよい。
最初のステップは、必要なライブラリをプロジェクトに「インストール」することだ。具体的には、「better-auth」本体に加えて、データベースとの連携を行うための「Drizzle ORM(Object-Relational Mapper)」、そして実際にデータを保存するデータベースとして「Postgres(PostgreSQL)」が必要となる。これらのライブラリは、bun addといったコマンドを使ってプロジェクトに追加される。Drizzle ORMは、プログラムのコードからデータベースを操作できるようにするツールであり、SQL(データベースを操作するための言語)を直接書く代わりに、JavaScriptやTypeScriptのコードでデータベースのデータを扱えるようにしてくれる。Postgresは、世界中で広く使われている堅牢なリレーショナルデータベースの一種である。
次に、「環境変数」を設定する。環境変数とは、プログラムの外部から設定を読み込むための仕組みであり、機密情報や環境固有の設定(開発環境と本番環境で異なるURLなど)を管理する際に利用される。Better-Authを使用するには、セキュリティ上重要な「秘密鍵(SECRET KEY)」を生成し、プロジェクトの.envファイルに設定する必要がある。この秘密鍵は、認証トークンなどを暗号化・復号化するために使われるため、絶対に外部に漏らしてはならない。また、アプリケーションの「ベースURL」(例: http://localhost:3000)や、データベースへの接続情報である「DATABASE_URL」も環境変数として設定する。
認証機能ではユーザー情報などをデータベースに保存するため、データベースの準備も欠かせない。Better-Authは、認証に必要なデータベースの「スキーマ」(データベースの構造やテーブルの定義図)をあらかじめ提供している。開発者は、bunx @better-auth/cli generateというコマンドを実行するだけで、このスキーマをプロジェクト内に生成できる。スキーマが用意できたら、それを実際のデータベースに適用する作業が必要となる。この作業は「マイグレーション」と呼ばれ、bunx drizzle-kit generateでデータベースの変更履歴となるファイルを作成し、bunx drizzle-kit migrateでその変更をデータベースに反映させる。これにより、データベースにユーザーやセッション情報を格納するための必要なテーブルが自動的に作成される。
Better-Authの基本的な設定は、サーバーサイドで行う。プロジェクトの特定のファイル(例: lib/auth.ts)で、Better-Authを初期化する。この際、先ほど導入したDrizzle ORMとデータベースを連携させるために「drizzleAdapter」を使用する。アダプターは、Better-Authが様々な種類のデータベースと連携できるようにするための橋渡し役を担う。そして、「emailAndPassword: { enabled: true }」という設定を記述することで、メールアドレスとパスワードを使った認証機能を有効にする。
フロントエンド(ユーザーインターフェース)との連携もスムーズに行えるように設計されている。Better-Authは、フロントエンドから認証機能を手軽に利用するための「クライアントユーティリティ」を提供している。createAuthClient関数を使ってクライアントを初期化し、アプリケーションのベースURLを設定する。これにより、ウェブページ上のログインフォームなどから、Better-Authの機能へアクセスできるようになる。
Next.jsのようなフレームワークでは、「APIルート」を利用してサーバーサイドの処理を構築する。Better-Authは、Next.jsのAPIルートに認証処理を簡単に統合できる機能を持っている。具体的には、app/api/auth/[...all]/route.tsのようなパスにAPIルートを設定し、toNextJsHandlerという関数を使ってBetter-Authの内部的な認証ハンドラーを接続する。この設定を行うだけで、Better-Authが提供するサインイン、サインアップ、セッション管理といった全てのAPIエンドポイントが、このAPIルートを通じて自動的に処理されるようになる。
最後に、ユーザーが実際に操作する「サインアップ(新規登録)」と「サインイン(ログイン)」のフォームをウェブページに実装する方法を見ていこう。サインアップページでは、ユーザーが入力した名前、メールアドレス、パスワードなどの情報を使って、フロントエンドからauthClient.signUp.emailメソッドを呼び出す。このメソッドがBetter-Authの機能を通じて、新しいユーザーアカウントをデータベースに安全に作成する。登録が完了した後、ユーザーを特定のページ(例: アプリのトップページ)にリダイレクトするためのcallbackUrlも指定できる。
同様に、サインインページでは、ユーザーが入力したメールアドレスとパスワードを使って、authClient.signIn.emailメソッドを呼び出す。Better-Authはこの情報をもとにユーザーの認証を行い、成功すればユーザーをcallbackUrlで指定されたページにリダイレクトする。これらの処理は、ユーザーがフォームを送信する際のイベントハンドラー(例: handleRegisterやhandleLogin)の中に記述され、エラーが発生した場合には適切に処理するためのtry...catchブロックで囲むのが一般的である。
以上の手順を実行することで、基本的な認証フローが完成する。新しいユーザーのサインアップが可能になり、登録したユーザーがログインできるようになる。Better-Authを使うことで、認証システムの構築にかかる時間と労力を大幅に削減し、より安全で信頼性の高いアプリケーションを提供できるようになるだろう。
この記事で紹介したのは、Better-Authの基本的なセットアップ、データベースマイグレーションの実行、そしてメールアドレスとパスワードによるサインアップ・サインイン機能の実装までである。Better-Authはこれ以外にも、「認可(Authorization)」や「役割ベースのアクセス制御(Role-Based Access Control)」といった、ユーザーの権限に基づいたアクセス管理機能、先述の「レートリミット」や「二要素認証」、そして「ソーシャルログイン」といった高度な機能も多数提供している。これらの機能は、今後の開発においてアプリケーションのセキュリティと利便性をさらに高めるために非常に役立つだろう。Better-Authを学ぶことは、システムエンジニアとして認証システムの基礎と実践的な知識を習得する上で、非常に価値のある経験となるはずだ。