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

# グループ リーダーボード

> group エンティティ タイプを使用する PlayFab リーダーボードを作成して、ギルド、クラン、アライアンスをランク付けし、プレイヤーのリーダーボードと並行してチーム スコアを比較します。

このチュートリアルでは、リーダーボード上でグループ エンティティを使用する方法を学びます。この概念を理解するために、惑星のテラフォーミングに焦点を当てた「RPG」ゲームの例から始めます。プレイヤーとして、各惑星に構造物を建設・発展させ、リソースを集め、独自の艦船を作り、他のプレイヤーがあなたの物を盗みに来るかもしれないため防御も設定する必要があります。このゲームの重要な要素は、プレイヤーがアライアンスを結成し、チームを作って他のプレイヤーをグループとして攻撃できることです。

このコンテキストを踏まえて、宇宙全体でどのアライアンスが最強かを知ることができるように、アライアンス用のリーダーボードを作成します。

グループ リーダーボードの仕組みを深く掘り下げる前に、押さえておくべき重要なポイントがいくつかあります:

* エンティティ プログラミング モデルの詳細については、こちらを参照してください: [エンティティ プログラミング モデル](/services/playfab/live-service-management/game-configuration/entities)。
* グループの仕組みについては、こちらを参照してください: [グループ](/services/playfab/community/associations/groups/quickstart)。

## リーダーボードを作成する

ゲームとシナリオの種類にもよりますが、複数のリーダーボードを作成することが多いでしょう。今回の状況では、このゲームで想定される 2 種類のシナリオと、それぞれに対処するためにサービスをどのように使うかを示します。

### プレイヤー リーダーボード

この例では、プレイヤーは惑星をテラフォーミングしており、ゲーム内で特定のアクションを行うことで経験値を獲得します。したがって、プレイヤー レベルでその経験値を追跡するためのリーダーボードを用意します。このプロセスは、[基本的なリーダーボードを作成する](/services/playfab/community/leaderboards/create-basic-leaderboard)などの他のチュートリアルで紹介された動作と同じです。ここで重要な点は、プレイヤーのみを対象とするため、EntityType パラメーターを `"title_player_account"` にする必要があるということです。

```C# theme={null}
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 1000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "XP",
                SortDirection = LeaderboardSortDirection.Descending,
            }        
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

### グループ リーダーボード

次に、例で紹介したゲームの側面、アライアンスに入っていきます。PlayFab では、`"group"` エンティティを使用してアライアンスを作成できます。このグループ エンティティにより、プレイヤーが参加できる構造を持つことができ、ゲームでこの種のシナリオを支えるロールやその他の興味深い機能も備えます。リーダーボードを作成する際には、2 つの点を明確にしておく必要があります。

* EntityType パラメーターは `"group"` である必要があります。
* このリーダーボードは独立しています。したがって、アライアンスにスコアを追加するのは、プレイヤーのリーダーボードとは切り離された手動プロセスです。この動作により、スコアがプレイヤーとどのように関連付けられるかにさまざまな方法があり、あるいはグループにのみ適用される新しい指標にすることも可能になります。

```C# theme={null}
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 1000,
        EntityType = "group",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Group XP",
                SortDirection = LeaderboardSortDirection.Descending,
            }        
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

## リーダーボードにデータを追加する

両方のリーダーボードを作成した後、それらにデータを追加する方法を確認する必要があります。前の例で述べたとおり、これらのリーダーボードは互いに独立しているため、アライアンス (グループ) のスコアの仕組みに関するカスタム ロジックを開発者が制御できます。

```C# theme={null}
public static async Task UpdateLeaderboardForPlayer(PlayFabAuthenticationContext context, string leaderboardName, string entityId, int score)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateLeaderboardEntriesRequest updateLeaderboardRequest = new UpdateLeaderboardEntriesRequest()
    {
        Entries = new List<LeaderboardEntryUpdate>()
        {
            new LeaderboardEntryUpdate()
            {
                EntityId = entityId,
                Scores = new List<string> { score.ToString()}                
            }
        },
        AuthenticationContext = context,
        LeaderboardName = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> updateResult = await leaderboardsAPI.UpdateLeaderboardEntriesAsync(updateLeaderboardRequest);
}
```

このシナリオでは、プレイヤーのリーダーボードにエントリを追加するコードとグループのリーダーボードにエントリを追加するコードは同じです。しかし、この動作は常に当てはまるわけではありません。プレイヤー用に 5 列のリーダーボードを持ち、グループ用には 1 列のみの別のリーダーボードを持つこともできるためです。複数列のリーダーボードについては、こちらのチュートリアルで詳しく説明しています: [リーダーボードでさらにできること](/services/playfab/community/leaderboards/doing-more-with-leaderboards)。

常に念頭に置いておくべき点として、サービスに正しい `EntityId` を提供する必要があります。プレイヤーのリーダーボードの場合、エンティティは `"title_player_account"` です。リーダーボードがグループで構成されている場合は、`"group"` であるエンティティを提供する必要があります。

## リーダーボードからデータを取得する

リーダーボードのデータを取得するには、GetFriendLeaderboard API を除いて、[リーダーボードでさらにできること](/services/playfab/community/leaderboards/doing-more-with-leaderboards)で説明されているすべてのオプションが利用できます。

## グループ リーダーボードの表示名

最後に、グループ リーダーボードでできるもう 1 つの詳細として、表示名をエンティティのグループ名に設定することができます。たとえば「Raiders」というアライアンスがある場合、このグループ名は `DisplayName` プロパティでエンティティにマッピングされます。

```C# theme={null}
public static async Task<CreateGroupResponse> CreateGroup(string groupName, PlayFabAuthenticationContext context)
{
    var request = new CreateGroupRequest
    {
        GroupName = groupName,
        AuthenticationContext = context
    };
    var response = await PlayFabGroupsAPI.CreateGroupAsync(request);

    SetDisplayNameRequest displayRequest = new SetDisplayNameRequest()
    {
        AuthenticationContext = context,
        DisplayName = groupName,
        Entity = new PlayFab.ProfilesModels.EntityKey()
        {
            Id = response.Result.Group.Id,
            Type = "group",
        },
    };

    PlayFabResult<SetDisplayNameResponse> updateNameResult = await PlayFabProfilesAPI.SetDisplayNameAsync(displayRequest);

    return response.Result;
}
```

この例では、`CreateGroupAsync` メソッドを呼び出してグループを作成します。この実行の最初のステップでは、Group オブジェクトを返します。これを使って表示名を設定します。`SetDisplayNameRequest` オブジェクトを使ってグループ名をエンティティにマッピングし、その後に `PlayFabProfilesAPI.SetDisplayNameAsync` メソッドを実行することで、このプロセスを行います。

## まとめ

このチュートリアルでは、次の操作の方法を学びました:

* グループ リーダーボードの作成。
* そのリーダーボードにデータを流し込む方法。
* リーダーボードの取得。
* グループ名を表示できるように displayName を変更する。

## 関連項目

* [リーダーボードでさらにできること](/services/playfab/community/leaderboards/doing-more-with-leaderboards)
* [基本的なリーダーボードを作成する](/services/playfab/community/leaderboards/create-basic-leaderboard)
* [手動ティア](/services/playfab/community/leaderboards/manual-tiers)
* [制限](/services/playfab/community/leaderboards/limits-leaderboards)
* [クォータ](/services/playfab/community/leaderboards/quota-leaderboards)
* [シーズナル リーダーボード](/services/playfab/community/leaderboards/seasonal-leaderboards)
* [統計によってプレイヤーをランキング付けする](/services/playfab/community/leaderboards/leaderboards-linked-to-stats)
* [リーダーボードにコンテキスト データを追加する](/services/playfab/community/leaderboards/metadata-leaderboards)
* [API リファレンス](/services/playfab/community/leaderboards/api-reference)
* [リーダーボードと Cloudscript](/services/playfab/community/leaderboards/leaderboards-cloudscript)
* [Playstream を使用したリーダーボード](/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [リーダーボードの制限](/ja-jp/services/playfab/community/leaderboards/limits-leaderboards.md)
- [手動ティア リーダーボード](/ja-jp/services/playfab/community/leaderboards/manual-tiers.md)
- [シーズナル リーダーボード](/ja-jp/services/playfab/community/leaderboards/seasonal-leaderboards.md)
- [リーダーボードのクォータ](/ja-jp/services/playfab/community/leaderboards/quota-leaderboards.md)
- [リーダーボードでさらにできること](/ja-jp/services/playfab/community/leaderboards/doing-more-with-leaderboards.md)
