> ## 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.

# PlayFab ゲーム サーバーの基本

> PlayFab マルチプレイヤー ゲーム サーバーが Windows または Linux コンテナーとしてパッケージ化され、アセットとしてアップロードされ、GSDK と統合されてホストされる仕組みを学びます。

PlayFab はゲーム サーバーをコンテナー化されたアプリケーションとして運用します。このチュートリアルでは、ゲーム サーバーがどのようにパッケージ化され、PlayFab システムと統合されるかについて説明します。

## ゲーム サーバーのコンテナー化とパッケージ化

### Windows

Windows では、通常、ゲーム サーバー実行可能ファイルとその他のファイルを ZIP ファイルとしてパッケージ化し、ゲーム アセットとしてアップロードします。アセットはコンテナー イメージと組み合わされ、ゲーム サーバー ビルドが作成されます。ベース コンテナー イメージは、Windows オペレーティング システム ファイルと、ゲームを実行できる実行環境を提供します。PlayFab は、Windows ビルドで使用するマネージド コンテナー イメージのセットを提供します。
Game Manager または [CreateBuildWithManagedContainer()](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.createbuildwithmanagedcontainer) などの API を介して Windows ビルドを作成する際、アセットと、それらをコンテナーのファイル システム内のどこにマウントするかを指定します。また、ゲームを起動するシェル コマンド (`StartGameCommand`) も指定します。これは以下のようになります。

```cmd theme={null}
C:\GameCoreApp\GameServer.exe -mode RETAIL
```

`StartGameCommand` は、PlayFab Game Server SDK を使用するアプリケーションを起動し、ゲーム クライアントに応対する準備ができたら `ReadyForPlayers` を呼び出す必要があります。アプリケーション プロセスが終了すると、コンテナーは終了しリサイクルされます。

### Linux

Linux では、ゲーム実行可能ファイルとアセットをパッケージ化して、コンテナー イメージを自分で作成します。実行時にコンテナー イメージと組み合わされるアセットの使用は任意です。
Game Manager または [CreateBuildWithCustomContainer()](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.createbuildwithcustomcontainer) などの API を介して Linux ビルドを作成する際、アセットと、それらをコンテナーのファイル システム内のどこにマウントするかを任意で指定できます。ゲームを起動するシェル コマンド (`StartGameCommand`) の指定も任意です。このコマンドはコンテナー イメージ内に含めることもできるためです。

<Note>
  PlayFab Multiplayer Servers 用の Linux コンテナー イメージの作成に関する詳細については、[こちら](/services/playfab/multiplayer/servers/deploying-linux-based-builds) を参照してください。
</Note>

## Windows 用のマネージド コンテナー

PlayFab は現在、Windows Server Core をベースとした PlayFab Multiplayer コンテナー イメージという 1 つのマネージド コンテナーをサポートしています。このコンテナーは [Docker Hub](https://hub.docker.com/r/microsoft/playfab-multiplayer/) からダウンロードでき、ローカル環境を Azure の実行時環境に一致させることができます。

開発機上でマルチプレイヤー サーバーのステート マシンをローカルにステップスルーできるデバッグ ツールもあります。

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

以下の図は、ゲーム サーバーのアップロードと、このパッケージを選択したコンテナーと結合する主要なフローを示しています。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/thunderhead-container-flow.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=ad4750d314c63445ba7af4b08e4b6d3c" alt="Thunderhead Container Flow" width="739" height="428" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-container-flow.png" />

### マネージド コンテナーの更新

マネージド コンテナーは Windows プロジェクトにおける最も簡単な統合オプションであり、コンテナーに慣れていない場合の出発点として最適です。

マネージド コンテナーの主要な機能として、PlayFab は信頼性の高いプレイを保証するために、重要なセキュリティ修正を含むベース イメージを自動的に更新します。一般的に、セキュリティ更新は毎月行われ、サービスの中断は発生しません。詳細については、[Windows 用の OS パッチ更新](/services/playfab/multiplayer/servers/os-patch-updates) を参照してください。

アップグレード中、自然にリサイクルされているスタンバイ中のセッションは、更新されたコンテナー イメージと同じゲーム サーバー パッケージに置き換えられます。

PlayFab が使用中のマネージド コンテナー イメージを更新する予定がある場合、PlayStream イベントを受け取ります。

## PlayFab Game Server SDK の統合

*詳細は次を参照:* [PlayFab Game Server SDK (GSDK) を使用したゲーム サーバーの統合](/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk)

PlayFab Game Server SDK (GSDK) は、**C++**、**C#**、**Java** などの複数のプログラミング言語で提供されます。GSDK は、ゲーム サーバーを VM 上にインストールされたローカル エージェントに接続します。このエージェントは、PlayFab コントロール インフラストラクチャとの主要なサーバー間の相互作用を仲介します。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/thunderhead-gsdk.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=1a53d24933a02325bba1ec5b35cc7d22" alt="Thunderhead GSDK" width="580" height="138" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-gsdk.png" />

ゲーム サーバーが初期化されると、*preparing 状態* に入り、PlayFab はゲーム サーバーが `ReadyForPlayers()` を呼び出すのを待ちます。

これが呼び出されると、ゲーム サーバーは *standing by 状態* に入り、[RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver) メソッド経由でマッチメイキング サービスから PlayFab への割り当てリクエストを待機します。

以下の図は、PlayFab マルチプレイヤー サーバーの状態を示しています。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/thunderhead-game-server-states.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=5660725368a9559f65480d95e5a6faeb" alt="Thunderhead Game Server States" width="2792" height="1252" data-path="images/playfab/multiplayer/servers/tutorials/thunderhead-game-server-states.png" />

表面上、ゲーム サーバーを実行し、動作を継続させるための唯一の要件は `ReadyForPlayers()` の呼び出しです。ただし、最良のユーザー エクスペリエンスを提供するために処理したいコールバックやイベントがいくつかあります。

## サーバー スクリプトと PlayFab で構成された環境変数

場合によっては、ゲーム サーバーで CMD、PowerShell、または bash スクリプト (「ブートストラッパー」) を実行してから、コンパイル済みのゲーム サーバー実行可能ファイルを起動したいことがあります。このスクリプトは、コンテナーの内部環境を構成したり、実行可能ファイルにコマンドライン引数を渡したり、ゲーム サーバー実行可能ファイル自体で実行したくないタスクを行ったりできます。

利便性のため、PlayFab は一部のビルド情報を以下の環境変数としてコンテナー内に設定します。これらは GSDK 経由でもアクセスできますが、スクリプトからは環境変数を使用する方が簡単です。

* **PF\_TITLE\_ID** - セッション ホストのタイトル ID
* **PF\_BUILD\_ID** - セッション ホストのビルド ID
* **PF\_REGION** - セッション ホストの Azure リージョン
* **PUBLIC\_IPV4\_ADDRESS** - VM のパブリック IP アドレス
* **PF\_VM\_ID** - VM の一意識別子 (例: 'xcloudeau4u4yyxj4xymu:AustraliaEast:1E03\_6f27ad88-9bc3-4ea3-8d16-75480aba4637:tvmps\_0e05c37e0bbdca298a09fb0d597bd666eb7c5fd0ebcf1fed4c52e608a39a7c9c\_d')
* **CERTIFICATE\_FOLDER** - ゲーム証明書を含むフォルダー
* **PF\_SERVER\_LOG\_DIRECTORY** - ゲーム ログを含むフォルダー
* **PF\_SERVER\_INSTANCE\_NUMBER** - サーバーのインスタンス番号。VM 上の最初のサーバーは 0、2 番目は 1、3 番目は 2、以降同様です。


## Related topics

- [ゲーム サーバーをデバッグするための直接接続](/ja-jp/services/playfab/multiplayer/servers/directly-debugging-game-servers.md)
- [PlayFab Multiplayer Servers を使ってマルチプレイヤーゲームをホストする](/ja-jp/services/playfab/multiplayer/servers/using-playfab-servers-to-host-games.md)
- [ゲーム サーバーのローカル デバッグと PlayFab との統合](/ja-jp/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [マルチプレイヤー サーバーのライフサイクル](/ja-jp/services/playfab/multiplayer/servers/multiplayer-game-server-lifecycle.md)
- [ゲーム サーバーとロビー](/ja-jp/services/playfab/multiplayer/lobby/lobby-server-overview.md)
