React + Vite + TypeScript + Tailwind + daisyUI + Supabase Auth による管理者向けSPAです。
- Frontend: React 18, Vite, TypeScript
- Styling: Tailwind CSS, daisyUI v5
- Routing: React Router v6
- Authentication: Supabase Auth (Google OAuth)
- Backend: Supabase
src/
├── components/ # 共通コンポーネント
│ ├── Navbar.tsx # ナビゲーションバー
│ ├── Sidebar.tsx # サイドバー
│ └── ProtectedRoute.tsx # 認証保護ルート
├── hooks/ # カスタムフック
│ └── useAuth.ts # 認証フック
├── pages/ # ページコンポーネント
│ ├── Login.tsx # ログインページ
│ ├── Logout.tsx # ログアウトページ
│ ├── AuthCallback.tsx # OAuth認証コールバック
│ ├── Admin.tsx # 管理ダッシュボード
│ ├── Forbidden.tsx # アクセス拒否ページ
│ └── Health.tsx # ヘルスチェック
├── utils/ # ユーティリティ関数
│ └── url.ts # URL生成関数
└── integrations/supabase/ # Supabase設定
.env.example を .env にコピーし、適切な値を設定してください:
cp .env.example .env必須項目:
VITE_SUPABASE_URL: SupabaseプロジェクトのURLVITE_SUPABASE_ANON_KEY: Supabaseの公開キーVITE_APP_ORIGIN: アプリケーションのオリジンURLVITE_ADMIN_EMAILS: 管理者メールアドレス(カンマ区切り)
- Supabase にアクセス
- 新しいプロジェクトを作成
- プロジェクトURLとAnon Keyを
.envに設定
-
Google Cloud Console設定:
- Google Cloud Console にアクセス
- 新しいプロジェクトを作成または既存プロジェクトを選択
- 「APIs & Services」→「Credentials」に移動
- 「Create Credentials」→「OAuth Client ID」を選択
- Application type: Web application
- Authorized JavaScript origins:
https://your-app-domain.com - Authorized redirect URIs:
https://your-supabase-project.supabase.co/auth/v1/callback
-
Supabase Auth設定:
- Supabaseダッシュボード → Authentication → Providers
- Google providerを有効化
- Google Cloud ConsoleのClient IDとSecretを入力
-
URL Configuration:
- Supabaseダッシュボード → Authentication → URL Configuration
- Site URL:
https://your-app-domain.com - Redirect URLs: アプリケーションのドメインを追加
# 依存関係のインストール
npm install
# 開発サーバー起動
npm run dev
# ビルド
npm run build
# プレビュー
npm run preview- ログイン:
/loginでGoogleアカウント認証 - コールバック:
/auth/callbackでセッション確立 - 認可チェック: 管理者メール(
VITE_ADMIN_EMAILS)に含まれるかチェック - アクセス制御:
- 未認証ユーザー →
/loginにリダイレクト - 非管理者ユーザー →
/forbiddenにリダイレクト - 管理者ユーザー →
/adminダッシュボードアクセス可能
- 未認証ユーザー →
| パス | 説明 | 認証 | 管理者権限 |
|---|---|---|---|
/ |
ルート(/adminにリダイレクト) |
- | - |
/login |
ログインページ | - | - |
/logout |
ログアウト処理 | - | - |
/auth/callback |
OAuth認証コールバック | - | - |
/admin |
管理ダッシュボード | ✅ | ✅ |
/forbidden |
アクセス拒否ページ | - | - |
/health |
ヘルスチェック | - | - |
公開URLを生成するユーティリティ関数:
import { getPublicUrl } from '@/utils/url';
const url = getPublicUrl({
service: 'podcast',
epNo: '123',
variant: 'short' // オプション
});
// 結果: https://dispatt.ch/podcast/ep/123/short- daisyUI: テーマは
lightのみ(CSS肥大化防止) - レスポンシブ: モバイル・デスクトップ対応
- ダークモード: 現在未対応(必要に応じて追加可能)
- 環境変数を本番環境に設定
- Supabaseの本番URLを更新
- Google OAuth設定に本番ドメインを追加
- ビルド・デプロイ
- ダッシュボード機能追加
- ユーザー管理機能
- データ可視化
- ダークモード対応
- PWA対応
- Google OAuth設定を確認
- Supabase URL Configurationを確認
- 環境変数が正しく設定されているか確認
VITE_ADMIN_EMAILSに正しいメールアドレスが設定されているか確認- 大文字小文字の違いを確認
問題や質問がある場合は、GitHubのIssuesまでお気軽にお問い合わせください。