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[]プレイヤーキャラクターの定義

Character オブジェクト

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

パターン別の設定例

sync() パターン (クライアントサイド同期)

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

serverActionLogicPath を指定しない場合、ゲームは SyncRoom 方式で動作します。

run() パターン (サーバー権威)

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 上で実行されます。

横向きゲーム

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              # ビルド → アップロード → 登録
npx uzu publish --skip-build # ビルド済みの場合

バリデーションルール

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