マガジン

プレイ履歴の一件:初回・最終・起動回数の記録の形

遊びを見つける

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

少しずつ変化するゲーム模型を並べた棚から、以前の状態の箱を取り出す手。
記事のテーマをもとに制作したAI生成の写真風イメージ。

ログインしてゲームを遊んだあと、ライブラリのような画面で「最近遊んだ作品」が並んでいる場面を考えてみます。作品名の横に「初めて遊んだ日」「最後に遊んだ日」「遊んだ回数」のような情報があれば便利です。ではその裏側で、履歴の一件はどんな形のデータとして持たれているのでしょうか。 この記事では、題名にある「初回・最終・起動回数」の三つの値で履歴一件を表すとどうなるかを、確認済みの仕組みと照らして読み解きます。アソバースが実際にどの項目を保存しているかは、現在の案内や画面で確かめる必要があります。記事の後半では、自分の手で確かめる手順を設計書の形で示します。 先に整理しておくと、確認済みの事実は次の三点です。 「初回」「最終」「起動回数」という三項目の名前そのものは、ここでは確認済みの仕様として扱いません。三項目で履歴を表すとどうなるか、という読み方の題材として使います。

この記事の目次
  1. 履歴の一件は「利用者×作品」で一つ
  2. 三つの値を持つ記録の最小の形
  3. 起動回数とプレイ回数は同じものか
  4. 自分で確かめる手順
  5. ゲスト・ログイン・退会で履歴はどうなるか
  6. ゲーム内の記録とは別のもの
  7. 次の行動

履歴の一件は「利用者×作品」で一つ

確認済みの機能一覧に「作品ごとのプレイ履歴」とあります。この「作品ごと」という言い方から、設計として読み取れることがあります。履歴は遊んだ出来事を一行ずつ積み上げる日記ではなく、作品を単位にまとめた一件の記録だろう、ということです。

一件を作品単位にまとめると、画面の側は次のように作りやすくなります。

  • 最後に遊んだ順に並べる(最終の時刻で並べ替える)
  • 「はじめて遊んだ日」を示す(初回の時刻を読む)
  • 何度も遊んだ作品を見分ける(回数を読む)

出来事を一行ずつ積む方式なら、同じ表示のたびに集計が必要です。作品ごとの一件にまとめておけば、読むだけで済みます。この三つの値は小さく、更新も一か所で済みます。

ただし、これは「作品ごと」という言葉から考えた読み取りです。実際の保存項目がこの三つなのか、さらに多いのかは、この記事では断定しません。

三つの値を持つ記録の最小の形

考え方を手で確かめられるように、三つの値を持つ履歴を最小限のコードで書いてみます。アソバースの実装ではなく、あくまで読み方を確かめるための例です。ブラウザの開発者ツールのコンソールに貼れば、そのまま動きます。

js
// 考え方を確かめるための例です。アソバースの実装ではありません。
const WINDOW_MS = 30 * 60 * 1000; // 30分

function recordLaunch(history, workId, now) {
  const old = history[workId];
  if (!old) {
    history[workId] = { first: now, last: now, count: 1 };
    return history;
  }
  const again = now - old.last > WINDOW_MS;
  history[workId] = {
    first: old.first,              // 初回は書き換えない
    last: now,                     // 最終は毎回更新する
    count: old.count + (again ? 1 : 0),
  };
  return history;
}

const min = 60 * 1000;
let h = {};
for (const t of [0, 10, 50, 80]) {
  h = recordLaunch(h, "work-a", t * min);
  console.log(t + "分", JSON.stringify(h["work-a"]));
}

この例には、次の三つの性質があります。

  • 初回は最初の一度だけ書かれ、以後は変わりません。
  • 最終は起動のたびに上書きされます。
  • 回数は、前回から30分を超えて空いたときだけ増えます。

実行すると、0分と10分は同じまとまりとして扱われ、50分で回数が増えます。80分では前回の50分から30分ちょうどなので、増えません。「30分以内」の境目を含むかどうかは実装しだいで、上の例は含む側に倒しています。

この例には、もう一つ設計上の分かれ目があります。30分の窓を「直前の起動」から測るか、「最後に回数へ数えた起動」から測るかです。例は前者です。後者なら、0分・20分・40分と起動したとき、40分の起動は数えられます。どちらが実際の動きに近いかは、公式の案内で確認するか、次の節の手順で調べます。

起動回数とプレイ回数は同じものか

作品ページなどに出るプレイ回数は、確認済みの説明では「作品起動の実測回数」です。同じ端末・作品の30分以内の再起動は重複を除くとあり、人数ではないとも明記されています。つまり、一人が別の日に五回遊べば五回ぶん数えられうる数です。ランキングでプレイ回数の順を見るときも、「人気の人数」ではなく「起動の回数」を見ていることになります。

履歴に残る起動回数が、このプレイ回数と同じ数え方なのかは、確認済み事項からは言えません。考えられる関係は次の二通りです。

  • 同じ規則で数えている。履歴の回数は、自分の分だけを取り出したものになります。
  • 別の規則で数えている。たとえば公開用の集計と、自分用の履歴で窓の扱いが違うことがありえます。

どちらでも不自然ではありません。大事なのは、画面の数字を見たときに「何を数えた数字か」を自分で言えることです。履歴の回数が「遊んだ日数」でも「ゲーム内で挑戦した回数」でもなく、「作品を開いた回数」に近いものだとすれば、遊びの中身は記録に含まれません。

自分で確かめる手順

次の手順で、履歴の挙動を自分の環境で確かめられます。結果は環境ごとに異なるため、ここでは書きません。

準備するもの

  • 試す作品を一つ(公式作品でも他の作品でも構いません)
  • 時計(ストップウォッチでも構いません)
  • 記録用のメモ。列は「操作」「操作した時刻」「画面に表示された初回・最終・回数」とします。

手順

  1. 履歴が一件もない状態に近い環境(新しいブラウザのプロフィールなど)で、ログインして作品を一度起動します。起動した時刻を控え、ライブラリの表示を記録します。
  2. 作品をいったん閉じ、5分以内にもう一度起動します。表示を記録します。
  3. 前回の起動から30分を十分に超えて(たとえば40分以上)、もう一度起動します。表示を記録します。
  4. 余裕があれば、窓の測り方を調べます。0分・20分・40分の順に起動し、40分の起動で回数が増えるかを見ます。
  5. 同じ手順を、別の作品でも一度行います。

結果の読み方

  • 2回目で回数が変わらず、3回目で増えるなら、30分前後の重複除外が自分の履歴にも効いていると読めます。
  • 2回目で増えるなら、履歴の回数は公開のプレイ回数とは別の数え方かもしれません。
  • 4で40分の起動が増えたなら、窓は「最後に数えた起動」からの測り方に近いと読めます。増えなければ「直前の起動」からの測り方に近いと読めます。
  • 初回の表示が3回目以降も変わらないなら、「初回は最初の一度だけ」という作りと整合します。

起こりやすい誤り

  • 画面の更新を待たずに値を読んでしまう。再読み込みしてから記録します。
  • 別のブラウザや別の端末で起動してしまう。重複除外は「同じ端末・作品」が条件です。端末やブラウザを変えると、同じ規則を確かめたことになりません。
  • 表示が日付までで、時刻が出ない。その場合、30分の境目は画面からは読めません。回数の増減だけを根拠にします。
  • 表示の時刻がどの時間帯で出ているか分からないまま比べる。自分の時計と数時間ずれて見えるときは、表示の時間帯を現在の案内で確認します。

ゲスト・ログイン・退会で履歴はどうなるか

履歴の「置き場所」も、記録の形の一部です。確認済みの範囲では、次のようになっています。

  • ゲスト、履歴の扱い:履歴と進行は端末内に保存される
  • ログイン後、履歴の扱い:ゲスト時の履歴は、アカウントへ自動では混ざらない
  • 退会、履歴の扱い:履歴・セーブを含む個人データが削除される

ここから読み取れる大事な点は二つあります。一つは、ゲストで遊んだ分は、同じ端末の中の記録として別に残るということです。ログインしたら「これまでの回数」が引き継がれると期待していると、表示が少なく見えて戸惑います。引き継がれないのは不具合ではなく、仕様として案内されている動きです。もう一つは、ブラウザのデータを消せばゲストの履歴も消えうるということです。端末内の保存は、その端末の中だけに閉じています。

なお、履歴とクラウドセーブは機能一覧の中で別々に挙げられています。クラウドセーブは作品ごとにJSONで128KiBまでと決まっており、未同期の端末セーブはクラウドの古いデータより優先して再送されます。この「端末側が新しければ優先する」という規則は、セーブについて確認されているものです。履歴にも同じ規則が使われるかどうかは、確認済み事項からは分かりません。

ゲーム内の記録とは別のもの

もう一点、混同しやすい区別があります。公式作品の最高記録、最少手数、録音といった遊びの中の記録は、多くが画面を開いている間だけ残ります。たとえば「こだまの森」の最高記録や「月夜の配達」の各夜の最少区間数がそうです。保存があるのは「余白の庭」「WAVE / WAVE」「かたちのあいだ」の3作品だけです。

一方、プレイ履歴は、作品を起動したという事実の側の記録です。ゲームの中で何点取ったかは入っていないと考えるのが自然です。ゲーム内スコアの共通ランキングが未提供であることも、この見方と矛盾しません。

つまり、ライブラリに表示される数字は「どれだけ上手く遊んだか」ではなく、「その作品を、いつ、何回開いたか」の側を映したものです。何を残したい記録なのかによって、見る場所が変わります。

次の行動

自分のライブラリを開いて、遊んだ作品の履歴にどの項目が出ているかを、まず書き出してみてください。そのうえで、上の手順で「5分以内の再起動」と「40分後の再起動」を比べると、履歴の回数が何を数えているかが自分の画面で確かめられます。項目の正式な定義や保存期間のような細部は、現在の案内で確認してください。