---
type: tutorial
title: カスタムゲームをゲート可能にする
summary: セルフホストのゲームのためにヘッドレスのリプレイアーティファクトをアップロードし、サーバーが判定を再導出できるようにします。カスタムゲームがゲームゲートを満たせるようになるステップです。
---

[セルフホストのゲーム](/docs/custom-game-development/self-hosted-game) は、`game-src` をそれに向けた途端に走って検証します。しかしそれを [ゲームゲート](/docs/site-keys/games)、つまり訪問者が通るためにそれをクリアしなければならない場所として使うには、Caputchin が、ブラウザを信頼するのではなく、結果を自分で再導出できなければなりません。それが **リプレイアーティファクト** の目的です。このチュートリアルの終わりまでに、あなたのカスタムゲームはゲートの資格を得ます。

これが決定論の見返りです。あなたのゲームは [トレース](/docs/custom-game-development/self-hosted-game) を記録し、すべてをシードから導くので、サーバーは、あなたのロジックのヘッドレスのコピーを同じシードとトレースに対して走らせ、独立に同じ判定に達せます。

## リプレイアーティファクトとは何か

アーティファクトは、レンダリングなし、DOM なし、ネットワークなしの、あなたの **ゲームロジック** だけの、小さく自己完結した JavaScript のバンドルです。サーバーはそれを隔離されたサンドボックスに読み込み、`(seed, trace)` から判定を生むために走らせます。それはあなたの遊べるゲームではありません。あなたの遊べるゲームのヘッドレスの審判です。

2 つの性質が必須です：

- **自己完結。** アイソレートが解決できないものをインポートできません。すべてをバンドルに入れてください。アップロードは 2 MB に上限づけられ、典型的なロジックのバンドルをはるかに上回ります。
- **決定論的で、ライブのゲームと一致。** 同じシードと、あなたのライブのゲームが発したトレースが与えられれば、それはライブのゲームが主張した同じ判定に達しなければなりません。それらが食い違うと、本物のプレイヤーが誤った拒否を受けます。

## 1. カスタムゲームを登録する

まだなら、ゲームがアーティファクトを保持する id と場所を持つよう、ダッシュボードでゲームを登録します。サイトキー（またはチーム）の **ゲーム** ページで、**ゲームを追加** パネルの **カスタムゲーム** 入力を使います。id を入力して **定義** をクリックします。このステップは [カスタムゲーム](/docs/game-customization/custom-games) を、[あなたが定義するスキーマ](/docs/custom-game-development/dashboard-schema) を参照してください。

## 2. アーティファクトをアップロードする

登録済みのゲームの **設定** タブで、リプレイのバンドルをアップロードします。単一のファイルとして送られます。Caputchin はそれをコンテンツハッシュし（同じバイトを再アップロードするのは no-op です）、即座に **セルフチェック** を走らせます。

## 3. セルフチェック

セルフチェックは、アップロードされたアーティファクトを、合成のシード（と、提供すれば、あなたがコミットしたトレースのサンプル）に対してリプレイのアイソレートで走らせ、それがクリーンな判定を生んだかを記録します：

- **通る** → インストールがゲートの資格を得ます。**リプレイ不可** バッジが消え、このゲームをプールに入れて [ゲームを必須にする](/docs/site-keys/games) をオンにできます。
- **失敗する** → アーティファクトは引き続き保存されます（エラーを調べられるよう）が、インストールはゲートの資格なしのままです。ロジックを直して再アップロードしてください。

失敗したセルフチェックは、システムが、ヘッドレスの審判が自分自身と一致しない、または走れなかったと伝えているものです。それはまさに、本番で誤った拒否を引き起こしたであろう食い違いで、どの訪問者が当たる前にも捕らえられたものです。

## 4. ゲートをオンにする

セルフチェックが通ると、ゲームはキーの [ゲートプール](/docs/site-keys/games) に入ります。キーのセキュリティページで **ゲームを必須にする**（またはチームの force-game の天井）をオンにすると、Caputchin はあなたのカスタムゲームを提供し、プレイヤーのトレースを取り、各検証を決めるためにあなたのアーティファクトをサーバー側で再実行します。

## 2 つを同期し続ける

ライブのゲーム（`game-src` 経由で読み込まれる）とリプレイアーティファクトは、同じロジックの 2 つのビルドです。結果に影響する何かを変えるときは、2 つがなお一致するよう、アーティファクトを再ビルドして再アップロードしてください。それらがずれると、セルフチェックか本番のリプレイが、本物の勝ちを拒否し始めます。両方を 1 つの共有ロジックモジュールから作るのが、それらを同一に保つ信頼できる方法です。

## あわせて読む

- [セルフホストのゲームを作る](/docs/custom-game-development/self-hosted-game)：このアーティファクトがリプレイするトレースを生む。
- [ゲームとゲームゲート](/docs/site-keys/games)：ゲートをオンにすることと、リプレイ可能性の要件。
- [カスタムゲーム](/docs/game-customization/custom-games)：登録と、リプレイ不可バッジ。
- [ダッシュボードスキーマリファレンス](/docs/custom-game-development/dashboard-schema)：ゲームがファクトリーのコンテキストから読むフィールド。
