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

# プレイヤー セグメント全体に対する一括アクション

> ターゲット セグメント内のすべてのプレイヤーに対して、報酬の付与など 1 つ以上の一括アクションを実行する PlayFab タスクを作成するためのチュートリアルです。

このチュートリアルでは、セグメント内のすべてのプレイヤーに対して 1 つ以上のアクションを実行するタスクを作成するために必要な手順について説明します。

タスクは、あらゆるゲームのライブ運用において不可欠な要素です。タスクを使用すると、プレイヤーとのエンゲージメントを高めるための強力なツール セットを利用できます。

次のような例が考えられます:

* 過去 2 週間にログインしたすべてのプレイヤーに、新年の特別なギフトを贈る。
* 過去 1 週間にお金を使ったプレイヤーに (支出の段階に基づいて) 報酬を与え、使った金額が多いほど価値の高いギフトを贈る。
* 最近のゲームのバグの影響を受けたすべてのプレイヤーについて、破損したプレイヤーの状態を修正する。

このチュートリアルでは、**Unicorn Battle サンプル アプリ** に基づいて、**2,725 XP** を超えるすべてのプレイヤーに特別なギフトを付与します。

## 前提条件

このチュートリアルを実行するには、Unicorn Battle サンプル アプリをインストールする必要があります。詳細については [ブログ](https://blog.playfab.com/blog/check-out-unicorn-battle) を参照するか、[GitHub リポジトリ](https://github.com/PlayFab/UnicornBattle) に直接アクセスして、そこに記載されている手順に従ってください。

![Unicorn Battle - 起動画面](https://mintcdn.com/microsoft-4404708b/YzmQFdAfhA-NTCPa/images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-launch-screen.webp?fit=max\&auto=format\&n=YzmQFdAfhA-NTCPa\&q=85\&s=682e9a99bb6293229a452095255ce2f2)

キャラクターを少なくとも **レベル 2** (**2,725 XP** ポイントで到達) までレベルアップさせるために、*何回か* バトルをプレイしてください。

![Unicorn Battle - レベル 2](https://mintcdn.com/microsoft-4404708b/YzmQFdAfhA-NTCPa/images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-level-two.webp?fit=max\&auto=format\&n=YzmQFdAfhA-NTCPa\&q=85\&s=0f47eb0af3bb618e2aa449df163305f0)

## 手順 1 - セグメントを作成する

最初の手順は、このアクションの影響を受けるプレイヤーのグループを定義するセグメントを作成することです。この場合、**2,725 XP** を超えるすべてのプレイヤーとして定義される **High XP セグメント** を作成する必要があります:

* 左側のメニューから **PlayStream** を選択します。
* **\[Segments]** タブを選択します。
* 次に **\[New Segment]** ボタンを選択します。
* **\[Segment Name]** を **High XP Players** にします。
* **\[Player]** として定義し、**Total\_XP Gained** という **\[Statistic Value]** が **2725** より大きいという条件にします。

> [!NOTE]
>
> **注:** 現在のスケジュールされたタスク システムでは、セグメントごとに 1 秒あたり 10 ～ 15 個のタスクを処理できます。セグメントを設計する際は、セグメントのサイズとタスクの実行にかかる時間を事前に計画してください。タスクの実行時間に制限はありませんが、タスクを特定の時間枠内で実行する必要がある場合は、セグメントのサイズを適切に設定する必要があります。

![Game Manager - PlayStream - セグメント - High XP Players](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-high-xp-players.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=277244d7f9813aa8821acc626b4a903a)

## 手順 2 - このセグメントのタスクを作成する

* **\[Segments]** タブを選択します。
* 次に **\[RUN TASK …]** を選択します。

![Game Manager - PlayStream - セグメント - タスクの実行](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-run-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=82870774c3122881a0419e880078401d)

これにより、**\[Servers]**->**\[Tasks]** タブの **\[Create Task]** ビューに移動し、選択したセグメントに基づいてさまざまなフィールドが事前に入力されます。

![Game Manager - サーバー - タスク - タスクの作成](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-create-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=155bf1e0a504d077fc5aeea920791f65)

## 手順 3 - タスクにアクションを追加する

次に、タスクの設定を完了します。

* 名前を **Reward High XP Players** に変更します。
* 説明として **Give a gift to Players who are level 2 or higher** を追加します。
* **\[ADD ACTION]** を選択します。
  * 表示されたフィールドに **Grant virtual currency** と入力します。
  * **\[Virtual Currency]** コード: **GM** (**Gems** の略)。
  * Amount: **20**
* スケジュールは、今のところ **\[Manually]** のままにします。
* **\[SAVE AND RUN]** ボタンを選択してタスクを実行します。

![Game Manager - サーバー - タスク - アクションの追加 - 保存して実行](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-add-action-save-and-run.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=88be2126823b5296a972acebe78fb0e8)

## 手順 4 - タスクを監視する

**\[Tasks]** ビューには、実行中のタスクが表示されます。最初はタスクの状態が **InProgress** になりますが、セグメントが小さいため、すぐに **Succeeded** に変わります。

![Game Manager - サーバー - タスク - タスク成功](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-succeeded.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=f947e3bac92c4b78e3dd01f55d9a1ca3)

次に、タスクの実行の詳細を確認しましょう。以前に実行された **\[Tasks]** の一覧で、完了したタスクを選択します。次のような重要な情報が表示されます:

* 処理されたプレイヤーの数。
* タスクが開始された日時。
* 完了までにかかった時間。
* 起動時のパラメーター。
* 実行したユーザー。
* 手動でスケジュールされたかどうか、など。

タスクがまだ進行中の場合は、**\[Task Instance Detail]** ビューで進行状況と推定残り時間を確認できます。

![Game Manager - サーバー - タスク - タスク インスタンスの詳細](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-instance-details.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=6a29866408f6240c680cc1a48d0d0130)

タスクが正常に実行されたことを確認するには:

* **\[Players]** タブに移動します。
* 対象の **プレイヤー** を選択します。
* 次に **\[Event History]** タブを選択します。
* 一覧の最新のイベントは **player\_virtual\_currency\_balance\_changed** になっているはずで、**プレイヤー** のジェムが **20** 増加したことが示されています。

> [!NOTE]
>
> このイベントを展開すると、詳細を確認できます。

![Game Manager - イベント履歴 - イベントの詳細](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-event-history-event-detail.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=8f5be92d094f953e458edc23c05339b9)

## 次のステップ

このチュートリアルでは、セグメント内のすべてのプレイヤーに対してアクションを実行するための手順を紹介しましたが、タスクを使用してできることは他にもたくさんあります。

試すことができるその他のアイデアをいくつか紹介します...

### タスクをスケジュールする

タスクを手動で実行する必要はありません。タスクを *定期的* に *自動* で実行するようにスケジュールできます。たとえば、過去 24 時間以内にゲームをプレイしたすべてのプレイヤーのセグメントを作成し、スケジュールされたタスクを毎日実行して、それらのプレイヤーに XP ブーストを与えることができます。

![Game Manager - PlayStream - セグメント - 24 時間以内のプレイヤー](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-players-in-24-hours.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=011c1636bdcf356fef0958937679cdb6)

![Game Manager - サーバー - タスク - スケジュールされたタスク](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-scheduled-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=b818b7055457a8d9e13d6128d9e0e31b)

### 各プレイヤーに対して CloudScript を実行する

一括アクションの最も強力な使用方法は、各プレイヤーに対して任意の CloudScript 関数を実行することです。この CloudScript では、アイテムや通貨の付与、プレイヤー データの検査や変更など、PlayFab サーバー API で実行できるあらゆることを実行できます。

たとえば、毎週リセットされるイベント リーダーボードがあり、すべてのプレイヤーを対象に、リセット前の *最後* のイベントの値に基づいて報酬を与えたいとします。以下の例では **Unicorn Battle** を使用しています。

1. 毎週リセットされ、集計方法 **Last** を使用する新しい統計 **Event\_QuestsCompleted** を作成します。

   ![プレイヤー - リーダーボード - リーダーボードの編集](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/players-leaderboards-edit-leaderboard.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=dc418906c884b0c685d0a4d05393dd7a)

2. `Total_QuestsCompleted` が変更されるたびにこの `Event_QuestsCompleted` 統計をインクリメントする、新しい PlayStream アクションを作成します。

   ![PlayStream - イベント アクション - イベント アクションの編集](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-event-actions-edit-event-action.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=7f0d65c83146783af200454981eec9c6)

3. 一括アクション タスクによって呼び出される CloudScript 関数を作成します。この関数は、プレイヤーを順に処理し、最後の値に基づいて報酬を与えます。

```javascript theme={null}
// this function will be called as a bulk action by a scheduled task for players in a segment
handlers.GiveTieredReward = function (args, context) {
    var profile = context.playerProfile;

    var statVersion = 0;        // set to whatever version you need to use

    var getStatRequest = {};
    getStatRequest.PlayFabId = profile.PlayerId;
    getStatRequest.StatisticNameVersions = [{ "StatisticName": "Event_QuestsCompleted", "Version": statVersion }];

    try {
        getStatRequest.PlayerResult = server.GetPlayerStatistics(getStatRequest);
    } catch (e) {
    };

    if (getStatRequest.PlayerResult && getStatRequest.PlayerResult.Statistics.length > 0) {
        getStatRequest.lastScore = getStatRequest.PlayerResult.Statistics[0].Value
    }

    if (getStatRequest.lastScore && getStatRequest.lastScore > 2) {
        // give gift to all players with more than 2 quests completed in last event
        // in a real event we would want to use a lookup table of gifts
        // but here we are just hard-coding it
        var giftRequest = {};
        giftRequest.PlayFabId = profile.PlayerId;
        giftRequest.ItemIds = ["CrystalKey"];
        giftRequest.grantResult = server.GrantItemsToUser(giftRequest);
        return giftRequest;
    } else {
        return getStatRequest;
    }
}
```

4. 新しい CloudScript のバージョンを **Live** に設定し、すべてのプレイヤーに対して `GiveTieredReward` 関数を呼び出す新しいタスクを作成します。タスクの **\[Save]** と **\[Run]** を忘れずに行ってください。

   ![サーバー - タスク - 新しいスケジュールされたタスク](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/servers-tasks-new-scheduled-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=984b0ca050712fd0ad357ed1aa8365dd)

5. このタスクからのイベントが PlayStream イベント デバッガーに表示されることがわかります。

   ![PlayStream - ダッシュボード - イベント デバッガー](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-event-debugger.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=aed7ba302609d3de83967a15e6ffaff4)

6. (タイム スタンプを選択して) 任意の player triggered action executed CloudScript イベントを選択すると、各プレイヤーの CloudScript 実行の詳細な結果を確認できます。これには、CloudScript 実行時点のプレイヤー プロファイルのスナップショットなど、有用な診断情報が含まれます。

   ![PlayStream - ダッシュボード - 生のイベント JSON](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-raw-event-json.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=02ea8cca957596e793448dfa583d7c0c)


## Related topics

- [セグメント内プレイヤーに対するアクション タスク インスタンスの取得](https://docs.xbox.com/ja-jp/services/playfab/api-references/rest/admin/scheduled-task/get-actions-on-players-in-segment-task-instance.md)
- [セグメント内プレイヤーに対するアクション タスクの作成](https://docs.xbox.com/ja-jp/services/playfab/api-references/rest/admin/scheduled-task/create-actions-on-players-in-segment-task.md)
- [PlayFab ライブ サービス管理ドキュメント](https://docs.xbox.com/ja-jp/services/playfab/live-service-management/index.md)
- [Economy V2 のセグメント アクション](https://docs.xbox.com/ja-jp/services/playfab/economy-monetization/economy-v2/player-segmented-monetization/segment-actions.md)
- [プレイヤー セグメントの構成](https://docs.xbox.com/ja-jp/services/playfab/player-progression/player-data/player-segment-configuration.md)
