# 永続化動作を意図的かつテスト可能にする

> ブラウザ ゲームが何を保存し、何をリセットするか、保存されたデータが失われたり、古くなったり、セッション間で変更された場合にどのように動作するかを確認します。

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

セーブ状態のテストは、どの値をページ再読み込み後も保持し、どの値を新しいプレイ開始時にリセットするか、という仕様の決定から始まります。ベストスコアは保持し、一時的なパワーアップは保持しない、といった具合です。明確なルールがなければ、覚えている値が意図した機能なのか古いデータなのか、テスターには判断できません。まず短い保存仕様を決め、実際のプレイヤーの使い方に近い条件で保持、リセット、復旧をテストします。

## 各境界を越えて保持する値を書き出す

プレイの再スタート、ページの再読み込み、新しいブラウザーセッションについて小さな表を作ります。例：現在のスコアは再スタート時にリセットする。自己ベストは再読み込み後も保持する。新しいセッションではプレイ中のレベルをレベル1に戻す。各値と、どの境界を越えて保持されるかを明記します。これにより、再スタート後も前回のタイマーが表示されるといった意図しない保持や、再読み込みでベストスコアが消えるといった意図しない消失を見つけられます。

## 保存データの欠落、不正な形式、古い値を確認する

テスト環境を制御できるなら、保存用キーがない初回アクセス、有効な保存済みスコア、空または不正な値の順に試します。堅牢なゲームなら、NaNを表示したりメニューを操作不能にしたりプレイ前にクラッシュしたりせず、定義済みの代替値や初期状態に戻ります。スコアに上限がある場合や数値である必要がある場合は、保存データを読み込む境界で、負数、想定外に大きな数値、数値以外の値を試します。これは耐障害性の確認であり、プレイヤーが製品上で保存データを編集できるという前提ではありません。

## よくある質問

**ゲームはセッション間で何を保存する必要がありますか?** それは意図したエクスペリエンスによって異なります。設定、ベストスコア、進行状況、進行中の実行が持続するかどうかを明示的に示し、リロードと新しいセッションの境界でそれぞれをテストします。

**localStorage は利用可能であることが保証されていますか?** ストレージの選択を無条件の保証として扱うべきではありません。欠落しているデータまたは使用できないデータを適切に処理し、サポートされている環境でのゲームのフォールバック動作を確認します。

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

- [ゲームの状態遷移をテストする](https://oneshotgems.ai/ja/topics/testing-game-state-transitions): ブラウザ ゲームの開始、プレイ、一時停止、勝敗の状態をマップし、すべての遷移と無視する必要がある入力をテストします。
- [小規模ゲーム向けの回帰テスト ループ](https://oneshotgems.ai/ja/topics/game-regression-testing): メカニクス、スコア、リスタート、および近くのエッジケースに焦点を当てた短い回帰チェックリストを使用して、改訂後に正常に動作するゲーム ループを保護します。
- [ブラウザーゲームのローカル保存データをバージョン管理する](https://oneshotgems.ai/ja/topics/local-storage-game-versioning): 以前のゲームバージョンが保存したデータの読み取り方を決め、既知の形式を使う前に移行します。

## 関連情報

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

---
正規ページ: https://oneshotgems.ai/ja/topics/testing-game-save-state
