マイクロパッチがアニビアを救う

bananaband1tによる

数週間前、フェスティバルクイーンアニビアがカルナヴァルの精神と共にサモナーズリフトに舞い降りました。派手なコスチュームとお祭りで、巷は沸き上がっていました――かの氷の鳥のバグ報告(英語サイト)が届くまでは。ライアットのQA(品質保証)チームはすぐに、アニビアのアルティメットスキルが「フロストバイト」のダメージを倍増させるデバフを正しく適用していないことを確認しました。このバグは、修正されるまでアニビアを使用停止にしなければならないほどゲームに大きな影響を与えるものであり、さらに修正をライブサーバーに導入する前に一晩かけてQAテストを行わなければならないものでした。つまり、アニビアがプレイ可能になるのは、早くとも金曜日の午後でした…ただし、私たちはゲームへの影響がよほど深刻でない限り、金曜日にはホットフィックスを行いません――プレイヤー数がピークとなる週末の時間帯に予期せぬ問題を起こしかねず、あまりにリスクが高いからです。

こうして、パーティーは始まった直後に中止になり、アニビアは月曜日までゲームから除外されてしまいました… いえ、待ってください。実際にはアニビアは週末に使用停止になることはなく、使うことができたのです。

いったいどうやって、私たちは氷の不死鳥をこの悲運から救い出したのでしょうか?この質問に答えるには、ゲームサーバー、クライアント、再デプロイ、マイクロパッチのめくるめく素晴らしき世界についてお話ししなくてはなりません。


(少し)技術的な話

ゲームデータはクライアントとサーバーの二つの場所に保管されています。クライアントデータは全プレイヤーのPCにダウンロードされ、それを変更するにはパッチのダウンロードが必要です。クライアントには大量のビジュアルとオーディオデータが含まれています。例えば、サモナーズリフトのグラフィック、チャンピオンのモデル、キャラクターボイスなどです。

ゲームサーバーは、皆さんがチャンピオン選択後に接続する場所です。これは各5v5(または3v3や1v9)の試合を実行する小宇宙のようなものです。ゲームサーバーに変更を行う時は、ダウンタイム(サービスが利用できなくなる状態)やダウンロードは発生しません。サーバーには数字の情報が含まれています。例えば、チャンピオンのステータスやスキルの機能をコントロールするスクリプトなどです(必ずしも見た目をコントロールする訳ではありません)。

フェスティバルクイーンアニビア スプラッシュアート コンセプト画

長い間、クライアントまたはサーバーに変更を行う唯一の方法は、新しい情報をパッチ(デプロイ)かホットフィックス(再デプロイ)の形で送り出すことのみでした。ほとんどの場合、再デプロイはサーバーデータを対象としており、過去の重要なライブサーバーの問題(極端なゲームバランス問題やチャンピオンのバグなど)はこの方法で修正されていました。

再デプロイはリスクが高く、問題のほとんどが軽微でほんの少量のデータの変更しか必要にならないにもかかわらず、徹夜でQAテストを行う必要があります。また、一部のデータだけを再デプロイすることはできません――全データを再デプロイしなくてはならないのです。エンジニアリング・アーキテクトのBrian “Riot Penrif” Bosséは言います。「小さな変更のために非常に手間がかかる大規模なQAプロセス行うのは無駄が多く、必要以上にリスクが高くなります」

仮に一晩かけてテストを行ったとしても、極端に緊急を要する事態(ランクキューの深刻な不具合や、チャンピオン選択でティーモしか選べないなど)でない限り、金曜日には再デプロイを行いません。LoLのアーキテクチャの一部は相当昔に構築されたものであるため、大量のコンテンツを扱うことを前提にした基礎ができておらず、さらにこれらの基礎のいくつかは、私たちが望むほどには安定していません。

過去に一度、クライアントデータを再デプロイしたことで、全プレイヤーのLoLの実行ファイルが削除されてしまったことがあります――つまり、誰もリーグ・オブ・レジェンドを起動できなくなってしまったのです。リリース・リードのDonna “Riot Feithen” Masonは言います。「理想的には、私たちが実行ボタンを押せば毎回同じことが起こるべきですが、そうならない場合もあるんです」

私たちはまだLoLの時代遅れの基礎の一部をアップデート(英語サイト)している最中であり、それがすべて完了するまでは、再デプロイは予想のつかない事態を引き起こしかねません。どれだけ小さい変更であろうとも、再デプロイではすべての情報を再送信する必要があるため、私たちは通常――特に週末前は――慎重に事を進めることにしています。

ですが、ずっとこうも考えてきました。“大きな問題を引き起こすちょっとした不具合を修正するだけなら、もっといい方法があるはずだ”、と。


こそこそしてるがスーパーヒーロー、マイクロパッチ

約一年前、マイクロパッチと呼ばれる新技術がすべてを変えました。再デプロイとは違い、マイクロパッチはゲームプレイデータの特定部分のみを修正できます。ゲームサーバーが掲示板だとすれば、マイクロパッチは掲示板の上に貼る付箋のようなものです。大げさに言えば、再デプロイとは、たった一ヶ所の誤字を訂正するために、掲示板ごと取り替えるようなものでした。マイクロパッチであれば、ゲームサーバーはそのままで、新しいゲームをロードする時に付箋を確認して、その部分にだけ変更を行うことができるのです。

私たちはマイクロパッチを全世界で2分以内にリリースできます

そのため、マイクロパッチは再デプロイよりもはるかにリスクが少なく、はるかに早く行えます。まず一つ目に、マイクロパッチは再デプロイと違って既存のサーバーデータを利用するものであるため、変更範囲をかなり限定的にすることができます。二つ目に、マイクロパッチは実装とロールバックが非常に簡単です。私たちはマイクロパッチを全世界で2分以内にリリースできます――ロールバックも同様の時間で実行可能です。

しばらくの間、マイクロパッチは数値データの変更にしか使えませんでした――つまり、素早く対処しなければならないバランス調整の問題のためだけに存在していました。チャンピオンのスキルがどう機能すべきかを制御しているスクリプトを狙い撃ちで変更する方法はまだ存在せず、使用停止を引き起こしてしまうような(ほとんどの)バグを修正する唯一の方法は、手間のかかる再デプロイのみでした。

しかし、アニビアの使用停止バグが発生するほんの数週間前に、チャンピオンたちを救うための技術の開発が完了しました――スキルのスクリプトだけを対象とした変更を適用できるマイクロパッチが利用可能になったのです。


アニビアの再誕

アニビアのフェスティバルクイーンスキンがデビューを果たしたその日、彼女のアルティメットスキルが全スキンにわたってバグを抱えていることが判明しました。QAメンバーが集まり、問題の原因を特定する作業が始まりました。パッチ6.23で行われたアニビアの変更に携わった、アソシエートゲームデザイナーのMatthew “PhRoXzOn” Leung-Harrisonは言います。「バグを見て、すぐに何が原因か分かりました」

LoLのチャンピオンには全員に、スキルを制御するスクリプトを含んだロジックファイルが用意されています。これにはスキルのグラフィックやダメージ数値といった情報よりも、スキルがどう機能すべきかを制御するための情報が含まれています――これはいわば、あらゆる情報を結び付け、合成して画面に表示させるマザーボードのようなものです。

手違いにより、私たちはアニビアのアルティメットスキルが破損したバージョンのロジックファイルをライブサーバーに送信してしまっていました。結果としては、アルティメットスキルはRを押せばちゃんと発動し、ステキなエフェクトも表示されるものの、実際には正しく機能していませんでした。「ブリザード」は「フロストバイト」のダメージを倍化するデバフを2秒間付与するはずですが、そのデバフの持続時間がたったの0.5秒だったのです。QAリードのBrian “Aotus” Brauseに言わせるとこうです:「カッコはよかったんですけど、出てるダメージはゼロでした」

原因を特定したあと、私たちはアニビアのロジックスクリプトを更新し、少しの間QAテストを行いました。これにより、今回の新たに見つかったバグは修正されたものの、一通りバグチェックを行った結果、パッチ6.23に起因する別の古いバグ技の存在が明らかになりました。幸いなことに、特定の一つの変更に対する結果のみをチェックするだけなので、マイクロパッチのQAプロセスはかなり短い時間で行えます。私たちは二つ目の変更を行い、これも正しく機能していることを確認しました。バグは両方とも無事修正され、修正ファイルをマイクロパッチでプレイヤーに配信する準備が整いました。

こうして、週末をかけての使用停止は避けられました――たった4時間でアニビアはサモナーズリフトに戻り、敵を(正しく)寒がらせ、お祭りの雰囲気をみんなに届けられるようになったのです。


マイクロパッチは何でも直せる?

これまで、マイクロパッチはバランス問題への対応だけに使われてきました。ロジックスクリプトの変更に使ったのは今回が初めてでしたが、それによってチャンピオンを使用停止の悲劇から救うことができました。ただし、この技術はあらゆるものに適用できる訳ではありません――マイクロパッチではアニビアに新たな翼を与えたり、寒気が増すようなビジュアルエフェクトを追加することはできません。しかし、この手法なら、ライブサーバーの問題をリスクを抑えて素早く解決できます。

現在私たちは、マイクロパッチによる変更をプレイヤーにうまく告知する方法を模索しています。今のところこれらはパッチノートの一番上に追記されていますが、パッチ適用後時間が経ってからパッチノートを再度読む人がどれだけいるでしょうか?ナーフやバフといった大きな変更はクライアント内通知でお知らせしようかとも考えましたが、クライアント内通知はゲームプレイに大きな影響を及ぼしたり、ゲームを不安定にするような問題を知らせるために存在しているものです。将来的には、アップデートクライアントなら、マイクロパッチの変更をより効果的に通知するための方法を用意できるかもしれません。

Riot Penrifはこんな冗談を口にしました。「壊れていると思っていたものがいつの間にか正しく機能するようになっていたら、それはきっとマイクロパッチの仕業です(英語サイト)」


5 months ago