# 設定のキャッシュ

> Understand how Economy caches configurations to ensure consistency across player devices.

Remote Config および [Game Overrides](/game-overrides/.md) は、設定割り当てハッシュを利用してプレイヤー設定をキャッシュします。Economy サービスは、不必要なネットワーク呼び出しを回避するために、設定割り当てハッシュを長時間キャッシュします。

## 設定割り当てハッシュ##config-assignment-hash

### 設定割り当てハッシュとは何か##what-does-the-config-assignment-hash-represent?

ConfigAssignmentHash は、Remote Config、Game Overrides および Economy プロジェクト設定における、プレイヤーのデータのスナップショットの一意識別子です。

特に Economy では、スナップショットは Economy プロジェクト設定 (アイテム定義、通貨定義など) のみを対象とし、プレイヤーの残高やインベントリは含まれません。

### Cloud Code および Economy SDK での設定キャッシュ##config-caching-with-cloud-code-and-economy-sdk

Economy Cloud Code SDK および C# SDK で設定割り当てハッシュを使用する方法の詳細については、[Game Overrides - Cloud Code](./game-overrides-cc.md) および [Game Overrides - Economy](./game-overrides-economy.md) を参照してください。

### 設定割り当てハッシュへのアクセス##accessing-the-configuration-assignment-hash

ある時点で、他の Unity サービスで使用するために、プレイヤーの現在の設定割り当てハッシュを取得する場合があります。ハッシュは Configuration 名前空間から取得できます。

#### GetConfigAssignmentHash##getconfigassignmenthash

プレイヤーの現在の設定割り当てハッシュを文字列として取得します。存在しない場合は `null` を返します。

```cs title="C#"
EconomyService.Instance.Configuration.GetConfigAssignmentHash();
```

#### SyncConfigurationAsync##syncconfigurationasync

認証済みプレイヤーの最新設定をフェッチし、将来の Economy API 呼び出しのために設定割り当てハッシュを保存します。このメソッドを呼び出してから他の Economy 呼び出しを行うことを推奨します。こうすることで、正しい設定割り当てハッシュが確実に使用されます。

```cs title="C#"

EconomyService.Instance.Configuration.SyncConfigurationAsync();
```

### 注意事項##pitfalls

#### キャッシュされた設定割り当てハッシュのために Economy の変更が反映されない##economy-changes-not-being-reflected-due-to-a-cached-config-assignment-hash

Economy プロジェクト設定または Game Overrides に変更を加えても、Cloud Code の実行と Economy SDK 呼び出しの両方は、最後にキャッシュされた設定割り当てハッシュを使用し続けます。

この問題を回避するには、API 呼び出しを行う前に、最新の設定割り当てハッシュをフェッチするよにしてください。

Cloud Code の場合は、スクリプトまたはスクリプト内の API 呼び出しに、最新の設定割り当てハッシュをパラメーターとして渡すことを推奨します。

また、Cloud Code スクリプトの開始時に最新設定割り当てハッシュをフェッチして、スクリプト内の API 呼び出しに渡すこともできます。

```js title="Cloud Code JS 例"
const { CurrenciesApi, ConfigurationApi } = require("@unity-services/economy-2.4");

module.exports = async ({ params, context, logger }) => {
  const currenciesApi = new CurrenciesApi({ accessToken: context.accessToken });
  const configApi = new ConfigurationApi({ accessToken: context.accessToken });
  const currencyId = "COIN";

  try {
    // Retrieve the player config to get the configAssignmentHash.
    // This is needed to ensure the currency is synced
    var config = await configApi.getPlayerConfiguration({
      playerId: context.playerId,
      projectId: context.projectId,
    });

    const result = await currenciesApi.incrementPlayerCurrencyBalance({
      currencyId,
      playerId: context.playerId,
      projectId: context.projectId,
      configAssignmentHash: config.data.metadata.configAssignmentHash,
      currencyModifyBalanceRequest: { amount: 10 },
    });

    return result.data;
  } catch (err) {
    logger.error("Failed to increment currency for player", { "error.message": err.message });
    return;
  }
};
```

### 例外##exceptions

設定割り当てハッシュが見つからないことを示す `EconomyException` が発生することがあります。

この例外の `Reason` は `EconomyExceptionReason.ConfigAssignmentHashInvalid` です。

これを解決するには、`Configuration` メソッド (例えば `GetCurrenciesAsync()`) のどれかを使用して再び Economy 設定をフェッチします。こうすると、更新された設定割り当てハッシュを SDK が取得でき、通常どおり呼び出しを行えるようになります。
