Skip to content

manifest.json リファレンス ​

manifest.json はゲームプロジェクトのルートに配置する設定ファイルです。npx uzu publish がこのファイルを読み取り、ビルド・アップロード・リビジョン登録を行います。

最小構成 ​

json
{
  "id": "reversi",
  "playerCount": 2,
  "build": "pnpm run build",
  "output": "dist"
}

フィールド一覧 ​

フィールド型必須デフォルト説明
idstring✅—ゲームの一意な識別子
playerCountnumber✅—プレイヤー人数 (characters 指定時は配列長で上書き)
outputstring✅—ビルド成果物の出力ディレクトリ (例: "dist")
buildstring——ビルドコマンド。npx uzu publish 時に自動実行
orientation"portrait" | "landscape"—"portrait"ゲーム画面の向き
serverActionLogicPathstring——サーバーサイド reducer のエントリポイント (run() を使うゲームで指定)
charactersCharacter[]——プレイヤーキャラクターの定義
adminboolean—falseuzu dev のグリッドに進行管理席 (admin_0) を追加。roster には載らない観測席として開く。publish 後も revision に保存され、emulator リンクへの admin=1 自動付与に使われる
spectatorboolean—falseuzu dev のグリッドに観戦席 (spec_0) を追加。admin と同じく roster には載らない
devDevConfig——uzu dev 用のサブプロセス起動コマンドと ready 検出正規表現 (下記)

DevConfig オブジェクト ​

uzu dev サブコマンドの挙動を上書きするための任意フィールド。 省略時は vite scenario 前提の default が使われる。

フィールド型デフォルト説明
commandstring"pnpm run dev"scenario の dev server を起動するコマンド。 uzu dev が shell: true で子 process 実行する
readyPatternstring"Local:\\s+(https?://[^\\s]+)"子 process の stdout/stderr を line-by-line で監視する regex。 capture group 1 は full URL もしくは port を返す必要がある

Character オブジェクト ​

フィールド型必須説明
idstring✅キャラクターの一意な識別子
namestring✅表示名
descriptionstring—キャラクターの説明
iconstring—アイコン画像。ローカルパスまたは URL。ローカルパスは publish 時に Cloudflare Images にアップロードされる
furiganastring—名前のふりがな

設定例 ​

マルチプレイゲーム ​

json
{
  "id": "shogi",
  "build": "pnpm run build",
  "output": "dist",
  "serverActionLogicPath": "./src/logic.ts",
  "playerCount": 2,
  "characters": [
    {
      "id": "sente",
      "name": "先手",
      "description": "先手番のプレイヤー",
      "icon": "https://example.com/sente.png",
      "furigana": "せんて"
    },
    {
      "id": "gote",
      "name": "後手",
      "icon": "./assets/gote.png",
      "furigana": "ごて"
    }
  ]
}

serverActionLogicPath を指定すると、npx uzu publish 時に reducer ロジックがサーバーにデプロイされ、GameRoom DO 上で実行されます。

1 人用ゲーム (state 同期なし) ​

プレイヤー間で state を共有しないゲームは serverActionLogicPath を省略できます。この場合ロジックはサーバーに配られず、SDK はサウンド・ボイス・SafeArea のブリッジだけを提供します。

json
{
  "id": "snake",
  "playerCount": 1,
  "build": "pnpm run build",
  "output": "dist"
}

横向きゲーム ​

json
{
  "id": "card-game",
  "playerCount": 4,
  "build": "pnpm run build",
  "output": "dist",
  "orientation": "landscape"
}

パブリッシュ時の処理フロー ​

npx uzu publish を実行すると、以下の順序で処理が行われます:

  1. manifest.json を読み取り、フィールドをバリデーション
  2. build コマンドを実行 (指定されている場合)
  3. output ディレクトリを ZIP 化して R2 にアップロード
  4. serverActionLogicPath が指定されている場合: サーバーロジックをビルド・アップロード
  5. characters のローカルアイコンを Cloudflare Images にアップロード
  6. gRPC でバックエンドにリビジョンを登録
  7. UZU Studio の URL を出力
bash
npx uzu publish   # ビルド → アップロード → 登録

バリデーションルール ​

  • id、playerCount、output は必須
  • characters を指定する場合:
    • 空配列は不可
    • 各キャラクターに id と name が必要
    • 実際のプレイヤー人数は characters の配列長で決定 (playerCount より優先)