🎲 UUIDで運勢を占うジョークサイト
- ハイブリッドWASM実行:
- 🖥️ サーバーサイド(Node.js): OGP生成、SSRで高速レンダリング
- 🌐 クライアントサイド(ブラウザ): インタラクティブなUI、リアルタイム処理
- サーバーサイドレンダリング: SEO最適化された初期表示
- 動的OGP: 結果に応じたOG画像を自動生成
- モノレポ構成: pnpm workspacesを使用した効率的な管理
- Next.js App Router: Server Components + Client Componentsのベストプラクティス
- 和風デザイン: 神社・御神籤をモチーフにした美しいUI
- Vercel Ready: すぐにデプロイ可能な設定
omikuji/
├── apps/
│ └── web/ # Next.js フロントエンド
│ ├── src/
│ │ ├── app/ # App Router
│ │ └── lib/ # WASM ラッパー
│ └── package.json
├── packages/
│ └── wasm/ # Rust + WASM パッケージ
│ ├── src/
│ │ └── lib.rs # UUID処理ロジック
│ ├── Cargo.toml
│ └── package.json
├── package.json # ルートpackage.json
└── pnpm-workspace.yaml
- Node.js 24以上(miseで管理)
- pnpm 9以上(miseで管理)
- Rust(miseで管理)
- wasm-pack
# miseのインストール(未インストールの場合)
curl https://mise.run | sh
# Node.js、pnpm、Rustのインストール(miseが.mise.tomlを読み込んで自動的にインストール)
mise install
# wasm-packのインストール
cargo install wasm-pack
# 依存関係のインストール
pnpm install
# WASMのビルド
pnpm build:wasm# 開発サーバーを起動
pnpm devブラウザで http://localhost:3000 を開きます。
pnpm build:wasm# 本番ビルド
pnpm build# すべてのテストを実行
pnpm test
# WASMのテストのみ
pnpm test:wasm
# Webのテストのみ
pnpm test:web# 開発環境の情報を表示
pnpm debug-envこのコマンドで以下の情報を確認できます:
- システム情報(OS、アーキテクチャ)
- Rust/Cargoのバージョン
- インストール済みのターゲット
- ディスク使用量
- ネットワーク接続状況
# Vercelと同じビルドプロセスを実行
pnpm vercel-buildこのコマンドは、Vercelで実行されるビルドプロセスと同じ手順を実行します。
このプロジェクトは、Vercel環境で自動的にRustをセットアップしてWASMをビルドする設定が含まれています。
詳細なデプロイ手順は DEPLOYMENT.md を参照してください。
- GitHubリポジトリにプッシュ
git add .
git commit -m "Add Vercel deployment with Rust setup"
git push origin main- Vercelダッシュボードで「New Project」
- リポジトリを選択してインポート
- 設定は
vercel.jsonから自動的に読み込まれます - 「Deploy」をクリック
# Vercel CLIのインストール
npm i -g vercel
# プレビューデプロイ
vercel
# 本番デプロイ
vercel --prodデプロイ時に以下が自動的に実行されます:
- ✅ Rustツールチェーンのインストール
- ✅ wasm-packのインストール
- ✅ WASMパッケージのビルド
- ✅ Next.jsアプリケーションのビルド
初回デプロイは5-10分程度かかりますが、2回目以降はキャッシュにより高速化されます。
現時点で環境変数は不要です。将来的に必要になった場合は、Vercelの環境変数設定で追加してください。
apps/web/src/app/page.tsx の fortunes オブジェクトを編集します。
packages/wasm/src/lib.rs を編集し、pnpm build:wasm で再ビルドします。
- Frontend: Next.js 14 (App Router) + TypeScript
- Styling: Tailwind CSS
- WASM: Rust + wasm-pack
- クライアントサイド: ブラウザで実行(
@/lib/wasm) - サーバーサイド: Node.js で実行(
@/lib/fortune-server)
- クライアントサイド: ブラウザで実行(
- Package Manager: pnpm (workspaces)
- Deployment: Vercel
┌─────────────────────────────────────────────┐
│ クライアントサイド(ブラウザ) │
│ ┌────────────────────────────────────────┐ │
│ │ Client Components │ │
│ │ ├─ useOmikuji() │ │
│ │ └─ @/lib/wasm ──> WASM (Browser) │ │
│ │ └─ generate_uuid() │ │
│ └────────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
↓ リダイレクト
┌─────────────────────────────────────────────┐
│ サーバーサイド(Node.js) │
│ ┌────────────────────────────────────────┐ │
│ │ Server Components │ │
│ │ ├─ /result/[uuid] │ │
│ │ └─ @/lib/fortune-server │ │
│ │ └─> WASM (Node.js) │ │
│ │ └─ calculate_fortune() │ │
│ ├────────────────────────────────────────┤ │
│ │ OG Image API │ │
│ │ └─ /api/og?uuid=[uuid] │ │
│ └────────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
| 環境 | モジュール | 用途 | 実行場所 |
|---|---|---|---|
| クライアント | @/lib/wasm |
UUID生成、インタラクション | ブラウザ |
| サーバー | @/lib/fortune-server |
運勢計算、OGP生成、SSR | Node.js |
MIT
このプロジェクトは完全にジョーク・エンターテインメント目的で作成されています。 UUIDと運勢には一切の科学的根拠や関連性はありません。 実際の意思決定にこの結果を使用しないでください。
Made with ❤️ and 🦀 (Rust)