# 古い保存シェイプを意図的に移行する

> 以前のゲームバージョンが保存したデータの読み取り方を決め、既知の形式を使う前に移行します。

- URL: https://oneshotgems.ai/ja/topics/local-storage-game-versioning
- カテゴリ: ゲーム開発者向け
- 種類: ガイド
- 更新日: 2026年10月5日

状態保存テストでは、意図した値が持続するかどうかが尋ねられます。バージョン管理は、別の質問に答えます。それは、新しいゲーム ビルドが古いビルドによって書き込まれたデータを読み込んだ場合に何が起こるべきかということです。バージョン 1 がベスト スコアを数値として保存し、バージョン 2 がプロファイル オブジェクトを保存している場合、古い形状を新しいものであるかのように読み取ると、メニューが中断されたり、進行状況が黙って破棄されたりする可能性があります。保存されたデータの横にバージョンを配置し、既知の以前のシェイプの明示的な移行を記述します。

## 小さなバージョン付きデータオブジェクトに値を保存する

240 などの単純なスコアを保存する代わりに、{ version: 2, bestScore: 240, settings: { sound: true } } などの JSON オブジェクトを保存します。ロード時にテキストを解析し、それがオブジェクトであることを確認し、フィールドを使用する前にそのバージョンを検査します。 JSON.parse は無効な JSON に対して SyntaxError をスローする可能性があるため、プレーヤーが開始する前に起動を停止するのではなく、定義されたフォールバックを使用して不正なテキストを処理します。

データオブジェクトを小さく保ち、各バージョンの意味を記録します。バージョン番号だけで検証が済むと考えないでください。バージョン2と記された値でも、不完全だったり型が違っていたりすることがあります。現行ビルドが実際に依存するフィールドを確認します。たとえばbestScoreは有限かつ0以上の数値、サウンド設定は真偽値である必要があります。

## 対応する旧形式ごとに移行処理を用意する

バージョン1からの移行では、古い数値を新しいオブジェクトに変換し、既定の設定を補い、バージョン2の形式で保存できます。複数の旧バージョンに対応する場合は、バージョン1から2、続いて2から3のように順に移行します。キーの欠落、不正なJSON、未知の将来バージョン、途中まで書き込まれた値など、それぞれのテストケースを個別に確認します。未知のデータを保持、無視、リセットのどれにするか決め、必要な場合は復旧メッセージを表示します。

## ブラウザーのストレージに関する制約を把握する

MDNによると、localStorageはオリジンに紐づき、ブラウザーのセッションをまたいで保持されることがあるデータです。ただし、利用可能であることや内容が維持されることは、アカウントのバックアップとして保証されません。秘密情報や信頼性が必要な判断を保存しないでください。ゲームがセーブデータを読めない場合は、定義済みの状態から再開できるようにし、失敗した同じ移行を起動のたびに再試行しないでください。

## よくある質問

**フォーマットが変更された場合、すべての保存をクリアする必要がありますか?** それが明確な製品決定である場合に限ります。重要な値を安全にマップできる場合は、小規模なテスト済みの移行でそれらを保存できます。それ以外の場合は、明確なフォールバックを定義し、リセットについて説明します。

**バージョン フィールドは localStorage データの信頼性を高めますか?** いいえ。期待される形状を識別するので、ゲームはそれを移行または拒否できます。データがまだ欠落している、形式が間違っている、古い、または利用できない可能性があるため、使用する前に検証してください。

## 気になることを、もっと

- [ブラウザ ゲームで状態保存をテストする](https://oneshotgems.ai/ja/topics/testing-game-save-state): ブラウザ ゲームが何を保存し、何をリセットするか、保存されたデータが失われたり、古くなったり、セッション間で変更された場合にどのように動作するかを確認します。
- [小規模ゲーム向けの回帰テスト ループ](https://oneshotgems.ai/ja/topics/game-regression-testing): メカニクス、スコア、リスタート、および近くのエッジケースに焦点を当てた短い回帰チェックリストを使用して、改訂後に正常に動作するゲーム ループを保護します。

## 関連情報

- [MDN ローカルストレージ](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)
- [MDN JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)

---
正規ページ: https://oneshotgems.ai/ja/topics/local-storage-game-versioning
