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

# プレイヤー セグメント全体への一括アクション

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

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

タスクは、あらゆるゲームのライブ運用における重要な部分です。プレイヤーとのエンゲージメントのための強力なツール セットを提供します。

例:

* 過去 2 週間にログインしたすべてのプレイヤーに特別なニュー イヤー ギフトを与える。
* 先週お金を使ったプレイヤーに (支出階層に基づいて) 報酬を与える。使った金額が大きいほど、より価値のあるギフトを与える。
* 最近のゲーム バグの影響を受けたすべてのプレイヤーの破損したプレイヤー状態を修復する。

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

## 前提条件

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

<img src="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" alt="Unicorn Battle - Launch Screen" width="2560" height="1440" data-path="images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-launch-screen.webp" />

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

<img src="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" alt="Unicorn Battle - Level 2" width="2560" height="1440" data-path="images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-level-two.webp" />

## ステップ 1 - セグメントを作成する

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

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

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

<img src="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" alt="Game Manager - PlayStream - Segments - High XP Players" width="1394" height="817" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-high-xp-players.png" />

## ステップ 2 - このセグメントのタスクを作成する

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

<img src="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" alt="Game Manager - PlayStream - Segments - Run Task" width="902" height="598" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-run-task.png" />

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

<img src="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" alt="Game Manager - Servers - Task - Create Task" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-create-task.png" />

## ステップ 3 - タスクにアクションを追加する

次に、タスクのセットアップを完了できます。

* 名前を **Reward High XP Players** に変更します。
* 次の説明を追加します: **レベル 2 以上のプレイヤーにギフトを与える**。
* **ADD ACTION** を選択します。
  * 提供されるフィールドに **Grant virtual currency** と入力します。
  * **Virtual Currency** コード: **GM** (**Gems** の略)。
  * 金額: **20**
* スケジューリングは今のところ **Manually** のままにしておきます。
* タスクを実行するために **SAVE AND RUN** ボタンを選択します。

<img src="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" alt="Game Manager - Servers - Task - Add Action - Save and Run" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-add-action-save-and-run.png" />

## ステップ 4 - タスクを監視する

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

<img src="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" alt="Game Manager - Servers - Tasks - Task Succeeded" width="1280" height="720" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-succeeded.png" />

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

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

タスクがまだ進行中の場合は、**Task Instance Detail** ビューで進行状況を確認し、残り時間の見積もりを確認できます。

<img src="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" alt="Game Manager - Servers - Tasks - Task Instance Details" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-instance-details.png" />

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

* **Players** タブに移動します。
* **Player** を選択します。
* 次に **Event History** タブを選択します。
* リストの最新イベントは **player\_virtual\_currency\_balance\_changed** である必要があり、**Player** の gems が **20** 増加していることが表示されるはずです。

<Note>
  このイベントを展開して詳細を表示できます。
</Note>

<img src="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" alt="Game Manager - Event History - Event Detail" width="1458" height="622" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-event-history-event-detail.png" />

## 次のステップ

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

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

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

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

<img src="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" alt="Game Manager - PlayStream - Segments - Players in 24 hours" width="780" height="815" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-players-in-24-hours.png" />

<img src="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" alt="Game Manager - Servers - Tasks - Scheduled Task" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-scheduled-task.png" />

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

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

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

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

   <img src="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" alt="Players - Leaderboards - Edit Leaderboard" width="571" height="541" data-path="images/playfab/data-analytics/acting-data/tutorials/players-leaderboards-edit-leaderboard.png" />

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

   <img src="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" alt="PlayStream - Event Actions - Edit Event Action" width="1043" height="943" data-path="images/playfab/data-analytics/acting-data/tutorials/playstream-event-actions-edit-event-action.png" />

3. Bulk Action タスクによって呼び出される 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` 関数を呼び出す新しいタスクを作成します。タスクを **保存** して **実行** することを忘れないでください。

   <img src="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" alt="Servers - Tasks - New Scheduled Task" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/servers-tasks-new-scheduled-task.png" />

5. このタスクからのイベントが PlayStream イベント デバッガーに表示されることに気付くはずです。

   <img src="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" alt="PlayStream - Dashboard - Event Debugger" width="3079" height="1050" data-path="images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-event-debugger.png" />

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

   <img src="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" alt="PlayStream - Dashboard - Raw Event JSON" width="1464" height="1923" data-path="images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-raw-event-json.png" />


## Related topics

- [プレイヤーセグメント](/ja-jp/services/playfab/player-progression/player-data/player-segments.md)
- [PlayFab ライブ サービス管理ドキュメント](/ja-jp/services/playfab/live-service-management/index.md)
- [プレイヤーセグメントの構成](/ja-jp/services/playfab/player-progression/player-data/player-segment-configuration.md)
- [Economy V2 のセグメント アクション](/ja-jp/services/playfab/economy-monetization/economy-v2/player-segmented-monetization/segment-actions.md)
- [プレイヤー セグメンテーション](/ja-jp/services/playfab/live-service-management/game-configuration/segmentation/segmentation-quickstart.md)
