---
type: reference
title: caputchin.json マニフェスト
summary: マーケットプレイスのゲームを記述する caputchin.json マニフェストのすべてのフィールド、marketplace ブロック、配布ポインター、リプレイの run アーティファクト、プリセットブロック、そして .caputchin 分割ファイル。
---

リポジトリのルートの `caputchin.json` は、マーケットプレイスのゲームの作者とインデクサーの真実の源です。インデクサーはそれをサーバー側で読み、ゲームの身元、そのバンドルがどこに住むか、どのプリセットを提供するか、そしてどうリプレイするかを学びます。それはブラウザでは **決して** 読まれません。SDK は実行時にそれを読み込みません。

このページはフィールドのリファレンスです。作成は [マーケットプレイスゲームを作る](/docs/marketplace-game-development/build-a-marketplace-game) を、公開は [マーケットプレイスに公開する](/docs/marketplace-game-development/publish-to-the-marketplace) を参照してください。正確な型は SDK から `GameManifest` としてエクスポートされます（[SDK リファレンス](/docs/marketplace-game-development/game-sdk-reference) 参照）。

## 最小限の単一ゲーム

```json
{
  "terms_accepted": true,
  "license": "MIT",
  "marketplace": {
    "name": "Leaf Memory",
    "description": "Match pairs of tropical leaves before the timer runs out.",
    "preview": "preview.png"
  },
  "npm": "@your-org/leaf-memory",
  "entry": "dist/leaf-memory.js"
}
```

## トップレベルのフィールド

| フィールド | 必須 | 目的 |
|---|---|---|
| `terms_accepted` | インデックスに | [マーケットプレイス投稿規約](/legal/submission-terms) に同意することを確認するため、リテラルの `true` でなければなりません。ほかのどの値（または欠落）も、マニフェストをインデックスから落とします。セルフホスト専用のマニフェストは省けます。 |
| `license` | インデックスに | あなたのコードとバンドルされたアセットをカバーする SPDX 識別子か式。承認された識別子に評価されなければなりません（[公開エラーリファレンス](/docs/marketplace-game-development/publish-failed-reference#approved-licenses) 参照）。 |
| `marketplace` | インデックスに | 存在が「私をインデックスして」のシグナルです。なければ、マーケットプレイスが無視する有効な [セルフホスト](/docs/custom-game-development/overview) のゲームを意味します。[marketplace ブロック](#the-marketplace-block) 参照。 |
| `npm` | `entry` とともに | インデクサーが jsDelivr URL に解決する npm のパッケージ座標。 |
| `entry` | `npm` とともに | ビルドされたバンドルへのリポジトリ相対のパス。実行可能なゲームには `entry`、`npm`、または両方が存在しなければなりません。 |
| `games` | コレクションに | コレクションのラッパーのためのサブマニフェストのパス。`entry` / `npm` と相互排他。[コレクション](#collections) 参照。 |
| `run` | 任意 | 専用のヘッドレスのリプレイアーティファクト。[run アーティファクト](#the-run-artifact) 参照。 |
| `preferred` | 任意 | ホストが尊重しても **よい** 表現のヒント。[preferred ブロック](#the-preferred-block) 参照。 |
| `locales` / `skins` / `configurations` | 任意 | iframe の中で SDK が消費するプリセットブロック。[プリセットブロック](#preset-blocks) 参照。 |

`version` フィールドはありません。インデクサーがバンドルを不変の ref（公開された npm バージョンか解決されたコミット SHA）に自分で固定します。

## marketplace ブロック [#the-marketplace-block]

| フィールド | 目的 |
|---|---|
| `name` | カードのタイトル。リポジトリ名（単一 / ラッパー）かリーフディレクトリ名（コレクションの子）にフォールバックします。 |
| `description` | カードの副題と詳細ページの本文。 |
| `preview` | 画像のパス（リポジトリのルートからの相対）か絶対 URL。約 600x315、被写体が中央。 |
| `version` | 詳細ページの表示専用のバージョン文字列。任意。 |
| `support` | 作者が宣言する互換性のフラグ（`responsive`、`touch`、`accessible`、`audio` など）。プラットフォームが決して検証せず、フィルターとカードのアイコンとして表に出ます。 |
| `author` | 任意の `{ name?, url?, email? }`。`name` / `url` は詳細ページに作者の署名としてレンダリングされます。`email` は決して表示されず、[公開失敗のメール](/docs/marketplace-game-development/publish-to-the-marketplace#get-notified-when-a-publish-fails) の **オプトイン** です。3 つのサブフィールドはすべて独立です。 |

ブロックは完全に任意です。`name` / `url` を省くと、詳細ページは単に作者の署名を示しません（ページのほかの場所に示される GitHub の所有者は、別の、常に存在する身元で、この署名のフォールバックではありません）。`email` を省くと、公開失敗の通知を受け取りません。欲しいサブフィールドだけを設定します。

## 配布ポインター

インデクサーは、保存された完全性ハッシュが有効なまま留まるよう、各ゲームのバンドルを不変の ref に固定し、すべての実行で再解決します（日次の cron に加えて手動の「公開または更新」）：

- `entry` + `npm` は `cdn.jsdelivr.net/npm/<npm>@<resolved-version>/<entry>` に解決されます。
- `entry` だけは `cdn.jsdelivr.net/gh/<owner>/<repo>@<commit-sha>/<entry>` に解決されます。
- `npm` だけは、固定されたバージョンのパッケージの既定のエントリーに解決されます。

ユーザー側のバージョン固定はありません。ビルドを凍結するには、ユーザーがウィジェットの `game-src`（[カスタムゲーム](/docs/custom-game-development/self-hosted-game)）経由でそれをセルフホストします。

## run アーティファクト [#the-run-artifact]

既定で、リプレイのセルフチェックはあなたのライブの `entry` バンドルを走らせます。ゲームが大きい、またはフレームワークか WASM ベースのとき、代わりに専用の lean なヘッドレスの `run` アーティファクトを出荷してください：

```json
{
  "run": {
    "entry": "dist/run.js",
    "modules": [
      { "name": "sim.wasm", "type": "wasm", "path": "dist/sim.wasm" }
    ]
  }
}
```

| フィールド | 意味 |
|---|---|
| `run.entry` | ヘッドレスの `run` バンドル（[リプレイ契約](/docs/marketplace-game-development/replay-contract) の `run` エクスポート）へのリポジトリ相対のパス。 |
| `run.modules` | run が `name` でインポートするモジュールエントリーの任意の配列。 |

### インデクサーが強制する制約

これらはインデックス時に検証されます。違反は公開を `manifest-error` で失敗させます（[公開エラーリファレンス](/docs/marketplace-game-development/publish-failed-reference) 参照）。

**`run.entry`：**

- **JavaScript** でなければなりません。ベース名は `[a-zA-Z0-9_-]+.js` に一致しなければなりません。run アーティファクトは常に JS です（WASM は下記のとおりモジュールとして出荷）。
- クリーンなリポジトリ相対のパスでなければなりません。先頭のスラッシュ、`..` のトラバーサル、空白、`?` / `#`、`scheme://` の接頭辞はなし。

**各 `run.modules[]` エントリー** は `{ name, type, path }` です：

- `name` は `[a-zA-Z0-9_-]+.(wasm|js)` に一致しなければなりません。モジュールは **JS か WASM** のどちらかで、ほかには何もありません。`name` は、エントリーが使うインポート指定子です。
- `type` は拡張子と一致しなければなりません。`.wasm` の名前には `wasm`、`.js` の名前には `js`。
- `name` は、リプレイのホストが内部で使う **予約された** 名前（`entry.js`、`artifact.js`）であってはなりません。
- `name` は配列の中で **一意** でなければなりません（重複なし）。
- `path` はクリーンなリポジトリ相対のパスでなければなりません（`run.entry` と同じルール）。
- 最大 **16** モジュール。

`run` を省くと、ライブの `entry` を直接リプレイします。アーティファクトが何をエクスポートしなければならないかは [リプレイ契約](/docs/marketplace-game-development/replay-contract) を参照してください。

## preferred ブロック [#the-preferred-block]

任意の `preferred` ブロックは、表現のヒントを運びます。すべてのキーは助言的です。ホストはそれを尊重しても **よく**、それは明示的な埋め込みの属性を決して上書きしません。

```json
{
  "preferred": { "width": 360, "height": 480, "layout": "modal" }
}
```

既定でコンテナにまたがるべきレスポンシブなゲームは、どちらの軸でも `"full"` を宣言できます：

```json
{
  "preferred": { "width": "full", "height": 480 }
}
```

| フィールド | 意味 |
|---|---|
| `width` / `height` | ピクセルのフットプリント、またはリテラルの `"full"`。埋め込みが `width` / `height` を未設定のままにすると、ウィジェットはそれを適用します（`full` を含む明示的な埋め込みの値が代わりに勝ちます）。ピクセル値は iframe をその数にサイズづけし、`"full"` はその軸を親を埋めるよう伸ばします。埋め込みの `width="full"` と同じ効果です。省くと、ウィジェットの組み込みの既定のフットプリントにフォールバックします。 |
| `layout` | ウィジェットがゲームの周りに作るシェル：`inline`、`modal`、`fullscreen`。埋め込みが `layout` を未設定（既定の `auto`）のままにするときだけ使われます。解決の順：埋め込みの `layout` 属性、それからこの preferred の layout、それから `inline`。 |

これらのヒントは、プラットフォームがサーバー側で解決するゲーム（マーケットプレイスのゲーム、またはサイトキーなしで与えられたゲーム id）にだけ尊重されます。プラットフォームがマウント前に読めないセルフホストの `game-src` バンドルは、フットプリントも layout のヒントも無視します。

## プリセットブロック [#preset-blocks]

`locales`、`skins`、`configurations` はそれぞれ、任意の `schema`（キーごとの型と文書）に加えて `presets`（名前付きのオプションのバンク）を宣言します。ウィジェットは訪問者の選択をこれらに対して解決し、あなたのゲームに平坦化された結果を [`ctx`](/docs/marketplace-game-development/game-sdk-reference) として渡します。完全なフィールド型のカタログは共有の [カスタマイズスキーマリファレンス](/docs/references/customization-schema) です。同じ型が [カスタムゲームのダッシュボードスキーマ](/docs/custom-game-development/dashboard-schema) を駆動します。

`skins.schema` のフィールドは、`color`、アセット（`image` / `audio` / `video`）、またはスカラー（`boolean`、`number`、`range`、`list`）で、`configurations` と同じ制約の形（`{ "type": "range", "min": 0, "max": 24 }`、`["dots","stripes"]` など）を使います。スカラーのスキンの値は、構成の値とちょうど同じように、`ctx.skin` でその型付きの値に解決されます（`number` は本物の数値です）。色とアセットの値は文字列に解決されます。

スキンのプリセットの `_theme` は、それが働くモードを宣言します：`light`、`dark`、または `any`（省くと `any` を意味します）。`light` か `dark` のプリセットはそのモードでのみ示されます。`any` のプリセットはどちらの背景でも読め、両方の資格があります。モードごとに 1 つの既定があります。`_default: true` とマークされたプリセットは、それが資格を持つモードの既定なので、`any` の既定は両方をカバーします。あるモードについて複数の資格あるプリセットが既定とフラグされると、宣言順で最初のものがそれを勝ち取ります。モード固有のプリセットを `any` のものの上に挙げて、`any` のプリセットがもう片方に落ちる間、そのモードに専用のスキンを与えます。

## `.caputchin/` 分割ファイル

プリセットブロック（特に完全なロケールのセット）は `caputchin.json` を長くします。どの軸も `.caputchin/` フォルダーの下の自身のファイルに移し、マニフェストを短く保ちます：

```
caputchin.json
.caputchin/locales.json
.caputchin/skins.json
.caputchin/configurations.json
```

各ファイルのトップレベルのオブジェクト **が** その軸のブロック（`{ schema?, presets }`）です。3 つすべて任意です。優先順位は軸まるごとの置き換え、`caputchin.json` が勝ちます。ある軸がインラインとファイルの両方で宣言されると、インラインのブロックが使われ、ファイルは無視されます（公開時に警告されるので、死んでいたと分かります）。各軸をちょうど 1 か所に保ってください。

## コレクション [#collections]

リポジトリは複数のゲームを出荷できます。コレクションのラッパーは、`entry` / `npm` の代わりに子のパスを宣言します：

```json
{
  "marketplace": { "name": "Caputchin Core Pack", "description": "The official pack." },
  "games": ["./packages/leaf-memory", "./packages/dino-runner"]
}
```

各パスは、自身の `caputchin.json` を保持する子ディレクトリを指します。子の id は `owner/repo/<leaf-dir>` です。ラッパーの `marketplace` ブロックを省くと、コレクションのページなしで子をインデックスします。

## あわせて読む

- [マーケットプレイスゲームを作る](/docs/marketplace-game-development/build-a-marketplace-game)：このマニフェストが指すバンドルを生む。
- [リプレイ契約](/docs/marketplace-game-development/replay-contract)：`run` アーティファクトが何をエクスポートしなければならないか。
- [公開エラーリファレンス](/docs/marketplace-game-development/publish-failed-reference)：すべてのマニフェスト検証エラーと、承認されたライセンスの一覧。
- [カスタマイズスキーマリファレンス](/docs/references/customization-schema)：プリセットブロックが使うフィールド型。
