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

# CloudScript でのエラー処理

> try/catch ブロックを使って PlayFab CloudScript のエラーをキャッチして調査し、API エラー コードを抽出し、CloudScript ダッシュボードから未処理のエラーを監視します。

このチュートリアルでは、CloudScript ハンドラー内でエラーを認識して処理する方法について説明します。

## 特定

最初のステップはエラーの特定です。キャッチされていないすべてのエラーはログに記録され、呼び出し元 (クライアント) へのレスポンスから利用できますが、`try/catch` ブロックを使って早期にキャッチすることもできます。

エラーを発生させてキャッチする次の CloudScript スニペットを参照してください。

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        let error = ex.apiErrorInfo.apiError.error; // In this case - "InvalidParams"
        let errorCode = ex.apiErrorInfo.apiError.errorCode; // In this case : 1000
    }
}
```

catch ブロック内でエラー コードがどのように抽出されているかに注目してください。エラーの完全な一覧については、[グローバル API メソッド エラー コードのドキュメント](https://docs.xbox.com/ja-jp/services/playfab/api-references/global-api-method-error-codes.md) を参照してください。

> [!NOTE]
>
> エラー コード単独でエラーを特定できます。

## ログ記録

未処理のエラーはすべてレスポンスに追加され、クライアントで問題を処理できるようになります。

同時に、CloudScript エラー エントリが作成され、CloudScript ダッシュボードで利用できる合計統計情報に追加されます。

![Game Manager - CloudScript Dashboard showing a graph of API errors](https://mintcdn.com/microsoft-4404708b/dqv53299jA1M-fNi/images/playfab/live-service-management/service-gateway/automation/cloudscript/tutorials/game-manager-cloudscript-dashboard.png?fit=max\&auto=format\&n=dqv53299jA1M-fNi\&q=85\&s=b223b50da990d93023537437490b0ed2)

例外を JSON 文字列の形式で強制的にログに記録するには、`log` オブジェクトを使ったエラー ログを利用します。

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        log.error(ex);
    }
}
```

最後に、後で分析で処理するためにタイトル/プレイヤー イベントを書き込むこともできます。

```javascript theme={null}
"use strict";

handlers.GenerateError = () => {
    try {
        server.GetPlayerStatistics({
            PlayFabId : "non-existing-player-id"
        });
    } catch (ex) {
        server.WriteTitleEvent({
            EventName : 'cs_error',
            Body : ex
        });
    }
}
```

## 回復

エラーからの回復は常に可能とは限りません。`InvalidArguments` のような問題では、プレイヤーに問題を報告する以外の選択肢はありません。

再試行戦略を適用できるエラーのサブセットも存在します。*再試行可能* なエラーの種類は [グローバル API メソッド エラー コード](https://docs.xbox.com/ja-jp/services/playfab/api-references/global-api-method-error-codes.md) に記載されています。

再試行戦略を適用する際には、次の要件を必ず *満たしてください*:

* 再試行のたびに、再試行間の遅延は *指数関数的に増加* させる必要があります。これにより、呼び出しが成功する確率が高まり、ゲームが PlayFab サーバーにスパムを送信するのを防ぐことができます (スパム送信は *さらに多くの* 拒否された呼び出しにつながります)。

* この再試行戦略は *選択的に* 適用し、再試行する価値のあるコードにのみ使用してください。

## CloudScript タイムアウト エラー

CloudScript API 呼び出しの実行時間は 4 秒に制限されています。

実行時間が 4 秒を超えると `InternalServerError` が発生し、PlayStream Event は次のような Logs オブジェクトを書き込みます:

```
    "Logs":[
        {
        "Level":"Error",
        "Message":"PlayFab API request failure",
        "Data":{
            "request":{
                "PlayFabId":"9437A5ADDAE3012D"
            },
            "error":"Timeout",
            "api":"/Server/GetPlayerSegments"
        }
        }
    ]
```

このエラーが発生した場合は、次のことができます:

* CloudScript を 4 秒未満で実行できる小さなコード セグメントに分割する。
* [Azure Functions を利用した CloudScript](https://docs.xbox.com/ja-jp/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart.md) に切り替える。この方法は、場合によってタイムアウト制限が長くなります。制限は [クイックスタート ガイド](https://docs.xbox.com/ja-jp/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/quickstart.md#execution-limits) で確認できます。


## Related topics

- [Game Saves のエラー処理に関する FAQ](https://docs.xbox.com/ja-jp/services/playfab/player-progression/game-saves/error-handling-faq.md)
- [マーケットプレイスのエラー処理](https://docs.xbox.com/ja-jp/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-error-handling.md)
- [SDK エラー処理のベスト プラクティス](https://docs.xbox.com/ja-jp/services/playfab/live-service-management/service-gateway/automation/cloudscript/sdk-error-handling-best-practices.md)
- [PlayFab ライブ サービス管理ドキュメント](https://docs.xbox.com/ja-jp/services/playfab/live-service-management/index.md)
- [カスタム CloudScript の作成](https://docs.xbox.com/ja-jp/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript.md)
