# イベント

> Understand how the Scheduler service and Unity Gaming Services produce events that Triggers service processes.

Scheduler サービスと Unity Gaming Services ではイベントが生成されます。イベントは、Triggers サービスに送信されます。そこでイベントは設定と照合され、対応する Cloud Code スクリプトまたはモジュールが実行されます。

## 発行されるイベント##emitted-events

Scheduler サービスと Unity Gaming Services は、トリガーを関連付けるイベントを発行します。

| 発行元                                                     | カスタマイズ可能 | イベントペイロード                 | 発行対象                 | ユースケース                                                                            |
| ------------------------------------------------------- | -------- | ------------------------- | -------------------- | --------------------------------------------------------------------------------- |
| [Unity Gaming Services](./supported-ugs-events.md)      | いいえ      | イベント固有のペイロードとバージョン管理で事前定義 | プレイヤーまたはゲーム状態の変更     | ゲーム内またはプレイヤーの状態変更に反応して、Cloud Code スクリプトまたはモジュールをトリガーする際に UGS によって発行されるイベントを使用します。 |
| [Scheduler サービス](../tutorials/schedule-events/rest-api) | はい       | スケジュール設定でユーザーが作成          | ユーザー定義の設定時刻または反復的な瞬間 | Cloud Code スクリプトまたはモジュールがいつトリガーされるかを制御する場合に Scheduler サービスによって発行されるイベントを使用します。    |

## 配信セマンティクス##delivery-semantics

デフォルトでは、イベントは at-least-once 配信セマンティクスを持ちます。これは、すべてのイベントが 1 回処理されることが保証されるものの、ネットワークの問題発生時に複数回処理される可能性があることを意味します。これを回避するための推奨されるベストプラクティスは、冪等性のある Cloud Code スクリプトおよびモジュールを作成することです。

## イベントの構造##event-structure

すべてのイベントには、イベントタイプ、ペイロードバージョンが含まれ、ペイロードを搬送します。

| フィールド            | 説明                                                                                | 例                                                          |
| ---------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| `eventType`      | イベントタイプは、発行サービス、イベント名、およびペイロードバージョンを含む文字列です。イベントタイプは、アソシエーションを作成するトリガー設定でも使用されます。 | `com.unity.services.scheduler.example-event.v1`            |
| `payloadVersion` | ペイロードバージョンは、ペイロードのバージョンを示す整数です。                                                   | 1                                                          |
| `payload`        | ペイロードは、イベントデータを含む文字列です。Cloud Code にスクリプトまたはモジュールパラメーターとして渡されます。                   | `"{\"someBoolean\": true, \"someString\": \"something\"}"` |

イベントタイプは、Scheduler サービスと UGS のどちらによって発行されるかに応じて若干異なります。

| イベントタイプ                                             | 発行元               | ペイロードバージョン | ペイロード  |
| --------------------------------------------------- | ----------------- | ---------- | ------ |
| `com.unity.services.scheduler.example-event.v1`     | Scheduler サービス    | 1          | ユーザー定義 |
| `com.unity.services.player-auth.signed-up.v1`       | 認証サービス            | 1          | 事前定義   |
| `com.unity.services.player-auth.signed-in.v1`       | 認証サービス            | 1          | 事前定義   |
| `com.unity.services.cloud-save.key-saved.v1`        | Cloud Save サービス   | 1          | 事前定義   |
| `com.unity.servics.leaderboards.reset.v1`           | Leaderboards サービス | 1          | 事前定義   |
| `com.unity.servics.leaderboards.score-submitted.v1` | Leaderboards サービス | 1          | 事前定義   |

Scheduler サービスによって発行されるイベントは、イベント名、ペイロードバージョン、およびペイロードをスケジュール設定で定義することでカスタマイズできます。UGS で発行されたイベントには、イベントタイプに応じて異なるペイロード構造があり、カスタマイズできません。

各イベントタイプが返す内容について詳しくは、[サポートされる UGS イベント](./supported-ugs-events.md) を参照してください。

## ペイロードバージョン管理##payload-versioning

ペイロードバージョン管理は、破壊的変更の回避に役立ちます。すべてのイベントに、イベントペイロードのペイロードバージョン管理が含まれます。

例えば、`com.unity.services.player-auth.signed-up.v1` はペイロードバージョンが `1` の Authentication サービスによって発行されるイベントタイプです。これにより、同じイベントのさまざまなペイロードバージョンに対して異なるトリガーを設定できます。

> **Note:**
>
> **ノート:** ペイロードバージョン管理は、スケジュールされたイベントと UGS によって発行されたイベントの両方でサポートされます。ただし、スケジュールされたイベントのペイロードバージョンとコンテンツはカスタマイズできますが、UGS によって発行されたイベントはカスタマイズできません。

### スケジュールされたイベントのペイロード##scheduled-event-payload

Scheduler サービスによって発行されたイベントには、カスタマイズ可能なペイロードがあります。ペイロードは、スケジュール設定で定義されます。

例えば、スケジュールされたイベントのペイロードに新しいフィールドを追加する場合は、ペイロードの新しいバージョンを作成し、ペイロードの新しいバージョンを使用するようにトリガーを作成できます。

スケジュール設定では以下のようになります。

```json
{
"name" : "recurring-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}
```

上記のサンプルの結果は `com.unity.services.scheduler.example-event.v1` のイベントタイプになります。

このイベントタイプのトリガーを設定できます。

```json
{
"name" : "example-trigger",
"eventType" : "com.unity.services.scheduler.example-event.v1",
"actionUrn" : "urn:ugs:cloud-code:my-script",
"actionType" : "cloud-code"
}
```

イベントのペイロードに新しいフィールドを追加する場合は、ペイロードの新しいバージョンを作成し、ペイロードの新しいバージョンを使用するようにトリガーを作成できます。

```json
{
"name" : "recurring-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 2,
"payload": "{\"someBoolean\": true, \"someString\": \"something\", \"someNewField\": \"something else\"}"
}
```

この結果は `com.unity.services.scheduler.example-event.v2` のイベントタイプになります。これにより、新しいトリガーを新しいイベントタイプに関連付けることができます。

## スケジュールされたイベント##scheduled-events

スケジュールされたイベントを発行するには、スケジュール設定を作成する必要があります。詳細については、[イベントのスケジュール](../tutorials/schedule-events/rest-api) を参照してください。

スケジュール設定をデプロイすることにより、設定した時刻または反復的な瞬間に発行されるイベントを作成できます。

以下は、スケジュール設定のサンプルです。

```json
{
"name" : "example-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}
```

* `name`: スケジュールの名前。プロジェクトごとに一意である必要があります。
* `eventName`: イベントのプロジェクトスコープ名。トリガーのイベントタイプを構成するために使用されます。
* `type`: スケジュールのタイプ。`one-time` または `recurring` である必要があります。
* `schedule`: イベントがいつ発生する必要があるかを指定します。`type` フィールドに応じて、タイムスタンプまたは cron 式である必要があります。
* `payloadVersion`: ペイロードのバージョンを示す整数。トリガーのイベントタイプを構成するために使用されます。
* `payload`: パラメーターを Cloud Code スクリプトまたはモジュールに転送するためにイベントペイロードとして使用される `JSON` オブジェクト。

> **Note:**
>
> **ノート:** 制限が適用されます。詳細については、[制限](/triggers/limits.md) を参照してください。

### 1 回限りのスケジュール##one-time-schedule

1 回限りのスケジュールは、特定の時刻に実行される単一のイベントです。以下のようになります。

```json
{
"name" : "one-time-schedule",
"eventName": "example-event",
"type": "one-time",
"schedule": "2020-01-01T00:00:00Z",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}
```

`schedule` フィールドは、イベントがいつトリガーされるかを定義する RFC3339 タイムスタンプです。

> **Note:**
>
> **ノート:** 将来のタイムスタンプを宣言する必要があります。

### 反復的なスケジュール##recurring-schedule

反復的なスケジュールは、特定の時間間隔で実行される一連のイベントです。以下のようになります。

```json
{
"name" : "recurring-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}
```

`schedule` フィールドは、イベントがいつトリガーされるかを定義する cron 式です。

## Triggers とのオーバーラップ##overlap-with-triggers

イベントがトリガーとどのように関連付けられているかを確認するには、[Triggers 構造](../tutorials/define-triggers/trigger-structure) を確認してください。
