← ソースコード説明書

apps/next - Next.js 認証・管理画面

作成日: 2026-03-06 / 更新日: 2026-06-10

概要

Next.js App Router ベースの Web アプリケーション。ユーザー認証(登録・ログイン・パスワードリセット)、マイページ、プロジェクト管理、管理画面を提供する。エディタ(apps/editor)へのエントリポイントとして機能する。

ディレクトリ構成

apps/next/
├── app/                         # App Router ページ(route group で分割)
│   ├── layout.tsx               # ルートレイアウト
│   ├── page.tsx                 # トップページ
│   ├── (private)/               # 認証必須ルート群
│   │   ├── mypage/              # マイページ
│   │   ├── projects/            # プロジェクト管理
│   │   ├── my-assets/           # マイアセット
│   │   └── admin/               # 管理画面
│   └── (public)/                # 公開ルート群
│       ├── login/               # ログインページ
│       ├── register/            # 登録ページ
│       ├── forgot-password/     # パスワードリセット
│       ├── reset-password/      # パスワードリセット実行
│       ├── works/               # 作品一覧
│       ├── users/               # ユーザープロフィール
│       ├── contact/             # お問い合わせ
│       ├── help/                # ヘルプ(FAQ)
│       ├── docs/                # ドキュメント(codebase / dev-stories / momijiui / technical)
│       ├── devlog/              # 開発日誌
│       ├── play/                # プレイ(埋め込み再生)
│       ├── privacy/             # プライバシーポリシー
│       └── terms/               # 利用規約
├── lib/                         # ユーティリティ・React Context
│   ├── contexts/
│   │   └── AuthContext.tsx       # 認証状態管理
│   ├── api.ts                   # API クライアント
│   └── auth.ts                  # トークン管理
├── components/                  # 共通コンポーネント
│   ├── Header.tsx               # グローバルヘッダー
│   ├── Footer.tsx               # フッター
│   ├── AuthForm.tsx             # 認証フォーム
│   ├── ProjectCard.tsx          # プロジェクトカード
│   └── ...
├── middleware.ts                # Next.js ミドルウェア
├── public/                      # 静的ファイル
├── next.config.js               # Next.js 設定
├── tailwind.config.js           # Tailwind 設定
└── package.json

主要ファイル

ファイル行数役割
app/layout.tsx145ルートレイアウト、AuthProvider ラップ
lib/contexts/AuthContext.tsx129認証状態管理、トークン検証、自動リフレッシュ
middleware.ts16ルート保護、未認証時リダイレクト
lib/api.ts1536API クライアント、認証付き fetch
app/(private)/admin/page.tsx47管理画面ダッシュボード

依存関係

内部パッケージ

  • なし(独立)

主要外部ライブラリ

  • next 15 — フレームワーク
  • react 19 / react-dom — UI
  • tailwindcss — CSS
  • clsx — クラス名ユーティリティ

ページ構成

パスページ認証説明
/トップページ不要サービス紹介、ログインへの導線
/loginログイン不要メール + パスワード認証
/register登録不要アカウント作成
/forgot-passwordパスワードリセット要求不要リセットメール送信
/reset-passwordパスワードリセット実行不要新パスワード設定
/mypageマイページ必要プロジェクト一覧、プロフィール
/projectsプロジェクト管理必要作成、編集、削除
/works作品一覧不要公開作品ギャラリー
/users/:idユーザープロフィール不要公開プロフィール
/admin管理画面adminユーザー管理、アセット管理
/contactお問い合わせ不要問い合わせフォーム
/helpヘルプ不要よくある質問(FAQ)
/docsドキュメント不要操作説明書・技術解説(codebase / dev-stories / momijiui / technical)
/privacyプライバシーポリシー不要静的ページ
/terms利用規約不要静的ページ

認証フロー

ログイン

  1. ユーザーが /login でメール + パスワードを入力
  2. POST /api/auth/login (Hono API) でJWT トークン取得
  3. localStorageauthTokencurrentUserId を保存
  4. AuthContext が状態を更新
  5. /mypage にリダイレクト

エディタへの遷移

  1. マイページでプロジェクトカードをクリック
  2. window.location.href で Editor SPA (http://localhost:5176/projects/editor/{projectId}) に遷移
  3. Editor 側で localStorageauthToken を使って API 認証

OAuth フロー (Code Exchange)

  1. Next.js から POST /api/auth/code でワンタイムコード生成
  2. Editor SPA に ?code=xxx パラメータ付きで遷移
  3. Editor が POST /api/auth/exchange-code でトークン取得

ミドルウェア

  • 保護ルート (/mypage, /projects, /admin) への未認証アクセスを /login にリダイレクト
  • 認証済みユーザーの /login, /register アクセスを /mypage にリダイレクト
  • クッキーまたは Authorization ヘッダーからトークンを取得

管理画面 (/admin)

  • ダッシュボード(ユーザー数、プロジェクト数、作品数)
  • ユーザー管理(一覧、ロール変更、停止/復帰)
  • 公式アセット管理(アップロード、カテゴリ、削除)
  • メッセージ送信(ユーザーへの通知)
  • システム設定

テスト

  • apps/next 単体のテストは限定的
  • 主に E2E テスト(tests/auth-flow.spec.ts, tests/auth-redirect.spec.ts)で認証フローを検証
  • npm run lint で ESLint チェック(CI/CD で実行)
Ad: stickyBottom (728x90)
kaedevn - ノベルゲームを作れるプラットフォーム