技術スタック
アーキテクチャ概要
サーバーレス設計思想
InspirationCat のアプローチに倣い、サーバーを持たない設計を採用する。
| 項目 | 従来のゲーム | Rift Survivors |
|---|---|---|
| ゲームロジック | サーバーサイド | ブラウザ内で完結 |
| データ保存 | DB(RDS等) | localStorage |
| アセット配信 | CDN + Origin | Cloudflare Pages(帯域無制限) |
| 認証 | OAuth / Session | なし(ログイン不要) |
| 課金 | 月額サーバー代 | $0 |
| スケーリング | Auto Scaling | 不要(静的配信) |
なぜサーバーレスか
- コスト: バズっても課金されない。50万アクセスでも$0
- 運用: サーバー管理不要。セキュリティパッチも不要
- プライバシー: ユーザーデータを一切収集しない
- レイテンシ: サーバー通信なしでゲームロジック即実行
- 可用性: Cloudflare の CDN エッジから配信。ダウンタイムなし
技術選定
コア技術
| 技術 | 用途 | 選定理由 |
|---|---|---|
| Vite | ビルドツール | 高速HMR、Tree-shaking、TypeScript標準対応 |
| TypeScript | 言語 | 型安全性、AI生成コードの品質担保 |
| Three.js | 3Dレンダリング | Vibe Jam推奨、WebGL対応、豊富なエコシステム |
| Cloudflare Pages | ホスティング | 帯域無制限無料、グローバルCDN |
ブラウザAPI活用
| API | 用途 |
|---|---|
| Web Audio API | BGM・SEの再生、プロシージャル音楽生成 |
| localStorage | キャラクター・装備・進行データの永続化 |
| sessionStorage | ポータル一時データ |
| Canvas API | 2Dオーバーレイ(HUD、カットイン演出) |
| requestAnimationFrame | ゲームループ |
| Gamepad API | コントローラー対応(任意) |
依存ライブラリ(最小構成)
| ライブラリ | 用途 | サイズ目安 |
|---|---|---|
| three | 3Dレンダリング | ~150KB (gzip) |
| three/examples | ポストプロセス、ローダー | 必要分のみ |
バンドルサイズ制約
Vibe Jam の要件「ロード画面や重いダウンロードは極力なし」に準拠するため、 初回ロードの合計サイズを 2MB以下 に抑える。
ディレクトリ構成(予定)
vibejmgame/
├── docs/ # 設計書(VitePress)
├── src/
│ ├── main.ts # エントリーポイント
│ ├── game/
│ │ ├── Game.ts # ゲームコア(ループ、状態管理)
│ │ ├── scenes/
│ │ │ ├── LobbyScene.ts
│ │ │ ├── DungeonScene.ts
│ │ │ └── PvPScene.ts
│ │ ├── entities/
│ │ │ ├── Player.ts
│ │ │ ├── Enemy.ts
│ │ │ └── Item.ts
│ │ ├── systems/
│ │ │ ├── CombatSystem.ts
│ │ │ ├── DropSystem.ts
│ │ │ ├── DungeonGenerator.ts
│ │ │ └── PortalSystem.ts
│ │ └── ui/
│ │ ├── HUD.ts
│ │ ├── CutinAnimation.ts
│ │ ├── LevelUpUI.ts
│ │ └── LobbyMenu.ts
│ ├── audio/
│ │ └── AudioManager.ts
│ ├── portal/
│ │ ├── VibeversePortal.ts
│ │ └── PortalParams.ts
│ └── utils/
│ ├── Storage.ts
│ └── Math.ts
├── public/
│ ├── index.html
│ └── assets/ # 静的アセット
├── package.json
├── tsconfig.json
├── vite.config.ts
└── README.md