ブラウザゲームのセーブを別の端末でも使うには?端末保存とクラウド保存の違い
遊びを見つける執筆にClaudeを使用しています。

スマートフォンで途中まで遊んでいたゲームを、帰宅してPCで続けようとしたら最初からだった。ブラウザゲームではよくある経験だ。データがどこに保存されているかを理解すると、「引き継げるゲームと引き継げないゲームの違い」が具体的に見えてくる。この記事では、端末に保存される仕組みとクラウドに保存される仕組みを整理し、アソバースで遊ぶ・作るときに何を確認すればよいかを説明する。
この記事の目次
端末保存とは何か:localStorageの性質
多くのブラウザゲームは進行データをlocalStorageに保存する。localStorageはブラウザが管理するキーと値のペアで、ページを閉じてもデータが残る仕組みだ。しかし重要な制約がある。
localStorageはオリジン(ホスト名+プロトコル+ポート)ごとにブラウザ内で完結する。 別の端末、別のブラウザ、プライベートモードのウィンドウは、それぞれ独立したストレージを持つ。スマートフォンのChromeに保存したデータが、PCのChromeに自動的に届くことはない。
sessionStorageはさらに短命で、タブを閉じると消える。ゲームがsessionStorageだけに頼っている場合、ページを離れた時点でデータが失われる。いずれも、複数デバイスをまたいで自動同期する機能をブラウザが標準で備えているわけではない。
ブラウザによっては、ユーザーが明示的にサインインすることでブックマークや設定を同期する機能を持つ。ただしそれはlocalStorageの内容を同期するものではなく、ゲームの進行データへは影響しない。
クラウドセーブが使える二つの条件
端末をまたいで進行データを引き継ぐには、クラウドへの保存が必要になる。アソバースには、アカウントに紐づいたクラウドセーブの仕組みが用意されているが、これが機能するには二つの条件が重なる必要がある。
- ゲームがSDKのセーブAPIを組み込んでいること。 アソバースにある全作品が自動的にクラウドセーブに対応するわけではない。作者がアカウントブリッジSDKのsave / load APIを明示的に呼び出して実装した作品のみ対応する。
- プレイヤーがログイン状態でプレイしていること。 ログインしていない状態(ゲスト)でのセーブは、端末とゲームに紐づいたゲスト用の領域に保存される。アカウントのクラウド領域とは別扱いになる。
ゲームがSDKセーブに対応しているかどうかは、作品の説明欄や遊び方にセーブ・引き継ぎに関する記載があるかを確認するとよい。記載がない場合や判断がつかない場合は、ゲストでのプレイと同様にデータは端末内にのみ保存されると考えておくのが安全だ。
ゲストでプレイしたときのデータはどうなるか
アソバースへのログインなしでゲームを遊んだ場合、進行データは「ゲスト用の保存領域」に入る。ゲスト用の識別子はゲームごとに生成され、その端末とブラウザのセッションに結びついている。
ゲストのセーブデータは、後からログインしても自動的にアカウントへ引き継がれない。 ゲストとして遊んだ進行データとアカウントの進行データは、意図せず上書き合うことがないよう、あくまで別々に管理される。この設計は「気づかないうちに手動保存が消えた」という事態を防ぐためのものだ。
別の端末での続きを重視するなら、最初からログインした状態でプレイするのが確実だ。途中でログインした場合の動作は、ゲームがどう実装しているかによっても異なる。
別の端末で続きを再開するための手順
端末をまたいで続きを再開できるかを確認する流れを、プレイヤー目線でまとめる。
- 作品の説明欄や遊び方に、セーブや引き継ぎに関する記載があるか確認する。記載がなければ、その作品はアカウント連携に対応していない可能性がある。
- 元の端末でアソバースにログインしていたかを確認する。ゲストでプレイしていた場合、クラウドに進行データは残っていない。
- 続きを再開したい端末で、同じアカウントでアソバースにログインする。
- 作品ページからゲームを開く。ログイン状態でSDK対応作品を開くと、前回の進行データが読み込まれる。
- ゲームが「保存中」や「同期済み」を示す表示をしている場合、その確認を待ってから端末を切り替えると安全だ。保存の完了タイミングはゲームごとに異なる。
アソバースのプレイ履歴(遊んだ記録)はクラウドに保存されるが、これはゲーム内の進行データとは別物だ。「最近遊んだ作品」に表示されても、ゲーム内のセーブデータが引き継がれるとは限らない。
作者向け:SDKでクラウドセーブを組み込む
アソバースにゲームを投稿した作者は、アカウントブリッジSDKを使ってクラウドセーブを実装できる。以下は実装の基本的な流れを示した説明用のコード例であり、実際の動作は環境によって異なる。
初期化とプレイヤー情報の取得
ゲームが読み込まれたらAsoverse.ready()を呼び出す。返されるplayerオブジェクトにauthenticatedフラグがあり、ログイン中かどうかを確認できる。capabilities.saveがtrueのとき、このゲームでクラウドセーブが有効になっている。
// 説明用のコード例(動作確認済みではない)
const { player, capabilities } = await Asoverse.ready();
if (player?.authenticated && capabilities.save) {
const saved = await Asoverse.load();
if (saved) applyProgress(saved);
}保存と同期状態の確認
Asoverse.save(value)の呼び出しは、ローカルキューへの受け付けが完了した時点で解決する。戻り値のstorageフィールドが'cloud'のときはクラウドへの書き込み経路が選ばれた状態であり、'device'のときはデバイス保存のみの状態を示す。いずれの場合も、この時点でクラウドへの書き込みが完了したことは保証されない。
クラウドへの書き込みが完了したことを知りたいときは、on('sync', callback)を使う。callbackには{state: 'saved'}または{state: 'pending'}が渡される。state: 'saved'を受け取ったタイミングが、クラウド同期の完了を示す確実な手がかりになる。
// 説明用のコード例(動作確認済みではない)
const result = await Asoverse.save({ level: 3, score: 800 });
// result.storage === 'cloud' | 'device'
// この時点ではクラウド書き込み完了は保証されない
Asoverse.on('sync', ({ state }) => {
if (state === 'saved') showSyncIndicator('保存完了');
});保存できるデータ量と形式
保存できるのはJSONとして表現できるデータで、UTF-8換算で最大131072バイト(128 KiB)まで。保存領域はゲームごとに独立しており、他の作品のデータとは混在しない。
アソバースへのログインがゲーム内部の認証へ自動的に適用されるわけではない。外部URLを持つ作品が独自のログイン機能を使っている場合、それはアソバースのアカウントとは別の仕組みだ。作者のサイト側のログインとアソバースSDKのセーブを組み合わせたい場合は、それぞれの連携を作者が設計する必要がある。
SDKがローカルストレージへアクセスできない環境(アップロードされたゲームが動くサンドボックスなど)では、SDKがインメモリのストレージ代替を注入する。ただしこれはセッション内の一時的な保存であり、クラウドセーブの代わりにはならない。
どこで保存されているかを確認するチェックリスト
「このゲームのデータはどこにあるか」を整理するとき、以下を順番に確認するとわかりやすい。
- ゲームがSDKセーブに対応しているか。 未対応の場合、進行データはブラウザの端末ローカルにのみ存在する。作品の説明欄や遊び方で確認できる。
- プレイ時にアソバースへログインしていたか。 ゲスト状態でのセーブはゲスト領域に保存され、後から自動マージされない。
- 保存の完了表示を確認してから端末を切り替えたか。 sync イベントで state: 'saved' が返るまで端末を閉じると、最後の進行が残らない場合がある。
- 別の端末で同じアカウントにログインしているか。 クラウドセーブはアカウント単位で管理される。別のアカウントで開いてもデータは現れない。
クラウドセーブは「作者が組み込んだゲームで、ログインしてプレイしたとき」に機能する仕組みだ。この二つが揃わない状況では、進行データは端末の中にある。遊び始める前にログイン状態を確認しておく習慣が、もっとも確実な方法になる。




