## デプロイサイト: [Athleisure Styles](https://mern-athleisure-styles.vercel.app)
## GitHub: [MERN_AthleisureStyles](https://github.com/sahoooii/MERN_AthleisureStyles)
## 概要
フロントエンド(React + Redux)からバックエンド(Node.js + Express + MongoDB)まで一貫して構築した、**スポーツ系ファッション EC サイトをテーマにAthleisure Styles**と名前をつけた。
ロゴ・デザイン・設計・実装・デプロイをすべて一人で担当。
本プロジェクトを通じて、**MERN スタックを用いた実践的なフルスタック開発スキルの確立**を目指した。
## 使用技術
MERN スタック(MongoDB, Express, React, Node.js)
Redux Toolkit / PayPal / Cloudinary / Material UI / JWT / Render / Vercel
## 動機
React と Node.js を学んだ後、**「バックエンドと連携した実運用レベルのアプリを自分で構築できるようになりたい」**という思いから作成したいものを決め、作成。
フロントのみの開発では表現できないデータフローや非同期通信、セキュリティ処理を自力で実装するため、**MERN スタックによる 0→1 開発**を選択。
ユーザー登録・商品管理・レビュー投稿・決済・画像アップロードなど、**実運用を想定した全機能を自作**し、フロント〜バック間のデータ連携を徹底的に学習した。
## 取り組み
本物の EC サイトに近い体験を再現するため、主要な CRUD 機能に加え、**購入・お気に入り登録・決済・管理者機能**(商品・ユーザー情報管理、発送管理)までを実装。
フロントエンドは React、バックエンドは Node.js、データベースは MongoDB を採用。
デザインは初めて Material UI を使用し、**統一感と操作性の高い UI**を実現した。
また、実際のユーザー行動を想定し、モバイル時の挙動や導線設計を重視。レビュー投稿やカート操作など、UX 向上を意識した設計を徹底した。
特に、**ユーザー登録時のアイコン画像アップロード機能**の実装には多くの試行錯誤を行った。
クライアント側バリデーションと Cloudinary の非同期アップロードの整合性を取るのに苦労し、フォーム送信とアップロード処理のタイミングを最適化することで、UX とデータ整合性の両立を実現した。
## 工夫した点
- **Vercel × Render によるフロント・バック分離デプロイ**
- Render 特有のコールドスタート問題を解消するため、Vercel + Render の分離構成を採用し、初回アクセス速度を大幅に改善
- パフォーマンス最適化の実践経験を獲得
- **フォームバリデーションと Cloudinary アップロードの整合性改善**
- クライアント側エラー時(例:メール重複など)でも Cloudinary へ画像が送信される問題を修正
- **非同期処理の制御構造を再設計**し、不要な通信を防止。UX と処理効率を両立
- **モバイルファースト UI 設計**
- 操作頻度の高いメニューを下部固定に配置し、**スマホ片手操作でも完結する設計**
- コンポーネントを汎用化し、保守性・再利用性を強化
- **Redux Toolkit 導入による状態管理の明確化**
- カート・ウィッシュリスト・認証情報を一元管理
- データフローを可視化し、**チーム開発を想定したアーキテクチャ設計力**を強化
## 成果
- 初回表示速度・操作応答性ともに改善し、**UX を重視したパフォーマンス設計を体得**
- Cloudinary との非同期制御を最適化し、**データ整合性・リソース効率を両立**
- Redux 導入により、**スケーラブルな状態管理構造の設計力**を獲得
- UI/UX・パフォーマンス・セキュリティ・保守性を総合的に考慮した、**実践的なフルスタック開発スキルを確立**