Skip to content

はじめに

UZU Code SDK を使ってマルチプレイ対応の Web ゲームを作成する手順を説明します。

前提条件

ツールバージョン
Node.js20+
TypeScript5.7+
Vite6.0+

パッケージの取得

パッケージはすべて npm に公開されています。認証やレジストリ設定は不要です。

パッケージ用途
@uzuhq/code-sdkマルチプレイ通信・状態同期・サウンドなどのゲーム側 SDK
@uzuhq/code-cliプロジェクト作成・ローカル開発サーバー・パブリッシュ CLI
@uzuhq/engine-2d2D ゲーム用の Canvas ベースゲームエンジン (任意)

プロジェクトの作成

CLI コマンドでプロジェクトを生成します。

bash
npx @uzuhq/code-cli create-2d-game my-game
cd my-game
npm install

生成されるファイル構成:

my-game/
├── manifest.json       # ゲームメタデータ
├── package.json        # npm 設定
├── tsconfig.json       # TypeScript 設定
├── vite.config.ts      # Vite 設定
├── index.html          # エントリー HTML
└── src/
    └── main.ts         # エントリーポイント

manifest.json

ゲームの ID や名前などのメタデータを定義します。詳細は manifest リファレンス を参照してください。

json
{
  "id": "my-game",
  "build": "npm run build",
  "output": "dist",
  "playerCount": 1
}

開発サーバーの起動

素の Vite で 1 player 用の生 debug をする場合:

bash
npm run dev

ブラウザで http://localhost:5173 を開くと、 scenario の index.html がそのまま表示されます (SDK は !isHosted で早期 return するので run() / sync() / init() は何もしません)。

マルチプレイをローカルでシミュレート (uzu dev)

uzu dev は、 scenario の dev command を子 process で起動しつつ、 別 port で harness page (iframe grid + HUD + state inspector) と in-memory GameRoom / SyncRoom / RelayRoom (本番と同一 WS プロトコル) を serve するサブコマンドです。 scenario 側は run<S>({ logic, events }) を書くだけ で、 mount コード / import 文 を一切書かずに N 画面 P2P をローカルシミュレートできます。

create-2d-game の雛形には harness スクリプトが仕込んであるので、 scenario ディレクトリで:

bash
pnpm run harness   # = uzu dev

素の 1 player debug は従来どおり pnpm run dev (= vite 単独)。

起動すると:

  • 子 iframe には ?server=ws://localhost:<port>&roomId=<key>&seatId=dev_N&seats=<json>&revisionId=dev が付き、 SDK は既存 online mode で dev-server に接続します
  • 親 frame (harness page) の window.__uzu_dev は dev-server の管理 channel と WebSocket で会話し、 setRawState / sendAction / pauseTick / stepTick / reset などを Playwright / E2E test から呼べます

manifest.jsondev フィールドで子 process 起動コマンドと ready 検出正規表現を上書きできます (省略時 default は pnpm run dev + vite の Local: http://localhost:5173/ 形式)。

jsonc
{
  "id": "my-game",
  "playerCount": 2,
  "dev": {
    "command": "pnpm run dev",
    // capture group 1 が port もしくは full URL
    "readyPattern": "Local:\\s+http://[^\\s]+:(\\d+)",
  },
}

パブリッシュ

bash
npx uzu publish

manifest.json を読み取り、ビルド → ZIP 化 → R2 アップロード → リビジョン登録まで自動で行います。--skip-build でビルドをスキップできます。

パッケージの役割

パッケージ役割
@uzuhq/code-sdkマルチプレイ通信・状態同期・ボイスチャット・サウンド再生 (runtime only、 DOM 非侵襲)
@uzuhq/engine-2dCanvas 描画・アニメーション・入力・物理演算 (推奨ランタイム)
@uzuhq/code-cliプロジェクト生成 (create-2d-game)、 開発 harness (uzu dev)、 パブリッシュ (uzu publish)

次のステップ