Web アプリケーション概要
UZU Web アプリケーションは Next.js 15 をベースとした、モダンなマーダーミステリープラットフォームのWebインターフェースです。
技術スタック
フレームワーク
- Next.js 15: App Router を使用したReactフレームワーク
- React 19: 最新のReact機能を活用
- TypeScript: 型安全性を確保
スタイリング
- Tailwind CSS: ユーティリティファーストのCSSフレームワーク
- CSS Modules: コンポーネントごとのスタイル分離
状態管理とデータフェッチング
- Apollo Client: GraphQLクライアント
- React Hook Form: フォーム管理
- Zustand: グローバル状態管理
開発ツール
- ESLint: コード品質管理
- Prettier: コードフォーマッター
- GraphQL Code Generator: 型定義の自動生成
プロジェクト構造
javascript/apps/web/
├── app/ # Next.js App Router
│ ├── (routes)/ # ルートグループ
│ ├── api/ # APIルート
│ └── layout.tsx # ルートレイアウト
├── components/ # 共有コンポーネント
├── hooks/ # カスタムフック
├── lib/ # ユーティリティ関数
├── services/ # APIサービス層
└── types/ # 型定義主要機能
ユーザー管理
- ソーシャルログイン(Google, Apple, Twitter)
- プロフィール管理
- フレンド機能
イベント管理
- イベント作成・参加
- リアルタイム更新
- スケジュール管理
シナリオシステム
- シナリオ閲覧
- レビュー・評価
- お気に入り管理
プレイルーム
- WebRTCによる音声通話
- リアルタイムチャット
- キャラクター選択
開発環境セットアップ
前提条件
- Node.js 20+
- pnpm または npm
- Docker (バックエンドサービス用)
インストール
bash
# ディレクトリ移動
cd javascript/apps/web
# 依存関係インストール
npm install
# 環境変数設定
cp .env.example .env.local開発サーバー起動
bash
# 開発サーバー起動
npm run dev
# または task コマンドを使用
task js:dev SERVICE=web開発サーバーは http://localhost:3000 で起動します。
ビルドとデプロイ
プロダクションビルド
bash
# ビルド
npm run build
# プロダクションモードで起動
npm run start静的エクスポート
bash
# 静的HTMLとして出力
npm run build
npm run exportコーディング規約
インポート規則
- 相対インポートを使用(パスエイリアスは避ける)
- 順序: React → 外部ライブラリ → 内部モジュール
コンポーネント規則
- 関数コンポーネント + TypeScriptを使用
- props の型定義を明確にする
- カスタムフックで複雑なロジックを分離
スタイリング規則
- Tailwind CSS を優先
- 複雑なスタイルは CSS Modules を使用
- テキストスタイル:
t-(dense|normal|comfort)_(xs|sm|md|...)_(regular|bold)
非同期処理
- Next.js 15+ の非同期パラメータパターンを使用
- エラーハンドリングを適切に実装
パフォーマンス最適化
画像最適化
- Next.js Image コンポーネントを使用
- 適切なサイズと形式を指定
- Lazy loading を活用
コード分割
- 動的インポートで必要な時にロード
- ルートベースの自動分割を活用
キャッシュ戦略
- Apollo Client のキャッシュを活用
- ISR(Incremental Static Regeneration)の活用
- Edge Caching の設定
テスト
ユニットテスト
bash
# テスト実行
npm run test
# カバレッジレポート
npm run test:coverageE2Eテスト
bash
# Playwright テスト実行
npm run test:e2eトラブルシューティング
よくある問題
ビルドエラー
- 型定義の不整合 →
npm run genでGraphQL型を再生成 - ESLintエラー →
npm run lint:fixで自動修正
- 型定義の不整合 →
開発サーバーの問題
- ポート競合 → 他のプロセスを停止または別ポートを使用
- Hot Reload が効かない →
.nextディレクトリを削除して再起動
GraphQLエラー
- スキーマ不一致 → バックエンドと同期を確認
- 認証エラー → トークンの有効期限を確認