2022年6月13日、ライアットはMicrosoftとの新パートナーシップを締結し、自社ゲームタイトルをXbox Game Passで提供すると発表。世界最大級のゲーム企業2社を結びつけたのは「プレイヤー中心の競技的ゲーム」に対する愛でした。そして6ヶ月後、私たちはこの大規模プロジェクトを無事完成させ、Game Passにライアットの大型ゲームタイトルをリリースしています。

本稿はそんなXbox Game Pass連携の開発期間を振り返り、プレイヤープラットフォームチーム──おそらく初めて耳にする名前でしょう──が舞台裏で取り組んできた仕事の内容を紹介するものです。

プレイヤープラットフォームとは?

プレイヤープラットフォームチームは、ライアットの各ゲームタイトルとプレイヤーの間を結ぶ仕事を担い、複数ゲームタイトルで構成されるエコシステムとコミュニティーの構築を目指します。このチームの役割は、他者との繋がりが感じられるプレイヤー体験を作り、各ゲームタイトルでプレイヤーとコンテンツを結びつけることです。言い換えれば、ライアットゲームズの各ゲームで「直接的なゲームプレイでない部分」をほぼ全て担当しているチームということです。具体的にはアカウント、ゲーム起動、ソーシャル機能、購入といったゲームプレイ以外の構成要素を、ポータル、SDK統合、ダイレクトAPIのような手段で提供しています。 

プレイヤープラットフォームチームはゲーミング体験の「周辺領域」をほぼすべて担当しているため、今回のXbox Game Pass連携でも同チームが大部分を担当することになりました。これにはコラボレーションに対する積極的な姿勢、柔軟に意見を聞けるマインドセット、そして熱意と勤勉さを兼ね備えたメンバーが多数必要になります。しかもチームは、サービス中/開発中のゲームに対するサポートも並行して進めなくてはなりませんでした。

初動から…迅速に!

Xbox Game PassでPC/モバイル向け基本プレイ無料ゲームを提供するのは初の試みであったため、プロジェクトには不確定要素が多数ありました。さらにライアット側には、アカウントをリンクさせたプレイヤー全員にゲーム内報酬を提供し、プレイヤー体験を強化したいという希望もありました。この規模のプロジェクトに取り組む場合、私たちはまず構成を大筋でまとめ、それぞれを独立機能として切り分けることでオーナーシップを最大化し、目的が整理されていないミーティングを減らし、開発に集中できるようにします。

これを実現するため、ライアットのプログラムマネージメントはMicrosoftと密にやり取りし、主要成果物を設計・確定させていきました。この工程は、プロジェクトに適切な人材を適切なタイミングで参加させる上で欠かすことができません。プレイヤープラットフォームのプログラムマネジメントチームは、こうした業務単位/工程の策定といった仕事をチーム内だけでなくライアット全体(各ゲームチーム、パブリッシング、プレイヤーサポートやその他の主要ステークホルダー)に向けて実施しています。複数ゲームチームとプレイヤープラットフォームチーム内の数百名に影響するような複雑な問題に取り組み、戦略立案・規模拡大を実現するのがこのチームの仕事なのです。

Game Passに向けた設計をする

新システムを構築するにせよ既存システムを解体するにせよ、「問題」と「プレイヤーにとっての成功のかたち」の認識は必ず揃えなければなりません。プレイヤープラットフォームチームでは良いプレイヤー体験を作る上でユーザー体験デザインを重視していますが、これはXbox Game Passパートナーシップでも同様でした。デザインというと洗練されたインターフェースが思い浮かべられがちですが、複雑なプロダクト/システムに触れるプレイヤーに「引っかかりのない」スムーズな体験を届けようとする時には、このデザインがより重要な役割を果たします。「でもXbox Game Passアカウントをリンクさせるのがそんなに難しいの?」と思う方もいらっしゃるでしょう。実際のところ、これが結構複雑だったんです!

ライアット&Microsoftのパートナーシップ締結当初、UXリーダーシップメンバーは「ミニマム・ラバブル(Minimum Lovable;プレイヤーから喜ばれる最小構成)」シナリオの定義に取り組み、そのシナリオを実現するために必要な時間/パートナー/リソースを(複数職種/部署にまたがります)精査しました。中でも私たちが特に注目したのが、優れたプレイヤー体験を実現する上で「何が最大のリスクか?」という点でした。困難な共通目標を設定する時、早い段階でそれでもやる価値があると合意に至れれば、そのぶん互いの専門分野を組み合わせられるようになり、一見不可能に見える難題を乗り越えられるからです(「ミニマム・ラバブル」シナリオを定義する方法の詳細についてはライアットゲームズのUX部署がMediumに投稿した記事(英語)をご覧ください)。


「2社間コラボレーションはいつだって大きなチャレンジです。社内用語も違うし、役割や想定も異なる。私たちはまず、Microsoftの認証システムとGame Passのインストール体験を深く理解する必要がありました。これを把握しておかないとエンドツーエンド体験をちゃんと設計できませんし、ミニマム・ラバブルなプレイヤー体験に何が必要かも見積もれませんから」

- Cheryl Platz
 

Riot Games Xbox Game Pass UX

 

こうして初期フローが確定したら次はUXチームの出番です。チームはさっそく、過去の利用状況や居住地にかかわらず全てのプレイヤーがスムーズに手続きを始められるよう、プレイヤーのタッチポイントを詳細に洗い出していきました。ここではゲームクライアントから直接、あるいはRiot Client経由でGame Passメンバーシップをリンクする熟練のプレイヤーにも、Game Passアプリから初めてライアットのゲームに触れる新規プレイヤーにも等しくスムーズな体験を届けることを目指しています。

しかし、2つの異なる企業が提供するプラットフォームを初連携させて、優れたプレイヤー体験を届けようとしているわけですから、それまでにRiot ClientチームとXboxチームのどちらも対処したことがなかった問題も生じてきます。たとえば、Microsoftのセキュリティーモデルはライアットのものとは異なるため、プレイヤープラットフォームチームは認証/個人認証プラットフォーム関連で通常よりも標準化を進める必要がありました。このプロジェクトではMicrosoftとの間に風通しの良いコミュニケーションと活発なコラボレーションが確立できており、これが方向に迷うことなく目標を目指していく大きな助けになりました。
 

「Microsoft側は過去にも同サービスで他社とのシステム連携をしていましたが、今回のプロジェクトはかなり毛色が違うから共同作業・パートナーシップという体制を選んだのだと思います。支え合うために両社のコードベースを進化させていく優れたコラボレーション環境でしたね。Microsoftの既存機能だけでは足りなかったし、時間的にも難しかったでしょう」

- Luther Baker 
 

初期のディスカバリー文書(状況や要件などを分析・整理した文書。プレディスカバリー文書とも)を制作するデザイナーは、「求める結果を実現するにはどうすべきか?」と自問し続けて現状を正確に把握し、前提となる要件を洗い出していきます。Microsoftとプレイヤープラットフォームデザイナーは、まずシナリオマッピングやユーザーフローなどの手法を活用して多数の要件定義書を作成し、エンジニア、プロダクト、QAのスタッフと共有。想定されるフローに見落としがないことを確認し、プレイヤーに最高の体験を実現するために使えるサービスと規模を評価するための継続的なフィードバックループを確立しました。


「この時のユーザー体験は、むしろ間違いがあるほうが都合が良いんです。間違いがあれば、気づいた人が"これは私の想定とだいぶ違います"とフィードバックをくれますから。早めに間違えれば、早めに議論を始められます。"正しい答え"の探求に時間を費やしてから作り始めるよりもずっと良い」

- Melody Seng
 

要件定義書はサインオフ後も継続的に改定されていきました。そしてエッジケース(極めて稀な状況)が発見されると、さらなる調査と解決に向けた試行錯誤が必要になります。ここではエンジニア/テックチームと直接やりとりできる環境が、共通理解を実現するカギとなりました。
 

Riot Games Xbox Game Pass User Flows


準リアルタイムサービスを制作する

ライアットとXbox Game Passのユーザーにベストな体験を提供するならば、新たなゲーム内コンテンツの解除タイミングはXbox Game Passアカウントをリンクさせた瞬間であるべきだろうと私たちは考えました。そこでコンテンツエクスペリエンスチームはアカウントチーム(プレイヤープラットフォーム所属)と協力し、プレイヤーがXboxアカウントをリンク/リンク解除した際にRiot Event Bus(近年ライアットで使用しているメッセージベース通信)へメッセージを送信するようにしました。メッセージが受信されると、メッセージブローカーのトピックをリッスンしているサービスが応答してイベントを処理します。ただし、プレイヤーがGame Pass未加入状態のXboxアカウントをリンクさせることもあるため、チームはまずリンクされたアカウントのトークンを新サービスに格納し、それを用いてXbox APIにクエリを送り、情報を取得する必要がありました。しかし、これでは部分的にしか問題を解決できません。この時点ではまだ、プレイヤーのXbox Game Passアカウントが加入状態だと確認できていないからです。

そこでコンテンツエクスペリエンスチーム(プレイヤープラットフォーム所属)はゲートウェイサブスクリプションサービス(GSS;Gateway Subscription Service)を構築して、これをライアット側における一元的な情報源とし、各コーラーおよびプレイヤーのGame Passステータスを確認できるようにしました。このGSSは、対象のサービスがサブスクリプションベースのコンテンツを問い合わせると、常に「そのプレイヤーに提供すべき特典」の情報を低遅延・高信頼な回答として提供する役割を果たします。GSSはアカウントのリンクイベントを消費して、このデータを取得します。またその際、Microsoft APIを使用して、プレイヤーのGame Passステータスが加入中であるかを確認します。またGSSは、ライアットのその他のサービスに対してもHTTP APIエンドポイント経由でデータを公開します。これにより、他のチームは同情報を別の用途に活用できます。別の用途とは、たとえば次のようなものです。

  • コンテンツアクセスプラットフォーム:プレイヤーのインベントリに指定サブスクリプションベースのコンテンツを追加する
  • マーケティングテクノロジー:プレイヤーの現在のGame Passステータスに基づいて指定の広告を表示する
  • プレイヤーサポート:プレイヤーのXboxサブスクリプション関連チケットに対処する際に、プレイヤーサポートエージェントが情報を用いる
  • Webエクスペリエンス:プレイヤーのアカウント管理Webページにサブスクリプションステータスを表示する

プレイヤーがライアットアカウントをXbox Game Passアカウントとリンクさせる際、GSSはMicrosoft Xbox APIにクエリを送信し、アカウントリンク時のトークンを用いてプレイヤーのGame Passステータスを取得し、さらに当該情報を永続データベースに格納し、定期的に更新し、クライアントがAPI経由でアクセスできるように(クエリ可能な状態に)します。これを読む限り、シンプルな実装に見えますよね。 

ライアット/Xboxアカウントをリンクさせたプレイヤーは、その後いつでもGame Passに加入できます。しかし、サービスがプレイヤーの加入状況をチェックするにはXbox APIにクエリを送る必要があり、これは一定間隔でしか実行できません。最高のプレイヤー体験を目指す私たちとしては、サブスクリプションコンテンツにはアカウントリンク/Game Pass加入の直後からアクセスできるようにしたいところですから、できるかぎり頻繁にクエリを送信したいと考えます。しかしどのくらいの頻度が適切なのでしょうか?毎分確認できれば良いでしょうが、APIに対して毎分数百万リクエストを送るのは賢明な策とは言えませんし、そもそも99%のケースではその1分でステータスが変化することもありません。

そこでチームは、プレイヤーがゲームクライアントを立ち上げる時など、ライアット側の領域でプレイヤーが行動するタイミングに注力しました。Game Passの加入状態を確認するのは適切なタイミングだと言えるでしょう。しかし、「更新」は外部HTTP呼び出しであるため最大1秒かかるのに対し、メインGSSクライアントであるコンテンツアクセスプラットフォーム(CAP;Content Access Platform)はプレイヤーインベントリの取得という遅延が許されない処理を担当しているため、50ミリ秒以内に応答を返す必要がありました。1秒かかる外部呼び出しを50ミリ秒に短縮するのは不可能ですから、チームはここで創意工夫を凝らし、現在格納されている値(前回更新時に取得した値か、アカウントリンク直後の最初の値)を返し、その値の取得日時が2分以上前だった場合にはバックエンドで非同期更新することにしました。その非同期更新後にGame Passステータスの変更が検出された場合は、当該サービスがRiot Messaging Service経由でゲームクライアントにメッセージを送信し、ゲームがCAPから権利を取得し、プレイヤーが手動リロードせずともサブスクリプションコンテンツを入手できるようにしています。


「時間的要件がかなり厳しかったので、遅延を最大限短縮することを主目標としていました。CAPがGame Pass加入ステータスを問い合わせて入手する処理の所要時間が50msですから、実質ほぼリアルタイムサービスにする必要があったんです。この制限時間内に返答できないとCAPがタイムアウトするので、"プレイヤーが入手できるはずのコンテンツを入手できない"状況が生じてしまいますからね」

- Vasily Katraev
 

また『ワイルドリフト』では、プレイヤーイベントリにCAPシステムを使用していないため、対象プレイヤーのGame Pass加入状況をチェックするには、サブスクリプションサービスに直接確認する必要がありました。この50msという遅延要件をクリアするため、コンテンツエクスペリエンスチームはサービスをCAPやアカウント管理サービスと同じデータセンター(世界4か所)に配置し、プレイヤーとの物理的距離を可能な限り短くしています。

リリースの準備:ダークローンチ&データベース制限迂回策

プレイヤー向けのリリースまであと数日に迫った頃、チームはダークローンチ(現実のユーザートラフィックをコピーして行うシミュレーションのような手法)を実施し、アカウントリンクをテストしました。結果、このテストでは複数の致命的なバグが見つかり、リリース日までに修正が施されました。

ここで特に大きな懸念だったのは、Entitlementサービス(許可を司るサービス、ライアット提供の全ゲームタイトルでプレイヤーにアクセスを許可するアイテムを判断する部分)の負荷でした。このサービスには、時に最大80万件/分という凄まじい数のリクエストが殺到します。そして特典をプレイヤーに提供する際には、Entitlementの呼び出しが別のシステムに対する新たな呼び出しを発生させ、プレイヤーがGame Passに加入していると確認した上でGame Pass特典をプレイヤーに返しています。ここで増えた負荷と複雑性が、応答の信頼度と速度を下げるリスクとなり、それ以降の処理にも多様なリスクを生じさせていたのです。

チームはそれ以前にも多様なシナリオで負荷テストを実施していましたが、ダークローンチはシステムの堅牢性に対する一番の自信となりました。ダークローンチは"Xbox Game Passコンテンツをプレイヤーに表示しないだけで、システムはフル稼働している状態"でのテストであり、システムに実際にかかる負荷とその挙動を公式リリース前に把握することができたためです。たとえば、ダークローンチではコネクションプールの構成ミスが発見されましたが、これを見逃したままリリースしていたら、おそらくプレイヤーが特典を入手できないという結果になっていたでしょう。

またチームは、データベースの書き込み速度という別の問題にも直面していました。既存のアーキテクチャ*では、パートナーシップで大規模化したプレイヤー負荷に対処できなくなっていたのです。サービスに対するこの種の負荷を管理する場合は、アクセスのタイミングが集中しないようにずらす手法が取られます。今回はプレイヤー数を制御可能な範囲に抑えるため、マーケティングを複数回に分ける手法を取っています。プレイヤー向けマーケティング素材を徐々に公開することで、負荷を長期間に分散し、アクセスの"波"に対処し続けていく処理能力を確保したのです。マーケティングチームと密な連携により、今回のサービス負荷は最大処理能力の50%未満に抑えることができました。 

*データベースの技術的スタックはその後変更しており、アカウント変更に関する水平スケール性能は当時から向上しています。
 

グラフ:リリース時期のXboxアカウント作成数&リンク数(時間ごと)
グラフ:リリース時期のXboxアカウント作成数&リンク数(時間ごと)


スキルセットよりも重要なマインドセット 

Xbox Game Passとの統合を実現するうえで、優れた技術的スキルのほかにソフトスキルも極めて重要な役割を果たしました。謙虚で、好奇心が強く、他者と協業する能力に長け、社内/社外(Microsoft)のどちらとも明確なコミュニケーションが取れることが重要だったのです。今回のプロジェクトはわずか6ヶ月という短さの一方で、参加人数数百人、シフト制労働、新システムの習熟といった多くの困難にも対峙する必要がありました。そのような時には、専門家が十全に活躍できるように、権限を移譲して自らは一歩引き、特定の個人やチームが不必要な指示を出す状況を予防することが、非常に重要だったのです。


「このプロジェクトでは誰もがそういう姿勢だったんです。あれを尊重できるメンバーが集ったことが大きな違いを生み出したと思います」

- Nate Portner
 

今回のパートナーシップでは、ライアットゲームズが掲げる価値観が色々な場面で顕出していました。プロセス全体を通じ、チームは「これがプレイヤーの体験に与える影響は?」と自問し続けていました。そこでは誰もが「プレイヤー体験を最優先する」というライアットの価値観をはっきりと示していました。ライアット提供の全ゲームタイトルに影響するシステムを、ライアット全体が団結・協力して作ったのです。
 

「どの職種のメンバーも判断ひとつひとつがプレイヤー体験に影響することを明確に意識していました。プレイヤーの期待を裏切ることだけは絶対にしたくなかったのです」

- Matt Hawkins

まとめ

今回のプロジェクトは取り組んだ範囲があまりに広大だったため、このTechブログの投稿ではすべてをカバーできませんでしたが、この記事を通じて少しでもプレイヤープラットフォームチームとライアット/Xbox Game Passパートナーシップのサービスについて知ってもらえたなら幸いです。専心・勤勉の姿勢を備えた数百名のスタッフが協力して作り上げましたが、今後も私たちはより良いプレイヤー体験を目指してサービスを作り続けていきます。