# AI アプリからシンプルな HTML ゲームを公開する

upload_game で最大 10 MiB の自己完結した HTML ファイル1つを公開します。対象となるゲーム、ミニカタログ、公開範囲、更新、パッケージに切り替えるタイミングを説明します。

Source: https://www.playdrop.ai/ja/create/learn/html-games

シンプルな方法では、canvas のアーケードゲームや DOM のパズルなど、標準的な HTML ゲーム1つを `upload_game` の1回の呼び出しで公開します。PlayDrop SDK もビルドフォルダーも追加ファイルも不要で、スマホやパソコンで誰でも開けるリンクが返ってきます。

## シンプルな方法が合うとき

- ゲーム全体が最大 10 MiB（10,485,760 UTF-8 バイト）の HTML ファイル1つで、スクリプト、スタイル、画像、サウンドがインラインで含まれている。
- 普通のブラウザゲームである。つまり PlayDrop SDK を呼び出さないため、クラウドセーブ、ランキング、実績、共有、パーティー、購入、広告は使わない。
- 別ファイルが不要である。掲載用の画像や動画、ゲームサーバーがない。

どれか1つでも当てはまらない場合は、代わりに[パッケージ](https://www.playdrop.ai/ja/create/learn/packaging)を使ってください。ユーザーが求めた機能は残しましょう。この方法に合わせるために機能を削ったり、複数ファイルのゲームを1つにまとめたりするのは絶対にやめてください。このアップロードは、SDK の呼び出し、サーバーのコード、パッケージ専用のカタログフィールドを `advanced_upload_required` で拒否します。

## ゲームを送信する

新しい `requestId`、完全な HTML、ゲーム1つ分のミニカタログを指定して `upload_game` を呼び出します。

```json
{
  "requestId": "moon-jump-first-upload",
  "html": "<!doctype html><html><head><meta charset=\"utf-8\"><title>Moon Jump</title></head><body>…</body></html>",
  "catalogue": {
    "apps": [{
      "name": "moon-jump",
      "displayName": "Moon Jump",
      "description": "Jump between lunar platforms and reach the flag.",
      "controls": "Tap or press Space to jump.",
      "tags": ["game-genre/casual"],
      "types": ["solo"],
      "controller": { "support": "off" },
      "authMode": "NONE",
      "primarySurface": "MOBILE_PORTRAIT"
    }]
  }
}
```

- `name` はゲームの変更できないスラッグで、英小文字、数字、ハイフンからなる1〜100文字です。
- `tags` には `game-genre/casual` のようなジャンルを含める必要があります。[ジャンルとタグ](https://www.playdrop.ai/ja/create/learn/tags)をご覧ください。
- `types` は遊び方を宣言します。1ファイルのゲームは通常 `["solo"]` です。パーティーの人数やオンラインプレイはパッケージで扱います。
- `controller.support` は、`off` も含めて、実際のコントローラー対応状況を示します。
- `authMode` はサインインの扱いを決めます。`NONE` または `OPTIONAL` なら誰でも遊べます。省略すると既定値は `REQUIRED` です。更新のたびに含めてください。
- `primarySurface` は、ゲームが想定している画面の向きを示します。シンプルなアップロードは、デスクトップ、横向き、縦向きで掲載されます。

ほかに受け付けるフィールドは `subtitle`、`emoji`、`color`、`license`、`creation`、`releaseNotes`、`inspirationPrompt`、`makingOf`、`sourceRepository`、`sourceLocale`、`offlineSupported`、`instant` です。バージョン番号は PlayDrop が割り当てます。

## 誰が遊べるかを選ぶ

- 新しいゲームでは、`visibility` を省略するとクリエイターのアカウント設定に従います（限定公開か非公開を選んでいない限り、公開）。更新ではゲームの現在の公開範囲が維持されます。
- `"private"` は、テスト用にクリエイターだけが開けるバージョンを保存します。あとでそのバージョンを `publish_game_version` で公開してください。もう一度アップロードしないでください。
- `"unlisted"` は掲載せずに、リンクを知っている人なら誰でも遊べるよう公開します。`"public"` は見つけてもらえるように公開します。

ユーザーの依頼に従い、ユーザーの意図より広く公開することは絶対に避けてください。[誰が遊べるか](https://www.playdrop.ai/ja/create/learn/distribution)をご覧ください。

## アップロード結果を読む

アップロード結果には `gameId`、`slug`、`version`、`status`、`visibility`、`url` が含まれます。`url` は、そのバージョン専用のオーナー向けリンクです。公開と限定公開のゲームには、ゲームの恒久的なページである `shareUrl` も付きます。ユーザーに渡すのはこちらです。非公開バージョンの場合は `url` を返してください。`instant` と `instantReason` は[インスタント](https://www.playdrop.ai/ja/create/learn/instant-games)の対象かどうかを示します。

## ゲームを更新する

`list_games` を呼び出し、ゲームの `gameId` を渡して `name` を維持します。完全な HTML と完全なミニカタログをもう一度送ってください。アップロードは毎回完全なスナップショットで、省略したフィールドは新しいバージョンに含まれません。リンクは変わりません。最初にパッケージとしてアップロードしたゲームは、ファイルや機能が失われないよう、引き続きパッケージの方法を使う必要があります。

## あとでパッケージに移行する

クラウドセーブ、ランキング、掲載用アート、サーバーを追加すると、ゲームはパッケージになります。これは同じゲームの通常の更新です。`name` を維持し、`prepare_catalogue_upload` でアップロードし、`expectedCurrentVersion` に `list_games` から取得した現在のバージョンを設定してください。[パッケージ化](https://www.playdrop.ai/ja/create/learn/packaging)をご覧ください。

## 関連ガイド

- [AI アプリから公開する](https://www.playdrop.ai/ja/create/learn/mcp-publishing): AI エージェントが MCP で PlayDrop に公開する方法：シンプルな方法とパッケージの方法、非公開テスト、publish_game_version、更新、制限、復旧。
- [パッケージ化と .play](https://www.playdrop.ai/ja/create/learn/packaging): ルートに catalogue.json を置いたビルド済みのフォルダー、ZIP、.play を用意し、掲載メディアとサーバーを宣言して、prepare_catalogue_upload でアップロードします。
- [公開範囲と集客](https://www.playdrop.ai/ja/create/learn/distribution): PlayDrop のゲームを誰が開けるかの選び方、アカウントの既定設定とバージョン公開のしくみ、ブースト、プレイ交換、インスタント、検索で新しいプレイヤーを集める方法を説明します。
