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

# Lobby SDK クイックスタート

> 前提条件、統合、初期 API 呼び出しをカバーするこのクイックスタートで、PlayFab Multiplayer C/C++ SDK をセットアップし、最初の PlayFab Lobby を作成します。

この記事では、PlayFab Lobby の開発環境をセットアップし、PlayFab Multiplayer C/C++ SDK を使用して最初のロビーを作成する方法について説明します。

<Note>
  PlayFab Multiplayer SDK は PlayFab Matchmaking の API も提供します。 \* C++ API の詳細については、[Matchmaking SDK クイックスタート](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk) を参照してください。 \* Unity API の詳細については、[Unity のクイックスタート](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started) を参照してください。 \* Unreal API の詳細については、[Unreal のクイックスタート](/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart) を参照してください。
</Note>

## 前提条件

PlayFab Lobbies を使用するには [PlayFab アカウント](https://developer.playfab.com) が必要です。アカウントの作成手順については、[クイックスタート: Game Manager](/services/playfab/live-service-management/gamemanager/quickstart) を参照してください。

## PlayFab Multiplayer SDK のダウンロードとセットアップ

お使いのプラットフォーム向けの [C/C++ SDK](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks) をダウンロードし、プロバイダーのヘッダーおよびライブラリ ファイルをビルドに統合します。

<Note>
  このクイックスタートは C/C++ SDK の使用に焦点を当てています。Unity と Unreal のインターフェイスについては、次の記事を参照してください: \* [Unity のクイックスタート](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started) \* [Unreal のクイックスタート](/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart)
</Note>

## PlayFab エンティティでログインする

PlayFab Lobby SDK を使用するには、PlayFab エンティティ キーとエンティティ トークンを使ってクライアントを認証する必要があります。[LoginWithCustomId](https://learn.microsoft.com/en-us/rest/api/playfab/client/authentication/login-with-custom-id) REST API でログインして、PlayFab エンティティ キーとトークンのペアを取得します。この API は、[PlayFab Services SDK](/services/playfab/sdks/playfab-sdk-intro) を介して C/C++ プロジェクションとしても利用できます。

<Note>
  LoginWithCustomId は PlayFab の機能をすぐに使い始めるための手軽な方法ですが、出荷時のログイン メカニズムとして意図されているものではありません。ログインのガイダンスについては、[ログインの基本とベスト プラクティス](/services/playfab/identity/player-identity/login/login-basics-best-practices) を参照してください。
</Note>

## PlayFab Multiplayer SDK を初期化する

次の基本手順に従って PlayFab Multiplayer SDK を初期化します:

1. [PFMultiplayerInitialize](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/functions/pfmultiplayerinitialize) を呼び出して SDK を初期化します。
2. [PFMultiplayerSetEntityToken](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/functions/pfmultiplayersetentitytoken) を呼び出して、ライブラリがプレイヤーに代わって使用するエンティティ キーとトークンを設定します。

```cpp theme={null}
static PFMultiplayerHandle g_pfmHandle = nullptr;
...
...
HRESULT hr = S_OK;

// Initialize the PFMultiplayer library.
hr = PFMultiplayerInitialize(titleId, &g_pfmHandle);
if (FAILED(hr))
{
    // handle initialize failure
    printf("PFMultiplayerInitialize failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}

// Set an entity token for a local user. The token is used to authenticate PlayFab operations on behalf of this user. 
// Tokens can expire, and this API token should be called again when this token is refreshed.
hr = PFMultiplayerSetEntityToken(g_pfmHandle, localUserEntity, entityToken);
if (FAILED(hr))
{
    // handle set entity token failure
    printf("PFMultiplayerSetEntityToken failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}
```

## ロビーを作成する

最後に、次の基本手順に従ってロビーを作成します:

1. [PFMultiplayerCreateAndJoinLobby](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayercreateandjoinlobby) を呼び出します。
2. [PFMultiplayerStartProcessingLobbyStateChanges](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayerstartprocessinglobbystatechanges) を定期的にポーリングして [PFLobbyCreateAndJoinLobbyCompletedStateChange](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayerstartprocessinglobbystatechanges) を確認し、非同期の完了をチェックします。

```cpp theme={null}
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 16;
lobbyConfiguration.ownerMigrationPolicy = PFLobbyOwnerMigrationPolicy::Automatic;
lobbyConfiguration.accessPolicy = PFLobbyAccessPolicy::Public;

PFLobbyJoinConfiguration memberConfiguration{};

PFLobbyHandle lobby;
HRESULT hr = PFMultiplayerCreateAndJoinLobby(g_pfmHandle, localUserEntity, &lobbyConfiguration, &memberConfiguration, nullptr, &lobby);
if (FAILED(hr))
{
    // handle immediate create failure
    printf("PFMultiplayerCreateAndJoinLobby failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}

// NOTE: to simplify this quickstart, we'll synchronously block waiting for the CreateAndJoinLobby operation
// to finish. In a real implementation, this polling would be done asynchronously on a background thread/worker.
bool createAndJoinLobbyFinished = false;
while (!createAndJoinLobbyFinished)
{
    uint32_t lobbyStateChangeCount;
    const PFLobbyStateChange * const * lobbyStateChanges;
    HRESULT hr = PFMultiplayerStartProcessingLobbyStateChanges(m_pfmHandle, &lobbyStateChangeCount, &lobbyStateChanges);
    if (FAILED(hr))
    {
        // handle the failure
        printf("PFMultiplayerStartProcessingLobbyStateChanges failed! %s\n", PFMultiplayerGetErrorMessage(hr));
        return hr;
    }

    for (uint32_t i = 0; i < lobbyStateChangeCount; ++i)
    {
        const PFLobbyStateChange* stateChange = lobbyStateChanges[i];
        switch (stateChange->stateChangeType)
        {
            case PFLobbyStateChangeType::CreateAndJoinLobbyCompleted:
            {
                auto createAndJoinStateChange = 
                    static_cast<const PFLobbyCreateAndJoinLobbyCompletedStateChange*>(stateChange);

                if (SUCCEEDED(createAndJoinStateChange->result))
                {
                    // lobby successfully created!
                    printf("Lobby 0x%p successfully created!\n", createAndJoinStateChange->lobby);
                }
                else
                {
                    // report asynchronous failure
                    printf("Failed to create lobby 0x%p! %s\n",
                        createAndJoinStateChange->lobby,
                        PFMultiplayerGetErrorMessage(createAndJoinStateChange->result));
                }
                createAndJoinLobbyFinished = true;
                break;
            }
        }
    }

    hr = PFMultiplayerFinishProcessingLobbyStateChanges(m_pfmHandle, lobbyStateChangeCount, lobbyStateChanges);
    if (FAILED(hr))
    {
        printf("PFMultiplayerFinishProcessingLobbyStateChanges failed! %s\n", PFMultiplayerGetErrorMessage(hr));
        return hr;
    }
}
```

ロビーの作成に関する詳細は、[ロビーの作成](/services/playfab/multiplayer/lobby/create-a-lobby) を参照してください。

非同期操作の処理に関する詳細は、[非同期操作と通知](/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-async) を参照してください。

## 次の手順

* [ロビーを見つけて参加する](/services/playfab/multiplayer/lobby/join-lobbies)
* [別のプレイヤーをロビーに招待する](/services/playfab/multiplayer/lobby/lobby-invites)
* [ロビー プロパティを使用してゲーム セッションを調整する](/services/playfab/multiplayer/lobby/lobby-properties)

## 関連項目

* [ロビーの作成](/services/playfab/multiplayer/lobby/create-a-lobby)
* [非同期操作と通知](/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-async)
* [検索可能なロビーの作成](/services/playfab/multiplayer/lobby/define-search-keywords)
* [ロビーのプロパティ](/services/playfab/multiplayer/lobby/lobby-properties)
* [Lobby SDK リファレンス](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/pflobby_members)
* [Lobby SDK](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks)
* [Matchmaking SDK クイックスタート](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)


## Related topics

- [PlayFab Lobby and Matchmaking SDK](/ja-jp/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks.md)
- [クイックスタート Win32](/ja-jp/services/playfab/sdks/c/quickstart-win32.md)
- [クイックスタート iOS](/ja-jp/services/playfab/sdks/c/quickstart-ios.md)
- [クイックスタート Android](/ja-jp/services/playfab/sdks/c/quickstart-android.md)
- [クイックスタート Linux](/ja-jp/services/playfab/sdks/c/quickstart-linux.md)
