本文へスキップ
株式会社オブライト
Web Development2026-04-24約6分で読めます

Hono + Inertia + React の認証完全ガイド

Better Auth / Lucia / セッション設計の選び方と実装パターン【2026年版】

Hono + Inertia + React で認証を「ちゃんと」設計するための完全ガイド。Better Auth / Lucia / 自前セッションの選び方、CookieベースとJWTの選択、Inertia の auth プロパティ共有、ロール・認可、OAuth(Google / GitHub / LINE)、パスワードリセットまで実装パターンを整理します。


認証は「自前」と「ライブラリ」の二択ではない

認証の実装は、毎回プロジェクトでハマる領域です。2026年時点での実用的な選択肢は3つに整理できます。

- Better Auth: TypeScript製のフルスタック認証ライブラリ。OAuth・メール認証・MFA・組織機能などが揃う。Hono アダプタもある
- Lucia: 軽量・最小限の認証「フレームワーク」。セッション管理の薄いラッパーで、自由度が高い
- DIY セッション: 自分でクッキー+セッションテーブルを書く方式。学習用としても本番用としても、要件が小さいなら現実的

「全部自前」と「Auth0 などフルマネージド」の中間に、こうしたOSSの選択肢が成熟したのが2026年の特徴です。

選び方マトリクス

観点Better AuthLuciaDIY セッションフルマネージド(Auth0 等)
機能網羅広い(OAuth/MFA/組織/招待)セッション中心必要分のみ広い
設定の重さ軽(管理画面)
カスタマイズ性完全限定的
ロックイン度低(OSS)低(OSS)ゼロ
月額コストサーバ+DBサーバ+DBサーバ+DB利用量課金
Hono との相性公式アダプタ自然API経由で良

業務系・社内ツール・中小SaaSでは Better Auth か Lucia、簡素なものは DIY、エンタープライズ要件で SLA が必要なら Auth0 / Clerk などのフルマネージドを使う、という大枠で考えると整理しやすいです。

Cookie ベース vs JWT — 2026年の主流は?

結論: SPA であっても、HttpOnly Cookie + サーバ側セッションを第一選択にするのが2026年の主流です。理由:

- XSS 経由でトークンが盗まれにくい(HttpOnly 属性)
- サーバ側で即時失効できる(JWT は本来失効しづらい)
- Inertia は内部的に通常のリクエストと同じ Cookie を使うので、相性が良い

JWT は「サーバを完全にステートレスに保ちたい」「マルチサービス間でトークン共有したい」など特定要件で使うのが妥当です。

実装パターン: ログインフロー

Loading diagram...

Inertia の共有プロパティに認証情報を載せる

ログイン中ユーザー情報は、Inertia の共有プロパティで全ページに渡しておくのが定石です。

1. Hono ミドルウェアでクッキーを見てセッションを解決
2. ユーザー情報(id、name、email、role など最小限)を共有プロパティ auth.user に載せる
3. React 側のどのページでも usePage().props.auth.user で参照可能

これで「ナビゲーションに表示するユーザー名」「権限ガード」「分析イベントへのユーザーID付与」が全画面で統一できます。

認可(Authorization)— ロールとガード

ロール(admin / editor / viewer 等)は次の2層でガードします:

- サーバ側ガード: Hono のミドルウェアで c.req.path とユーザーの role を突き合わせ、権限不足なら 403 を返す。これが最終防衛線
- クライアント側ガード: React 側で auth.user.role に応じてメニュー表示・ボタン非表示を制御。これは UX のため

クライアント側だけのガードは「見えないけど叩ける」状態を残してしまうため、必ずサーバ側でも止めます。

OAuth(Google / GitHub / LINE)

Better Auth は OAuth プロバイダの設定がシンプルです。Google / GitHub / Microsoft などはほぼ設定だけで動きます。LINE ログインは日本特有の要件として頻出ですが、汎用 OAuth プロバイダ設定として組み込めます(Better Auth の generic OAuth プラグイン or Lucia の OAuth ヘルパーを利用)。

コールバック URL の設定、prompt=consent の指定、初回サインイン時の userテーブル作成(onSignUp フック)など、ハマりやすいポイントは押さえておきましょう。

パスワードリセットと招待

パスワードリセットは「メール送信 + 一意トークン + 有効期限 + 一回限り」の4点セットで実装します。Better Auth はテンプレートとして実装が含まれているケースが多く、自前でやる場合も同パターンを踏襲します。

組織型のSaaS / 社内ツールでは、招待リンク(管理者がメールアドレス入力 → トークン付きURLを送付 → 受信者がパスワード設定)も頻出。共有プロパティでロール状態を渡す設計と組み合わせれば、UI実装はかなり省力化できます。

セキュリティ運用の最低ライン

- HTTPS のみ運用: Cookie に Secure 属性を付ける、HSTS を有効にする
- CSRF 対策: Inertia リクエストにCSRFトークンを付ける
- Rate limiting: ログイン・パスワードリセット・招待エンドポイントに必ず
- Audit log: ログイン履歴・権限変更・重要操作を残す
- MFA: 業務向けには TOTP の導入を推奨(Better Auth はサポートあり)
- セッション失効: パスワード変更時・ロール変更時に既存セッションを無効化

次回 — デプロイ・本番運用

次回は最終回 デプロイ完全ガイド で、Cloudflare Workers / Vercel / Bun サーバ / Node の選び方とCI/CDをまとめます。シリーズ全体は Part 1 を参照ください。

FAQ

Q1: Auth0 や Clerk を使うべきですか?
A: SLA・サポート・各種コンプライアンス要件が厳しい案件では選択肢になります。中小SaaSや業務ツールでは OSS 系(Better Auth / Lucia)で十分なケースが多いです。

Q2: Better Auth と Lucia、どちらを選ぶ?
A: 機能網羅と組織機能が必要なら Better Auth、最小限のセッション管理を自分で組みたいなら Lucia。

Q3: SSO(SAML)対応は?
A: Better Auth に SSO プラグインがあり、社内向けの Microsoft Entra ID / Okta との連携が比較的楽。要件が深い場合はフルマネージドが現実解です。

Q4: パスキー(WebAuthn)は使えますか?
A: Better Auth がパスキーをサポートしています。2026年は本格導入のタイミング。

参考文献

お気軽にご相談ください

お問い合わせ