Partner Center の構成
タイトルの XBOX サービスと Game Saves を有効化する
Game Saves API を使用するには、Partner Center で次の手順を完了してください。- XBOX サービスを有効化します。
- Partner Center にサインインします。
- 自分のタイトルに移動し、設定で XBOX サービスを有効化します。この手順の詳細については、Setting up an app or game at Partner Center, for Managed Partners を参照してください。
- サービス構成識別子 (SCID) を取得します。すべての読み取りおよび書き込み操作は、SCID に関連付けられている必要があります。SCID は Game Saves の初期化にも使用されます。
- Partner Center では、タイトルの XBOX services > XBOX settings タブに SCID があります。このページでは、Microsoft アカウント (MSA) の App ID (MSAAppID) も確認できます。

- Partner Center では、タイトルの XBOX services > XBOX settings タブに SCID があります。このページでは、Microsoft アカウント (MSA) の App ID (MSAAppID) も確認できます。
開発シナリオ
コード内のどこに Game Saves を統合すべきか?
Game Saves のロジックはユーザーのサインインに依存します。ユーザーサインインフローの近くに Game Saves コードを追加してください。ゲームセーブデータが破損しないようにするにはどうすればよいか?
データを安全に保存し、破損を回避するには、以下の手順に従います。このガイダンスは、すべてのセーブ操作に適用されます。- 一時ファイルに書き込みます。
- ライブセーブを上書きするのではなく、新しいファイル (例:
save.tmp) にセーブデータをシリアライズします。この手順により、書き込み途中でプロセスが中断された場合に既存のセーブが保護されます。
- ライブセーブを上書きするのではなく、新しいファイル (例:
- 書き込みがディスクに完全にコミットされたら、書き込みハンドルを閉じます。
- Win32 の ReplaceFile を使用して、古いセーブファイルを新しい一時ファイルにアトミックに置き換えます。
オフラインデバイスをサポートするにはどうすればよいか?
Game Saves の初期化前と後の両方で接続が失われた場合に、タイトルがどのように動作するかを決定するのは開発者の責任です。 オフラインの動作の詳細については、Understanding the Game Saves sync flow を参照してください。認識しておくべきユーザー操作は?
OS は、操作にユーザー入力が必要な場合にシステムプロンプトを表示します。これらのプロンプトの詳細については、Game Saves dialogs を参照してください。ローカルおよびデバイスのみに保存する方法はあるか?
Game Save の初期化プロセスにnull のユーザーハンドルを渡すと、システムはマシン専用のプロバイダーを作成します。データはローカルに保存され、デバイス上に永続化されます (最大 256 MB)。データはクラウドに同期されません。
Game Saves ストレージの詳細については、Game Saves storage systems を参照してください。
デバイス経由でのゲームセーブの管理
File Explorer を使用して PC 上のローカルゲームセーブにアクセスする
タイトルが PC 上で動作する場合、ファイルに直接アクセスできます。Game Saves API の実装によっては、次の場所でローカルゲームセーブにアクセスできます。
PC 上でデータを操作しても、同期ロジックは引き続き適用されます。たとえば、タイトルがロックを持っていない状態でデータを変更すると、競合が発生します。
コンソール上のローカルゲームセーブにアクセスする
コンソールのセーブデータは XBOX UI から管理します。以下の手順でアクセスします。- XBOX コントローラーの Home ボタンを選択します。
- My games & apps > See all を選択します。
- 自分のゲームにカーソルを合わせて、View ボタンを選択します。
- Saved data を選択します。

- システム UI を使用してコンソール上のデータを削除しても、クラウドに保存されているコピーは削除されません。タイトルを再起動すると、クラウドからデータが同期されます。
- マシンプロバイダーのデータは、名前のないユーザーとして表示されます。このデータはデバイス上に留まり、クラウドに同期されず、デバイスに紐付けられます。
テストシナリオ
テストケースを作成する際には、データ検証をゲームセーブロジックから分離してください。ゲームセーブがクラウドと正しく同期されるかテストする
正しく同期されるかをテストするには、以下の手順を実行してください。テストフローによって動作を検証します。XGameSaveFiles:
- SCID が正しいことを確認します。
- 正しいユーザーハンドルを使用していることを確認します。
- 現在のゲームセッション中に、タイトルが
XGameSaveFilesGetFolderWithUIAsyncを呼び出していることを確認します。タイトルがサスペンド状態から復帰した場合は、この関数を呼び出してください。- Fiddler を使用して、ロックが取得されたことを確認します。
- このパスを保存し、データがアップロードされていることを後で確認するために使用します。
XGameSaveFilesGetFolderWithUIAsyncから提供されたファイルパスにデータを書き込みます。- タイトルを終了またはサスペンドします。
- OS がデータを自動的にクラウドへアップロードしてロックを解放するまで、10~30 秒間待機します。
- Fiddler を使用して、データがアップロードされ、ロックが解放されたことを確認します。
XGameSaveFilesGetFolderWithUIAsyncによって提供されたフォルダー内のデータを手動で削除します。- コンソールでは、プレイヤー設定からこのデータにアクセスします。
- タイトルを再度起動し、ユーザーのサインインを試みます。
- クラウドからのアクティブなダウンロード同期を示す同期ダイアログが表示されます。
ゲームセーブが正しくローミングするかテストする
データがローミングするかを確認するためのテスト計画については、XR-052-06 Test Plan を参照してください。マイグレーションシナリオ
タイトル間でゲームセーブを共有する
あるタイトルから別のタイトルへデータを転送またはアクセスするには、2 つの手順を完了します。- Partner Center で、アクセスしたいタイトルのアクセスポリシーを変更します。
- ソースコードで両方のタイトルの Game Saves プロバイダーを初期化します。
アクセスポリシーを変更する
タイトルは、アクセスポリシーを構成することで、自身のゲームセーブデータにアクセスできるタイトルを制御します。- Partner Center に移動します。
- Apps and games > <your title> > Gameplay settings を選択します。
- Gameplay Settings で Access Policies を選択し、Connected Storage を展開します。
- Add app/service を選択し、アクセスを提供したいタイトルを追加します。
- タイトルの追加が完了したら、Save を選択してから Publish を選択します。変更は 1 時間以内に反映されます。

Game Save プロバイダーを初期化する
これで最初のタイトルにアクセスする権限が得られたので、もう一方のタイトルからXGameSave データを読み取ることができます。
XGameSaveを使用している場合は、各タイトルに対してXGameSaveInitializeProviderまたはXGameSaveInitializeProviderAsyncを呼び出します。XGameSaveFilesを使用している場合、プロバイダーは暗黙的に初期化されます。各タイトルに対してXGameSaveFilesGetFolderWithUiAsyncを呼び出します。
XGameSave と XGameSaveFiles の相互運用
タイトルによっては、XGameSave と XGameSaveFiles を併用する必要がある場合があります。典型的な理由は次のとおりです。
- パブリッシャーがコンソール上にすでに
XGameSaveを使用している既存タイトルを持っている。 - パブリッシャーがその既存タイトルを
XGameSaveFilesを使用するように更新したくない。 - パブリッシャーが、PC タイトルに
XGameSaveFilesを追加する方がXGameSaveを使用するより簡単だと考えているが、それでも PC、コンソール、および XBOX ゲームストリーミング間でのクロスセーブをサポートしたい。
XGameSave と XGameSaveFiles の間の移行は比較的簡単です。タイトルが XGameSaveFilesGetFolderWithUiAsync を呼び出すと、次のルールを使用してコンテナーとブロブがディレクトリとファイルにマッピングされます。
- コンテナー名内のスラッシュ (/) は、そのファイルが配置されるディレクトリ構造を作成します。
- 次の文字は
XGameSaveFilesで無効です。システムがこれらの文字を検出した場合、アンダースコア (_) にマッピングされます。- \0 から \001f までの文字 (両端を含む)。
- 次の文字は
XGameSaveFilesで有効ではありません。システムがこれらの文字を検出した場合、ピリオド (.) にマッピングされます。- 二重引用符 (”)
- 未満記号 (<)
- より大きい記号 (>)
- パイプ (|)
- アスタリスク (*)
- クエスチョンマーク (?)
- バックスラッシュ (\)
- ブロブ名内のスラッシュ (/) は、ファイル名内のピリオド (.) にマッピングされます。
- ファイルは 16 MB に制限されています。
XGameSaveの最大アップロードサイズは 16 MB です。
XGameSaveFiles から XGameSave に戻る場合、ファイル名が変更されていない、または移動されていなければ、元のコンテナー名とブロブ名が復元されます。
以前のタイトルをノーコードクラウドセーブで PC Game Saves に移植する
PC Game Pass に移植する一部のタイトルでは、ノーコードクラウドセーブソリューションが必要になる場合があります。この要件は、以下のシナリオで発生する可能性があります。- タイトルが x86 アプリケーションとして動作する。パッケージ形式でのみ Microsoft Game Development Kit (GDK) を使用している。
- Unreal Engine の Blueprint や Unity の Bolt などのツールを使用して、カスタムコードなしで作成されたタイトル。
- タイトルが終了された。
- 追跡対象のユーザーがサインアウトした。
- PC の電源状態が変化した。
- タイトルが指定されたセーブ領域に最後に書き込みを行ってから 30 分が経過した。
XGameSaveFiles の上に構築されており、ファイルサイズおよびユーザーごとのストレージ制限に関するすべての制限を共有します。ファイルは 64 MB に制限されています (XGameSave または Connected Storage との相互運用が必要な場合は 16 MB)。デフォルトでは、ユーザーごとのストレージは 256 MB に制限されています。より大きなユーザーごとのストレージ制限が必要なタイトルは、Developer Partner Manager (DPM) と協力して例外を申請できます。
ディレクトリおよびファイル名には特定の命名規則と文字制限があります。詳細については、XGameSaveFiles path logic を参照してください。
ノーコードクラウドセーブでは、
wdapp install を使用してタイトルをパッケージ化されたビルドとして起動する必要があります。.exe を直接起動しても、クラウドセーブのリダイレクトは有効化されません。パッケージ化されたビルドが実行される場合、NoCodePCRoot を通じて書き込まれるセーブは、XGameSaveFiles が管理するストレージにリダイレクトされます。その後に .exe を直接起動すると、物理的な NoCodePCRoot フォルダーが読み取られますが、これは空である可能性があり、セーブが見つからないように見える原因となります。この問題を回避するには、常に wdapp install を使用してパッケージ化されたビルドでノーコードクラウドセーブをテストしてください。ノーコードクラウドセーブを有効化する
ノーコードクラウドセーブを有効化するには、次の手順を完了してください。MicrosoftGame.configファイルを変更します。- シンプル化ユーザーモデルを有効化します。
- セーブファイルのルートフォルダーを指定します。
- タイトルに対応する SCID を指定します。
NoCodePCRoot に指定するルートフォルダーは、少数のオプションのいずれかを基準とする必要があります。
RelativeTo の値には SavedGames を使用してください。Saved Games フォルダー (%USERPROFILE%\Saved Games) は Windows の既知のフォルダー ID FOLDERID_SavedGames に対応します。OneDrive はデフォルトではこのフォルダーを同期しません。AppData (%APPDATA%) などの他の場所の使用は避けてください。OneDrive がこれらの場所を同期し、クラウドセーブの同期と競合を引き起こす可能性があります。FOLDERID_SavedGames の詳細については、SHGetKnownFolderPath を参照してください。<NoCodePCRoot RelativeTo="SavedGames">savegame1.sav</NoCodePCRoot> のようにファイル名を直接使用することは無効です。savegame1.sav は無視されます。<NoCodePCRoot> は、特定のファイルではなく、ディレクトリパスを定義することを目的としています。
