> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Wrapper サンプル

> Wrapper (wrappingGsdk) サンプルを使用して、既存の Windows または Linux ゲーム サーバーを、バイナリに GSDK 呼び出しを追加せずに PlayFab Multiplayer Servers で実行します。

Wrapper サンプル (wrappingGsdk とも呼ばれます) は、既存のゲームをラップして、**Windows OS** と **Linux OS** を使用するゲーム サーバー用ビルドのデプロイで使用できるようにします。

このラッパー アプリケーションを使用すれば、既存のゲーム サーバー ビルドを PlayFab Multiplayer Servers で使用することもできます。

<Info>
  ラッパーは、標準出力と標準エラー ストリームを処理して GSDK メソッドを呼び出す回避策であり、本番用途を目的としたものではありません。
</Info>

## サンプルの内容

このサンプルは 2 つの .NET Core コンソール アプリケーションで構成されています。

* Wrapper—PlayFab Game Server SDK (GSDK) の最新の NuGet パッケージをゲーム サーバーに統合します。このラッパー アプリケーションは **本番使用を目的としたものではありません**。
* Fakegame—GSDK に関する知識を持たない基本的なゲーム サーバー。PlayFab Multiplayer Servers を使用する前に持っていた典型的なゲーム サーバーのようなものです。TCP ポート 80 をリッスンする ASP.NET Core Web サーバー Kestrel を起動します。GSDK について全く知識がないゲーム サーバーをシミュレートすることを目的としています。独自のゲーム サーバーをお持ちでない場合に使用できます。使用できる 2 つの GET ルートがあります。/hello は単純な応答を取得するためのもので、/hello/terminate はサーバーを終了できます。

## 要件

* [.NET Core 3.1 x64 SDK](https://dotnet.microsoft.com/download)

<Note>
  PlayFab Multiplayer Servers を使用および表示するには、Game Manager からこの機能を有効にする必要があります。手順については、[PlayFab Server 機能の有効化](/services/playfab/multiplayer/servers/enable-playfab-multiplayer-servers) を参照してください。
</Note>

## ウォークスルー

このサンプルの構築のライブ ウォークスルーについては、Microsoft Game Dev 2021 のプレゼンテーションをご覧ください (2.52 頃から開始):

<iframe src="https://www.youtube.com/embed/kj2TcMlvWgk" width="100%" height="400" allowFullScreen frameBorder="0" />

## Wrapper 実行ファイルの取得とビルド

* 標準の Git メソッドを使用するか zip ファイルとしてダウンロードして、[GSDK wrapper サンプル](https://github.com/PlayFab/MpsSamples/tree/master/wrappingGsdk) を取得します。
* コマンド プロンプトを開き、cd コマンドで wrapper.csproj ファイルの場所にディレクトリ パスを変更します。例: **cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper**
* 次に、以下の .NET Core CLI コマンドを実行します:

```
dotnet publish --self-contained -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
```

ラッパーのビルドが成功すると、以下の画像に示すように、実行ファイルは ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish フォルダーに公開されます。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/create-your-first-server/wrapper-exe-location.PNG?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=1667c376bbaa6670b270d5264513278c" alt="wrapper 実行ファイルの公開場所" width="1615" height="365" data-path="images/playfab/multiplayer/servers/create-your-first-server/wrapper-exe-location.PNG" />

## ゲーム サーバー アセットの作成

ゲーム サーバー アセットを作成する方法は 2 つあります。

### Fakegame ゲーム サーバーをラッパーと共に使用する

build.ps1 を使用して両方のプロジェクト (wrapper と fakegame) をビルドおよびパッケージ化します。このスクリプトは、必要なファイルを含む .zip ファイルを含む drop フォルダーを作成します。

* PowerShell を開きます。
* cd コマンドで build.ps1 スクリプトの場所にディレクトリ パスを変更します。例: cd C:/ReplaceWithYourFilePath/wrappingGsdk/
* **\build.ps1** を実行します。
* スクリプトが正常に実行された後、..\wrappingGsdk\drop\ フォルダーに移動します。fake ゲーム サーバー ビルド、ラッパー実行ファイル (前のステップでビルドしたもの)、その他の必要なファイルを含む **gameassets.zip** ファイルが作成されているのが確認できます。

### 独自のゲーム サーバー ファイルをラッパーと共に使用する

評価に自分のゲーム プロジェクトを使用するには、ラッパーとゲーム サーバー実行ファイルを同じフォルダーに配置します。

* [ラッパー実行ファイルのビルド](#acquire-and-build-wrapper-executable) の手順に従います。
* ラッパーの公開場所 ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish に移動します。
* 別のウィンドウで、ゲーム サーバー ビルドとゲーム サーバー ビルドの実行に必要なファイルに移動します。どのファイルが必要か分からない場合は、[必要な DLL ファイルの決定](/services/playfab/multiplayer/servers/determining-required-dlls) を参照してください。
* ゲーム サーバー ビルドとすべての必要なファイルをラッパーの公開場所にコピーします。
* ラッパーの公開場所のすべてのファイルを選択します。
* すべてのファイルを選択した状態で、右クリックし、**送る** > **圧縮 (zip) フォルダー** を選択します。ラッパーの公開フォルダーを選択して zip に追加しないでください。マッピングが正しくなくなります。

<Tip>
  相互チェックのため、[Fakegame ゲーム サーバーをラッパーと共に使用する](#use-fakegame-game-server-with-the-wrapper) の手順に従って gameassets.zip をビルドし、参考として使用してください。
</Tip>

## Linux コンテナー イメージの作成とアップロード (Linux サーバーのみ)

Linux コンテナー イメージを作成するには、Dockerfile が必要です。Dockerfile は拡張子のないテキスト ファイルで、指定されたコンテナー イメージのビルドに必要なすべてのコマンドが含まれています。このサンプルでは、このファイルはすでに作成されています。あなたがすべきことは、コンテナー イメージをビルドして実行することだけです。

Windows 開発デバイスを使用したい場合は、Windows Subsystem for Linux (WSL) をインストールする必要があります。手順は以下に記載しています。詳細については、[Windows と Linux のコンテナー イメージの違い](/services/playfab/multiplayer/servers/deploying-linux-based-builds#windows-and-linux-container-image-differences) を参照してください。

1. [Windows 開発デバイスのセットアップ](/services/playfab/multiplayer/servers/deploying-linux-based-builds#set-up-your-windows-development-device) (任意)
2. [PlayFab コンテナー レジストリのサインイン資格情報を取得する](/services/playfab/multiplayer/servers/deploying-linux-based-builds#get-your-playfab-container-registry-sign-in-credentials)
3. 既存の/独自の Dockerfile を使用する
   この手順は、FakeGame を使用しているか独自のゲーム サーバーを使用しているかによって異なります。
   * FakeGame を使用している場合は、[Dockerfile](https://github.com/PlayFab/MpsSamples/blob/master/wrappingGsdk/Dockerfile) があることを確認します。
   * 独自のゲームを使用している場合や Dockerfile を作成する必要がある場合は、[Dockerfile の作成](/services/playfab/multiplayer/servers/deploying-linux-based-builds#create-a-dockerfile) を参照してください。FakeGame の [Dockerfile](https://github.com/PlayFab/MpsSamples/blob/master/wrappingGsdk/Dockerfile) を出発点として使用できます。
4. Ubuntu など Docker がインストールされた Linux ターミナルを開きます。TAG および ACR 変数の値を実際の値に置き換えます。次に、以下のコマンドを実行します。

```docker theme={null}
TAG="0.1"
ACR="customer5555555.azurecr.io"
docker login ${ACR}
```

<Tip>
  ACR および TAG 変数が正しく定義されていることを確認するには、**echo $ACR__ および __echo $TAG** を実行します。
</Tip>

5. 前のステップで取得したユーザー名とパスワードを入力します。
6. Linux コンテナー イメージをビルドしてアップロードします。

以下のコマンドを実行して Dockerfile をビルドおよびアップロードします。**docker build** コマンドの末尾に「.」があります。Dockerfile と同じフォルダー/ディレクトリにいる必要があります。詳細については、[Linux コンテナー イメージのビルドとアップロード](/services/playfab/multiplayer/servers/deploying-linux-based-builds#build-and-upload-linux-container-image) を参照してください。

```docker theme={null}
docker build -t ${ACR}/wrapper:${TAG} .
docker push ${ACR}/wrapper:${TAG}
```

## Game Manager または API を使用してビルドをデプロイする

ビルドのデプロイ プロセスは、Windows と Linux のゲーム サーバーで似ています。

### Windows ゲーム サーバーをデプロイする

手順は Windows Runner C# サンプルと類似しています。以下に記載する違いに従って手順を実行してください。

* [Game Manager を使用してサーバーをデプロイおよび構成する](/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-game-manager)
* [PowerShell/API を使用してサーバーをデプロイおよび構成する](/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-api-powershell)

ローカルでテストしたい場合は、[ゲーム サーバーのローカル デバッグと PlayFab との統合](/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab) を参照してください。

**このサンプル固有の設定**

* 開始コマンド:
  * **C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2** を使用します。
  * 独自のゲーム サーバー ビルドを使用している場合は、fakegame.exe をゲーム サーバー実行ファイルの名前に置き換えます。
* ネットワーク構成: 名前: **gameport**、ポート: **80**、プロトコル: **TCP**
* アセット: FakeGame を使用する場合は、アセットとして **gameassets.zip** をアップロードします。

### Linux ゲーム サーバーをデプロイする

以下の一般的な手順に従ってデプロイします。

* [Game Manager を使用してサーバーをデプロイおよび構成する](/services/playfab/multiplayer/servers/deploy-using-game-manager)
* [PowerShell/API を使用してサーバーをデプロイおよび構成する](/services/playfab/multiplayer/servers/deploy-using-powershell-api)

**このサンプル固有の設定**

* アップロードしたコンテナーを選択します。
* ネットワーク構成: 名前: **gameport**、ポート: **80**、プロトコル: **TCP**
* アセットのアップロードや **Start Command** の設定は不要です。

<Note>
  RequestMultiplayerServer API を使用した割り当て中、接続するポートは 80 とは異なります。これは、PlayFab Multiplayer Server サービスが Azure Load Balancer (パブリック インターネットにポートを公開するもの) と Azure 仮想マシン上で実行されるゲーム サーバーとの間のマッピングを作成するためです。
</Note>

## LocalMultiplayerAgent を使用してラッパーを実行する

カスタム ゲーム サーバー上で GSDK 統合をテストしたい場合は、LocalMultiplayerAgent の使用を強くお勧めします。

Windows Containers で LocalMultiplayerAgent を使用する場合、MultiplayerSettings.json ファイルを適切に構成する必要があります。以下に例があります。LocalFilePath と StartGameCommand の値に特に注意してください。fakegame.exe をゲーム サーバー実行ファイルの名前に置き換えることを忘れないでください。

```json theme={null}
"AssetDetails": [
    {
        "MountPath": "C:\\Assets",
        "SasTokens": null,
        "LocalFilePath": "C:\\projects\\gsdkSamples\\wrappingGsdk\\drop\\gameassets.zip"
    }
],
"StartGameCommand": "C:\\Assets\\wrapper.exe -g C:\\Assets\\fakegame.exe",

// if you are using fakegameserver you should also configure port mapping for port 80
"PortMappingsList": [
            [
                {
                    "NodePort": 56100,
                    "GamePort": {
                        "Name": "gameport",
                        "Number": 80,
                        "Protocol": "TCP"
                    }
                }
            ]
        ]
```

これで LocalMultiplayerAgent でテストする準備が整いました。正しく構成されていれば、LocalMultiplayerAgent がゲーム サーバーを起動するとすぐに、**[http://localhost:56100/Hello](http://localhost:56100/Hello)** で curl 経由で接続できます。

## MPS 上のゲーム サーバーに接続する方法

MPS 上のゲーム サーバーとの接続を確立するには、適切なポート番号を決定することが不可欠です。これは、複数のゲーム サーバー インスタンスをそれぞれ実行する可能性のある複数の仮想マシンがロード バランサーの背後で管理されている構成に起因します。このようなセットアップでは、単一のパブリック IP ポートが、これらの仮想マシン上の異なるポートに対応し、それぞれが異なるゲーム サーバー インスタンスと関連付けられている可能性があります。

### Game Manager を使用する

Game Manager UI を使用して、ゲーム サーバーを割り当て、それに接続できます。

1. Game Manager にログインします。
2. Multiplayer => Servers ページに移動し、ビルドを選択します。
3. Servers ページに移動し、「Request server」ボタンをクリックします。
4. 次のページで、パブリック **IPv4 アドレス** と **ポート** をメモします。
5. curl を使用して **http\://\[IPV4Address]:\[Ports->Num]/Hello** で接続します。

### MPS Allocator サンプルを使用する

以下は、[MPS Allocator サンプル](/services/playfab/multiplayer/servers/mps-allocator-sample) を使用してゲーム サーバーを割り当て、接続を確立する方法です。

1. MPS Allocator サンプルをコンパイルして実行します。
2. 「ListBuildSummaries」コマンドを適用して、利用可能なビルドとそれに対応するビルド ID を表示します。
3. 「RequestMultiplayerServer」を呼び出して、ゲーム サーバー インスタンスのリクエストを開始します。
4. 選択したビルド ID を「ListMultiplayerServers」コマンドに入力して、利用可能なサーバーのリストを生成します。
5. アクティブなゲーム サーバー インスタンスを選択し、前のステップで取得したビルドとセッション ID を使用して「GetMultiplayerServerDetails」を実行します。
6. 応答に表示される **IPV4Address** と **Ports->Num** をメモします。
7. curl を使用して **http\://\[IPV4Address]:\[Ports->Num]/Hello** で接続します。

## 関連項目

* [最初のサーバーを作成する](/services/playfab/multiplayer/servers/create-your-first-server)
* [リソースとサンプル](/services/playfab/multiplayer/servers/server-samples-resources)
* [PlayFab Multiplayer Server SDK](/services/playfab/multiplayer/servers/server-sdks/overview)
* [API リファレンス](xref:titleid.playfabapi.com.multiplayer.multiplayerserver)


## Related topics

- [最初のサーバーを作成する](/ja-jp/services/playfab/multiplayer/servers/create-your-first-server.md)
- [PowerShell/API を使用したビルドのデプロイ](/ja-jp/services/playfab/multiplayer/servers/deploy-using-powershell-api.md)
- [LocalMultiplayerAgent の概要](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/local-multiplayer-agent-overview.md)
- [LocalMultiplayerAgent でコンテナー ゲーム サーバーをデバッグする](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [LocalMultiplayerAgent を使用したプロセスベースのゲームサーバーのデバッグ](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-process-based-gameserver.md)
