0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Xboxクラウドの「月15時間」上限を562本のデータで検証した(Python・公開カタログAPI)

0
Posted at

11月から Xbox Cloud Gaming が「時間制」になります。Game Pass Ultimate でもクラウドで遊べるのは月15時間まで、それを超えたら1時間あたり約24〜40セントの時間パックを買う、という仕組みです。

「月15時間で足りるの?」という疑問に、感想ではなくデータで答えたくなったので、Xbox 公式のクラウド対応タイトル一覧(562本)を取得し、各タイトルのクリア時間と突き合わせてみました。この記事はその手順(Python)と結果のまとめです。カタログ API の叩き方、表記ゆれのあるゲーム名の照合、時間パックの最安組み合わせ(ナップサック的な DP)など、ほかの価格比較にもそのまま使える部分が多いと思います。

Xbox クラウド対応ゲームのメインストーリー所要時間の分布。15時間超が42%
Xbox Cloud Gaming カタログ(562本、2026年10月22日 8:30 AM ET 取得)× HowLongToBeat のメインストーリー中央値。464本を計測。

結論(先に)

  • クリア時間のデータが取れた 464本のうち196本(42%)は、メインストーリーだけで15時間を超えます。つまり最上位プランの Ultimate でも、1か月分のクラウド枠ではエンディングまで届きません。
  • Premium(月10時間)を超えるのは 62%、Essential(月5時間)を超えるのは 88%。
  • サブ要素込みだと 64% が15時間超。
  • メインストーリーの中央値は 12.6時間、サブ要素込みの中央値は 22.2時間。
  • 有料タイトル425本のうち 27本は「ストリーミングでクリアするパック代」が「今日のストア価格で買う値段」を上回ります(例:Fallout 4 は購入 $4.99、メインストーリーをストリーミングすると $11.97)。
項目 数値 出典(2026年10月22日確認)
月あたりのクラウド時間(Ultimate / Premium / Essential) 15 / 10 / 5 時間 Xbox Wire 9月3日
時間パック(導入価格・米国) 10時間 $3.99、25時間 $7.99、50時間 $11.99 Xbox Wire 10月21日
1時間あたり パック $0.24〜$0.40、Ultimate は $1.53(クラウド部分だけで見た場合) 筆者計算
メインストーリー15時間超 196 / 464(42%) 筆者データ

価格はすべて米国のものです。Xbox は「市場、デバイス、アカウントによって提供内容が異なる」としていて、日本での時間パックの価格や提供時期はまだ発表されていません。日本のユーザーにとっては「米国で先に始まった変更が、どの程度の影響を持つか」を見積もる材料として読んでください。

何が変わるのか

9月3日の Xbox Wire で、11月から Game Pass の各プランに「月ごとのクラウドゲーミング時間」が設定されると発表されました。Ultimate 15時間、Premium 10時間、Essential 5時間です。理由として Xbox は「クラウドゲーミングの提供コストは、利用者が増えて長く遊ぶほど増える」と説明し、影響を受けるのは「Game Pass 加入者の4%」と見込んでいます。

10月21日には、Game Pass に加入していない Xbox Insider 向けに、時間パックのテスト販売が始まりました。10時間 $3.99、25時間 $7.99、50時間 $11.99 の「導入価格」で、買った時間は使い切るまで残ります。ただし注記にある通り、遊べるのは「クラウド対応ゲームを購入済み」の場合(一部の基本無料タイトルを除く)です。つまり、自分で買ったゲームを、時間単位でもう一度お金を払ってストリーミングする形になります。

「4%」は人数の話です。ゲームの側から見るとどうなるのかを確かめるのが、今回の目的です。

手順1:クラウド対応タイトルの一覧を取る

Game Pass のカタログ表示には、catalog.gamepass.com の「sigl」という公開リスト API が使われていて、認証なしでタイトル ID の一覧を取れます。クラウド対応の「All games」リストはこの ID です。

import json, urllib.request

SIGL = "29a81209-df6f-41fd-a528-2ae6b91f719c"  # Xbox Cloud Gaming: All games
url = f"https://catalog.gamepass.com/sigls/v2?id={SIGL}&language=en-us&market=US"
items = json.load(urllib.request.urlopen(url))
# 先頭要素はリスト自体のメタ情報、2件目以降が {"id": "9NPDN9R45JX4"} の形
ids = [x["id"] for x in items[1:]]
print(len(ids))  # 562(2026-10-22 時点)

認証は不要で、market=JP にすれば日本のリストも取れます(今回は価格を米国にそろえるため US を使いました)。

手順2:タイトル名と価格を Microsoft Store から引く

ID だけでは名前が分からないので、Microsoft Store の display catalog API に20件ずつ投げます。

import time

def fetch_products(ids, market="US", lang="en-us"):
    out = {}
    for i in range(0, len(ids), 20):
        batch = ",".join(ids[i:i+20])
        u = (f"https://displaycatalog.mp.microsoft.com/v7.0/products"
             f"?bigIds={batch}&market={market}&languages={lang}")
        d = json.load(urllib.request.urlopen(u))
        for p in d.get("Products", []):
            lp = p["LocalizedProperties"][0]
            price = None
            for sku in p.get("DisplaySkuAvailabilities", []):
                for a in sku.get("Availabilities", []):
                    if "Purchase" in a.get("Actions", []):
                        price = a["OrderManagementData"]["Price"]["ListPrice"]
                        break
                if price is not None:
                    break
            out[p["ProductId"]] = {"title": lp["ProductTitle"], "price": price}
        time.sleep(0.3)
    return out

ListPrice は「その時点のストア表示価格」なので、セール中のタイトルはセール価格になります。今回の「買うより高い」比較も、取得時点(10月22日朝)の価格です。

手順3:クリア時間のデータと照合する

クリア時間には、プレイヤーが自分のプレイ時間を投稿する HowLongToBeat の中央値を使いました(メインストーリー / サブ要素込み / やり込み)。サイト内検索で1件ずつ引き、1.2秒以上の間隔を空けています(562件で十数分)。相手のサーバーに負荷をかけないことを優先してください。

難しいのは名前の照合です。Xbox 側は「Standard Edition」「Xbox Series X|S」「Console Edition」などが付き、商標記号も混ざります。そこで、エディション表記を落としてから英数字だけに正規化し、完全一致、だめなら近い前方一致だけを採用しました。

import re

def clean(t):
    t = re.sub(r"[®™©]", "", t)                      # ® ™ ©
    t = re.sub(r"\s*\((Xbox|Game Preview|PC|Windows|Cloud)[^)]*\)", "", t, flags=re.I)
    t = re.sub(r"\s*[-:]\s*(Xbox Series X\|S|Standard Edition|Console Edition|"
               r"Xbox One Edition|Windows Edition)\s*$", "", t, flags=re.I)
    return t.strip()

def norm(s):
    return re.sub(r"[^a-z0-9]", "", s.lower().replace("&", "and"))

def pick(query, candidates):
    q = norm(query)
    for c in candidates:                       # 1) 完全一致
        if norm(c["game_name"]) == q:
            return c
    for c in candidates:                       # 2) 近い前方一致のみ
        n = norm(c["game_name"])
        if (n.startswith(q) and len(n) - len(q) <= 18) or \
           (q.startswith(n) and len(q) - len(n) <= 22 and len(n) >= 6):
            return c
    return None

結果は 562本中520本がマッチ、そのうちメインストーリーの投稿が3件以上ある 464本 を集計対象にしました。前方一致のせいで「Broken Age」が「Broken Age: Act 2」に当たるような誤マッチが少しあるので、CSV には HowLongToBeat 側の名前も残しています。

手順4:時間パックの「最安の買い方」を DP で求める

「30時間遊ぶにはいくら必要か」は、単純な掛け算ではありません。10時間 $3.99、25時間 $7.99、50時間 $11.99 の組み合わせで、必要時間以上を最安で満たす問題です。上限付きでない(同じパックを何個でも買える)ので、小さな DP で解けます。

import math

PACKS = [(10, 3.99), (25, 7.99), (50, 11.99)]

def pack_cost(hours):
    h = math.ceil(hours)
    best = [0.0] + [float("inf")] * (h + 60)
    for x in range(1, h + 60):
        for ph, pc in PACKS:
            best[x] = min(best[x], best[max(0, x - ph)] + pc)
    return round(min(best[h:]), 2)   # h 時間「以上」を満たす最安値

print(pack_cost(32.1))  # GTA V のメインストーリー → 11.98(25時間+10時間。50時間パック1つだと 11.99)
print(pack_cost(12.6))  # 中央値のゲーム → 7.98(10時間パック×2)

min(best[h:]) にしているのがポイントで、「ちょうど h 時間」ではなく「h 時間以上」の最安を取ります。たとえば 12時間なら、10時間×2($7.98)と25時間×1($7.99)がほぼ同額で、余った時間は次のゲームに回せます。

結果

1時間あたりの価格。50時間パック $0.24、25時間パック $0.32、10時間パック $0.40、Ultimate は $1.53
出典:Xbox Wire(10月21日、9月3日)、Game Pass Ultimate $22.99(Xbox Wire 4月21日)。米国価格。

分布を見ると、5〜10時間と10〜15時間の山が大きい一方で、15時間を超えるタイトルが196本あります。30時間超も72本です。

人気タイトル(HowLongToBeat の完了報告300件以上)に絞ると、長いものは名作 RPG が並びます。

人気ストーリーゲームのメインストーリー時間と、Ultimate で必要な月数、パック代
HowLongToBeat のメインストーリー中央値(完了報告300件以上)。パック代は 10/25/50 時間パックの最安組み合わせ。

  • Persona 5 Royal:101時間。Ultimate のクラウド枠で7か月、パックなら $27.97
  • Mass Effect Legendary Edition:61時間。5か月、$19.97(ストア価格 $14.99 より高い)
  • Kingdom Come: Deliverance II:56時間。4か月、$15.98
  • Halo: The Master Chief Collection:43時間。3か月、$11.99

面白いのは1時間あたりの単価です。パックは $0.24〜$0.40 なのに、Ultimate(月 $22.99 で15時間)をクラウド目的だけで見ると 1時間 $1.53 になり、サブスク加入者がいちばん高い単価を払う構図になります。もちろん Ultimate にはライブラリや PC Game Pass、オンライン対戦も含まれるので、これは「クラウドだけで使っている人」にとっての数字です。

注意点

  • HowLongToBeat は投稿ベースの中央値です。マルチプレイ中心やライブサービス型のゲーム(War Thunder など)は「メインストーリー」の時間が実態とずれるので、エンディングまでの時間ではなく「典型的なプレイ時間」として読んでください。
  • 価格は米国の導入価格で、Xbox 自身が「導入価格」と書いています。今後変わる可能性があります。
  • ストア価格は取得時点の表示価格です。セールの影響を受けます。
  • 名前の照合は自動なので、少数の誤マッチがあります(CSV で確認できます)。

考察(ここからは意見です)

GTA VI は11月19日発売で、クラウドの時間制が始まるのと同じ月です。GTA VI のクラウド配信の有無はまだはっきりしていませんが、前作 GTA V のメインストーリーは HowLongToBeat で 32.1時間(3,381件)なので、同じくらいの長さなら Ultimate のひと月分で約47%しか進みません。

さらに Fortune は10月20日、次世代 Xbox(Project Helix)の価格が社内で $1,200〜$1,800 と見積もられていると報じています。「本体がなくてもクラウドで遊べる」が安い入り口だったはずが、本体は高く、クラウドにはメーターが付く。私の見立てでは、クラウドはこれまで「顧客獲得のための赤字部門」で、Microsoft はもう十分に獲得したと判断したのだと思います。

データと元記事

皆さんに聞きたいこと

  • 日本で時間パックが始まったら、Game Pass をやめてパックだけにしますか?
  • 「時間課金」は月に数回しか遊ばない人には公平だと思いますか、それとも買ったゲームへの追加課金だと感じますか?
  • 同じ方法で GeForce NOW や PlayStation のクラウドと比べるなら、どの指標を見るべきだと思いますか?

コメントで教えてもらえるとうれしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?