> ## 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 の統計の詳細については、[統計の概要](/services/playfab/player-progression/statistics)を参照してください。

両方のサービスを使用するシューティング ゲームの例から始めます。ここでは、[基本的な統計を作成する](/services/playfab/player-progression/statistics/create-basic-statistics)のチュートリアルを活用し、ゲーム用の統計が既に作成されていることを前提として進めます。ここでは、プレイヤーが試合で長距離ショットを命中させるたびにそれを追跡します。プレイヤーの最良の長距離ショットを記録する統計と、長距離ショットを命中させた優秀なプレイヤーのリーダーボードを用意します。

## 統計にリンクされたリーダーボードを作成する

最初の手順は、統計サービスによって追跡された情報を入力として受け取ることができるリーダーボード定義を作成することです。以下の例では、C# SDK を使用してリーダーボード定義を作成する方法を示します。

```C# theme={null}

public static async Task CreateStatLinkedLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName, string statName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        EntityType = EntityType,
        Name = leaderboardName,
        SizeLimit = 1000,
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Distance",
                SortDirection = LeaderboardSortDirection.Descending,
                LinkedStatisticColumn = new LinkedStatisticColumn()
                {
                    LinkedStatisticName = statName,
                    LinkedStatisticColumnName = "Distance",
                }
            },
            new LeaderboardColumn()
            {
                Name = "Caliber of the bullet",
                SortDirection = LeaderboardSortDirection.Ascending,
                LinkedStatisticColumn = new LinkedStatisticColumn()
                {
                    LinkedStatisticName = statName,
                    LinkedStatisticColumnName = "Caliber",
                }
            }
        }
    };

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

ここで、以前に作成した他のリーダーボード定義との主な違いを説明します。`LinkedStatisticColumn` というプロパティを持つ `LeaderboardColumn` オブジェクトに注目してください。これにより、統計とリーダーボードの間にリンクを作成できます。マッピングを行うために、統計名と、その統計内の列名を指定する必要があります。

これを行うことで、統計サービスでプレイヤーの進捗を追跡し、その情報を使ってリーダーボード サービスがリンクされたリーダーボードに値を反映します。

## リーダーボードから統計のリンクを解除する

このサービスには、必要に応じて統計をリーダーボードからリンク解除する仕組みもあります。開発者がこの操作を行いたい理由は複数あります。たとえば、異なる構成のテストや、異なる統計へのマッピングなどです。以下の例では、C# SDK を使用してリーダーボードから統計のリンクを解除する方法を示します。

```C# theme={null}
public static async Task UnlinkLeaderboard(PlayFabAuthenticationContext context, string statName, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);

    UnlinkLeaderboardFromStatisticRequest unlinkLbRequest = new UnlinkLeaderboardFromStatisticRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        StatisticName = statName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> lbResponse = await leaderboardsAPI.UnlinkLeaderboardFromStatisticAsync(unlinkLbRequest);
}
```

この情報を使えば、必要に応じてリーダーボードから統計をリンクしたりリンク解除したりできます。留意すべき重要な制約がいくつかあります:

* リーダーボードは直接更新できません。自動的な仕組みを活用するには、常に統計の更新経由で行う必要があります。
* リーダーボードは、統計とは独立にバージョンをインクリメントすることはできません。
* リンク解除のプロセスを経ない限り、リーダーボードを削除することはできません。

## まとめ

このチュートリアルでは、統計によって動くリーダーボードを作成する方法と、サービスのリンクを解除する方法を学びました。他の機能の詳細については、次のページを参照してください:

* [基本的なリーダーボードを作成する](/services/playfab/community/leaderboards/create-basic-leaderboard)
* [シーズナル リーダーボード](/services/playfab/community/leaderboards/seasonal-leaderboards)
* [グループ リーダーボード](/services/playfab/community/leaderboards/group-leaderboards)
* [制限](/services/playfab/community/leaderboards/limits-leaderboards)
* [クォータ](/services/playfab/community/leaderboards/quota-leaderboards)
* [手動ティア](/services/playfab/community/leaderboards/manual-tiers)
* [リーダーボードでさらにできること](/services/playfab/community/leaderboards/doing-more-with-leaderboards)
* [リーダーボードにコンテキスト データを追加する](/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

- [API リーダーボード リファレンス](/ja-jp/services/playfab/community/leaderboards/api-reference.md)
- [リーダーボードでさらにできること](/ja-jp/services/playfab/community/leaderboards/doing-more-with-leaderboards.md)
- [基本的なリーダーボードを作成する](/ja-jp/services/playfab/community/leaderboards/create-basic-leaderboard.md)
- [Azure Functions を使用したリーダーボード](/ja-jp/services/playfab/community/leaderboards/leaderboards-cloudscript.md)
- [手動ティア リーダーボード](/ja-jp/services/playfab/community/leaderboards/manual-tiers.md)
