マガジン

ゲームを途中で閉じられる前提で設計する:区切りの置き方

遊びをつくる

執筆にClaudeを使用しています。

振り子と色の異なる円を並べ、ゲームのリズムや間を表す立体作品。
記事のテーマをもとに制作したAI生成イメージ。実際のゲーム画面ではありません。

電車が駅に着いて、遊んでいたブラウザゲームのタブをとっさに閉じる場面を考えてみます。数分後、同じゲームを開き直したとき、何が残っていれば困らないでしょうか。進んだ面、直前の一手、記録、設定のどれが消えると遊び手は「もういいや」と感じるのか、それは作品ごとに違います。 この記事の問いは、閉じられることを前提にしたとき、区切りをどこに置き、何を単位として保存するかです。答えは「保存すればよい」の一言ではありません。そもそも保存しなくて済むほど区切りが短い作品もあれば、一時停止で時間を止める作品もあり、状態をまるごと残す作品もあります。 アソバースの公式作品13本は、この3つの方法がはっきり分かれています。確認済みの仕様から読み取れる範囲で整理し、自分の作品に当てはめる手順まで示します。

この記事の目次
  1. 閉じられ方への備えは3種類ある
  2. 公式作品に見る、閉じ方への備え
  3. 保存の単位を決める:何を失うと困るか
  4. 保存する前に決めておくこと
  5. 対戦は「状態の持ち主」が変わる
  6. 自分の作品で「閉じるテスト」をする
  7. 次の行動

閉じられ方への備えは3種類ある

途中で閉じられることへの備えは、大きく3つに分けられます。

  1. 区切りを短くして、閉じても失うものを小さくする。 1ラウンド、1ステージ、1皿のように、遊びの単位そのものを短くする方法です。
  2. 時間を止められるようにする。 閉じる前に一時停止できれば、中断が失敗扱いになりません。
  3. 状態を残す。 開き直したときに、前回の続きから始められるようにする方法です。

3つは排他的ではなく、作品の性格に合わせて組み合わせます。大事なのは、どれを選んでも「遊び手が閉じた瞬間に何が起きるか」を設計者が決めておくことです。決めていないと、たまたま消えたものが仕様になってしまいます。

公式作品に見る、閉じ方への備え

公式作品の確認済み事項から、3種類の備えがどこに現れているかを見てみます。以下は「設計から読み取れること」であり、開発側の意図を断定するものではありません。

  • 紙ひこうき郵便、区切りや時間の扱い:1ルートが36秒・40秒・44秒と短い、閉じたあと:記録は画面を開いている間だけ
  • 時計じかけの台所、区切りや時間の扱い:本番は1皿28秒。見習いは時間制限なし、閉じたあと:記録は画面を開いている間だけ
  • こだまの森、区切りや時間の扱い:6・8・10ラウンドの3コース。一時停止あり、閉じたあと:最高記録は開いている間だけ
  • 小さな軌道、区切りや時間の扱い:一投ごとに結果が出る。一時停止から同じ位置で再開、閉じたあと:最速記録はプレイ中だけ
  • かたちのあいだ、区切りや時間の扱い:時計の一時停止あり。同じ配置の再挑戦、閉じたあと:保存あり
  • 余白の庭、区切りや時間の扱い:時間制限なし。戻す/やり直す、閉じたあと:保存あり(以前の庭を引き継げる)
  • WAVE / WAVE、区切りや時間の扱い:16ステップのループを編集する、閉じたあと:保存あり

短い区切りで備える作品

紙ひこうき郵便は、どのルートも1回が数十秒で終わります。この長さなら、途中で閉じても失うのは1回分の挑戦だけです。区切りが短いので、保存の仕組みを持たなくても遊び手の損失が小さく済みます。

月夜の配達は3つの夜、プリズムの道は8ステージという構成です。ひとまとまりの単位が明確なので、閉じるなら区切りの間で閉じやすくなります。

時間を止める作品

こだまの森、小さな軌道、かたちのあいだには、一時停止または時計の一時停止があります。時間制限のある遊びは、中断がそのまま失敗に直結しやすいものです。止められる手段があるだけで、「席を立つ」ことが失敗でなくなります。

時計じかけの台所は、時間制限なしの見習いと、1皿28秒・ミス3回までの本番が分かれています。時間の厳しさを選べる構成は、遊び手の状況に合わせて「今は急がない」を表明できる仕組みとも読めます。

状態を残す作品

保存があるのは、余白の庭、WAVE / WAVE、かたちのあいだの3作品だけです。ほかの10作品は、記録や録音が画面を開いている間だけ残ります。

保存のある3作品の共通点を考えてみます。庭は最大80個の配置を積み重ねる作品で、どこで切っても「途中」にしかなりません。WAVE / WAVE は、16ステップに音を並べる作業そのものが成果物です。かたちのあいだは盤面が1手ごとに変わり、短時間で終わるとは限りません。

つまり「終わりのない創作」や「手数が読めない思考」の作品ほど、状態を残す価値が高いと読み取れます。何がどの粒度で保存されるかは、作品を開いて確かめてください。

保存の単位を決める:何を失うと困るか

保存の単位とは、「どの粒度で状態を切り出して残すか」のことです。次の4つの粒度で考えると整理しやすくなります。

  • 一手の単位: 盤面や配置が変わるたびに保存します。閉じた瞬間の続きから再開できますが、保存回数が多くなります。
  • ステージの単位: クリアなど区切りの時点でだけ保存します。保存の回数は少ない代わりに、ステージの途中で閉じると、そのステージの進行は戻ります。
  • セッションの単位: 設定や最後に遊んだ場所など、「次に開いたときの入口」だけを残します。
  • 作品全体の単位: クリア状況や記録など、長期の成果を残します。

選ぶ基準は「閉じたときに何を失うと遊び手が最も困るか」です。

  • 創作物(庭、ループ)が消えると最も困るなら、一手または一操作ごとの保存が向きます。
  • 数十秒の挑戦なら、保存せずに挑戦ごとに初期化しても困りません。
  • 長い進行がある作品は、ステージ単位で区切りを作り、そこで保存する設計が考えられます。

余白の庭の「戻す/やり直す」(Z/Y)は、状態を履歴として扱う設計とも言えます。ただし履歴の何手分が保存されるかは確認済み事項にないので、作品で確かめます。

「小さく切る」ことの意味

アソバースのクラウドセーブは、作品ごとにJSONで128KiBまでです。この上限の中で収めるには、保存するのは「復元に必要な最小の状態」だけにするのが基本です。盤面全体の画像のように、計算で再現できるものは保存せず、配置や数値だけを残します。

たとえばステージ制のパズルなら、次のような形が考えられます。これはあくまで設計例で、アソバースの仕様ではありません。

json
{
  "version": 2,
  "savedAt": 1790000000000,
  "stage": 3,
  "cleared": [1, 2],
  "best": { "1": 14, "2": 22 }
}

保存するのは、どこまで進んだか、何を達成したか、記録はいくつか、だけです。途中経過の細部まで残すかどうかは、先ほどの「何を失うと困るか」で決めます。

保存する前に決めておくこと

保存を持つなら、書き込むタイミング以外にも決めることがあります。確認済みの仕様から読み取れる論点を3つ挙げます。

形式の版を持つ

公式作品では、古い保存(version1)が新しい形式(version2)へ移行されます。このことから、保存データに版番号を持たせておくと、あとから項目を増やしても古いデータを読めることが分かります。上の例の version はそのためです。

作品を更新して保存項目が変わるとき、版がなければ、古いデータを新しい処理が誤って読みます。更新後も遊び手の続きを守りたいなら、最初から版を持たせておくのが安全です。

端末とクラウドのずれを想定する

アソバースでは、ログイン中はクラウドセーブを使えます。未同期の端末セーブは、クラウドの古いデータより優先して再送されます。ゲストの履歴や進行は端末内に保存され、ログイン後のアカウントへ自動では混ざりません。

作品側から見ると、「同じ人が、端末の状態とクラウドの状態を違う内容で持つ」場面が起こりえます。保存データに更新時刻のような手がかりを入れておくと、どちらが新しいかを判断する余地ができます。ただし、SDKの具体的な呼び出し方や、ゲストの場合の保存の扱いは、現在の公式案内で確認してください。

保存してよいものを限る

アップロードしたゲームにはSDKが自動で追加され、作品専用のプレイヤーIDとクラウドセーブが使えます。ここでゲームに渡してはいけないのが、FirebaseのUID、認証トークン、メールアドレスです。保存データに個人を特定できる情報を入れない設計が前提になります。

また、アップロード作品内の localStorage/sessionStorage は一時メモリーの互換処理です。ブラウザの永続的な保存先として当てにしないでください。

対戦は「状態の持ち主」が変わる

オンライン対戦は「潮目のオセロ」と「灯りのチェス」だけです。確認済み事項では、手番・合法手・勝敗はサーバーで確認され、再読み込みで同じ部屋に復帰でき、再接続や投了もあります。

ここから読み取れるのは、対戦では盤面の持ち主が端末ではなくサーバーだという点です。タブを閉じても、盤面は相手の端末と共有されたサーバー側に残ります。閉じる側は「自分の画面」を失うだけで、対局は続きます。

一方で、部屋は24時間、部屋と対戦履歴は作成から7日後に削除対象になります。「閉じても戻れる」のは無期限ではありません。投稿作品向けの共通対戦APIは未提供なので、同じ仕組みを自分の作品で使うことはできません。

自分の作品で「閉じるテスト」をする

設計した区切りが機能するかは、実際に閉じてみないと分かりません。次の手順で確かめられます。結果は作品ごとに違うので、自分の環境で記録してください。

  1. 挑戦の途中で閉じる。 区切りの前、途中、直後の3か所で、タブを閉じて開き直します。何が残り、何が消えたかを書き出します。
  2. 再読み込みする。 同じ場面で再読み込みをして、同じ結果になるかを比べます。
  3. 言語を切り替える。 公式作品は言語変更で進行を保つ作りです。自作でも、表示を切り替えたときに進行や入力中の内容が消えないか見ます。
  4. 画面を拡大する。 公式作品はプレイ画面の拡大でも進行を保ちます。拡大で再描画されたとき、状態がリセットされないかを見ます。
  5. 一時停止を挟む。 一時停止から再開して、時間や位置が前後しないかを見ます。
  6. ログインの有無で比べる。 ログインしているときと、していないときで、残るものが変わるかを見ます。

記録は、手順ごとに「残ったもの」「消えたもの」「消えて困ったか」の3項目をメモすれば十分です。「消えて困った」が付いた項目が、保存の単位を細かくすべき候補です。逆に、消えても誰も困らないものまで保存すると、保存データが大きくなるばかりで、版の管理も増えます。

見落としやすいのは、「戻す」操作と保存の関係です。かたちのあいだの「一手戻す」は手数が減らない仕様ですが、保存された盤面と手数がどう結びつくかは作品を開いて確かめる必要があります。自作でも、戻した状態を保存するか、戻す前の状態を残すかを決めておきます。

次の行動

自分の作品を1つ選び、遊びの流れを「一手」「ステージ」「セッション」「作品全体」の4つの粒度に切り分けてみてください。それぞれで「閉じたら何を失うと困るか」を一行ずつ書き出すと、保存するものとしないものの線引きが見えてきます。そのうえで、上の閉じるテストを一巡させ、公式作品の余白の庭・WAVE / WAVE・かたちのあいだを開いて、保存されるものの粒度を比べてみてください。