ログイン・会員登録機能 実装ロードマップ(2025/07/13)
現在のUIコンポーネントを、実際に機能するWebアプリケーションにするための手順
フェーズ1: バックエンドAPIサーバーの構築 (Python/Flask)
まず、フロントエンドからのリクエストを処理するための「脳」となる部分を作ります。
ステップ1: プロジェクトの準備
- Flaskプロジェクト用のフォルダを作成し、仮想環境を有効化する
-
必要なライブラリをインストールする
pip install Flask Flask-SQLAlchemy Flask-Migrate Flask-CORS Flask-JWT-Extended python-dotenv
-
基本的なFlaskアプリケーションファイル (
app.py
) を作成する
ステップ2: データベースのセットアップ
- Flask-SQLAlchemy を使って、SQLiteに接続する設定を書く
- Userモデル(id, name, email, password_hash)を作成する
- Flask-Migrate を使ってデータベースに User テーブルを作成する
ステップ3: 認証APIの作成
-
/api/register
- 名前、メールアドレス、パスワードを受け取る
- メール重複チェック
- パスワードのハッシュ化
- DB保存
-
/api/login
- メールとパスワードを受け取る
- ユーザー確認とパスワード検証
- JWTトークン発行
-
CORS設定(例:
http://localhost:3000
を許可)
フェーズ2: フロントエンドとバックエンドの連携 (React)
APIを呼び出して画面の状態を動的に変化させます。
ステップ4: API通信の準備
-
axios
インストール
npm install axios
-
LoginForm.tsx
とRegisterForm.tsx
にhandleSubmit
実装 - 通信中のローディングやエラーメッセージ表示を追加
ステップ5: グローバルなログイン状態の管理
-
AuthContext
を Context API で作成 -
AuthProvider
をアプリ全体に適用 (例:App.tsx
やmain.tsx
) -
login
関数:JWTを localStorage に保存し Context を更新 -
logout
関数:localStorage を削除し Context を未ログイン状態に
ステップ6: ログイン状態に応じたUIの切り替え
-
Header.tsx
- ログイン状態に応じて人型アイコン or ユーザー名+ログアウトボタンを表示
-
HeroSection.tsx
- ログイン済みならセクション非表示
-
main.tsx
- HeroSection の表示制御を実装