龍を取り戻せ!

Riot Costyによる

2016年9月29日、2016 World Championship初日。ライアットゲームズは、ゲームプレイ上の重大なバグのためオレリオン・ソルを使用停止にした。しかしWorlds 2016第4日目となる10月2日に、「星を創りし者」はサモナーズリフトへ堂々と復活を遂げた。これは、最悪のタイミングで発生したバグを潰すため昼夜を問わず対策に当たったチームたちの物語である。\ジャーン♫/


サンフランシスコ - 9月29日午後10:30(太平洋標準時)

Worlds 2016初日の最終試合、北米代表TSM対中国代表Royal Never Give Up(RNG)戦。その開始から2分後、TSM Bjergsenがゲームをポーズする。RNG Xiaohuのオレリオン・ソルの周囲を廻る星(固有スキル)がまったく表示されない状態だったからだ。

LUKE RINARD(オレリオン・ソル担当ゲームデザイナー):オレリオン・ソル担当ゲームデザイナーだったから、プロのレベルでのプレイを実際に見るのがすごく楽しみだったんです。もちろんそれ以前にもピックはされていたけれど…何といってもWorldsですから!しかも初日にいきなりピックだったし!…でも、直後にゲームはポーズされた。あの瞬間思ったのは「ああ…根拠はないけどきっとオレリオン・ソルのせいだな…」ってことでした。バードとオレリオン・ソルがピックされた時は結構そう考えちゃうことが多いんですけど、ふだんはその勘も外れるんです。でもこの時は当たってしまった。

BRIAN BOSSE(エンジニアリングアーキテクト):あの時は自宅で生放送を見てました。そして試合がポーズされた。試合がポーズされると心臓がドキッとします。あの瞬間は祈ってましたね。「ボイスチャットの問題でありますように…どうかボイスチャットの問題でありますように…」って。ボイスチャットで問題が生じることは多いですから(その場合、問題はすぐに解消する)。でもあの時は違った。

AMELIA VON HADEN(ゲームプレイプログラマー):あの時はみんなで試合を見てたんですけど、リプレイが流れた時に…全員が「うあああああ!ノォォォォォゥ!」ってなりました。

RAVEN KEENE(主審):バグ発生時の第一対応策は常に同じです。可能な限り情報を集めること。この時は、担当審判から「Bjergsenがオレリオン・ソルの星が見えないと言っています」という報告がありました。そこで各プレイヤーの画面表示が確認できる録画ビデオを確認したんです。私の観戦者クライアント上では何も問題がなかったのですが、BjergsenのPCから取り出したビデオファイル上でははっきりとその問題が視認できました。

そこで、まず彼のクライアントを再起動しました。当初はそれで問題が解決しました。なので「ああ、ロード時に適切なアセットが読み込まれなかったんだ、問題はもう再発せず、試合のやり直しも不要だろう」と考えたのですが…。1分もしないうちに問題は再発しました。この時点で、再起動しても問題解決には至らないことは確定ですから、次の対策に移るしかありません。そして、試合のやり直し(リマッチ)が提案されたんです。

NICK TROOP(Esportsライブプロデューサー):イベントを通じてチャンピオン1体が使用停止にされること、そしてそれが突発的に発生したことは、ある意味では「自分たちの敗北」のように感じられました。今回のオレリオン・ソルの件のように特殊で予測不可能なものであっても、気持ちとしては同じです。


ロサンゼルス - 9月29日午後11:00

オレリオン・ソルが使用停止にされると、バグの原因究明とその解決策の模索が即座にスタート。ライアターたちはロサンゼルスオフィスに集結、対処を開始する。

BRIAN BOSSE:あの時は内部チャットにログインしていたんですけど、関係チャンネルはすごい勢いで流れてて。「オレリオン・ソルの固有スキルで問題が発生したぞ」って。自分もあのシステム制作の一端を担っていたから「おし、やれることやるぞ!」という気持ちになってました。そして二度めのポーズで問題が再起動では解決されないことが確定した瞬間、僕はバットマンのマントを装着(するくらいの気合を入れて)、オフィスに入って原因究明に取り掛かりました。

AMELIA VON HADEN:問題が発生したのを見て、すぐにチャットにログインしたんです。バグの件はどうなってるだろう?って。私はゲームプレイプログラマーだから、LoLのゲームコードについてはかなり把握してます。だからバグがゲーム本体に起因するものなら私も力になれるかも、って思って。それにオレリオン・ソルの開発期間中には短期間でしたがチャンピオンチームに在籍していたので、彼の固有スキルの実装内容も少しは理解していましたし。その後しばらくチャットを見ていくうちに、社内チャットで当該バグについて議論している「Worlds救急医療班チャンネル」を見つけました。チャットの内容を読んでみたら、どうも自分が力になれるかもしれない内容だぞって思って。それで「マジか!それなら今すぐ車でスタジオ向かうわ!」ってなったんです。

BRIAN BOSSE:職場に向かう途中の車内で、「eSports用ゲーム環境は一体どうなってんだ?このバグ、もしかして全体に影響するヤツか?」ってずっと考えていました。あの時点ではあらゆる可能性がありえたので。もう就労時間は過ぎていたから通常の報告システムは動いてなくて。だから誰でも手の空いている者は駆けつけよう、という状態だったんです。そして僕は手が空いていた。だから駆けつけました。


サンフランシスコ - 9月30日 午前0時

Worlds初日が終了し、サンフランシスコのeSportsチームは即座にバグの再現に取り掛かる。「バグの再現」は原因究明と解決策模索を進める上で非常に重要な手順だ。この時点でバグの修正にあたっていたのは、北米大陸の各所を拠点とする3チーム。イベント開催地サンフランシスコのeSportsチーム、ロサンゼルスの開発チーム、そしてモントリオールの外部専属QAチームだった。

RAVEN KEENE:あの時は何時間もひたすらに、考えられる再現手順を片っ端から試してました。ステージ上で起きたバグを再現させようと、力の限りを尽くしてあいまいな点をひとつひとつ潰していったんです。最終的な試行回数は覚えてないですけど、おそらく20回以上はゲームをやり直したと思います。

NICK TROOP:順番としてはまず、エンジニアが社内で使っている「シングルプレイ」ツールを使って再現を試みました。これでバグの再現自体はしたんですが、1試合に9体のオレリオン・ソルを出してようやく出たんです。もちろんこれは不可能な設定ですが、エンジニアリング的な視点ではそれがとっかかりとなり、最終的にステージ上で起きたバグと同じ状況を再現できました。でも、問題を把握できでいないから初日はチャンピオンを使用停止にするという決断をしたRavenは、次に「大会期間中ずっと使用停止にしたままにするかどうか」という決断を迫られることになりました。そんな事はしたくないというのがライアターの総意でした。視聴者にとってもつまらないし、プロ選手たちにとっても良くないですし。

RAVEN KEENE:このバグは本当に不明な点が多かった…面白いくらい分からないことが多かったんです。私たちは途中から、プロ選手のアカウントを使ってバグ再現を試みるようになりました。テストアカウントだとバグが再現しなかったからです。完全に同一の条件でも、アカウントを変えるとバグが再現したので、もしかしたらこのバグはアカウントに関係するものかもしれないと考えるようになりました。


ロサンゼルス - 9月30日午前2時

ロサンゼルスのチームがついにバグを再現。直後から、その原因を探るべくリバースエンジニアリングが開始された。

BRIAN BOSSE:こういう状況に陥った時、最初にすべきことはひとつ、事実を整理することです。何が分かっていて、何が分かっていないのか。あの時点で僕らが持っていたのは、Bjergsenの画面を録画したビデオだけ。そこから僕らは各自のPCでクライアントを立ち上げて再現を試み、可能な限りBjergsenと同じ動きをして、バグが再現することを願いました。でも再現しなかった。ちきしょう、これで再現すれば楽勝だったのに。

AMELIA VON HADEN:みんなは何時間もぶっ続けでコードを解析し続けていました。そこで私は、「シングルプレイヤー」ツールを使ってリアルタイム観戦者(通常の観戦ツールは不正防止のため少し遅延するようになっている)を通常の1体から20体に増やしてみました。複数の観戦者を配置した状況におけるゲームの挙動をテストしたんです。自分のPC上で20体も観戦者を配置すると、画面はカックカクでした。みんながバグを再現しようとしてた横で、そんなこと試してたんです。

BRIAN BOSSE:午前2時前くらいには、違う条件下ではありましたがバグの部分的な再現ができるようになっていました。メンバーの一人が同じPC上でクライアント10個とサーバーを立ち上げていた時に再現したんですけど、再現率がもの凄く低かった。50~100回に1回とかそういうレベル。再現確認するにはひたすら画面をにらみ続けることしかできず、しかも消える星はひとつだけでした。

AMELIA VON HADEN:最終的にバグの再現に成功した時はみんな「やった!捕まえた!さあこれどうする!?」って感じになりました。バグはデバッガーを付けられないビルドで再現したので、まずは全員でプログラマーのところに駆け寄って、プログラマーが使っているPCでも再現するかどうか、固唾をのんで見守りました。そして20回くらい試したところで、ついに再現したんです!消えた星は2つだけでしたけど、ようやく足がかりを得た、という感じでした。なんだか爆弾から信管を外してるみたいな気分でしたね。その後はすぐにビルドにデバッガーを付けてもらって、Brianを呼びました。コードを書いたのは彼だから、彼ならばわかるはず、と。このバグを解き明かし、解決できるとしたらアイツしかいない!と。

BRIAN BOSSE:ステージで発生したバグとは違う挙動だったわけですけど、とにかく部分的にせよ再現できた。そのおかげで、そこからデバッガーとにらめっこしつつ星の状態を見極め、バグを引き起こしている要因を見返すことができたんです。そこさえ分かればあとは作業を進めるだけ。そして5時間の作業の末、ついにバグが観戦者に起因するものだと特定できました。かかった時間は途中の仮眠を含めて合計12時間。最後のメンバーが帰宅したのは午前4:30、午前9:00には別のメンバーがすでに出社していました。


ロサンゼルス - 9月30日午前9:30

バグの原因は特定された。そして翌朝、ライアターたちは続々とオフィスへ出社してくる。

LUKE RINARD:翌日出社してみると、オレリオン・ソルは1~2日は使用停止にするが、バグの解決策は見つかっているという状態でした。ビックリしました。だってもう昼前なのに、解決ってどうやって?って。Brianは昨晩から働きっぱなしで、彼のデスクにはジュースの空き缶が山積みになってました。顔はちょっとげっそりしていましたけど、でも仕事はバリバリ進めてて、問題解決するのにワクワクしてるような様子でした。

AMELIA VON HADEN:あの空き缶の山はかなり凄かったよね。

RAVEN KEENE:デスクに所狭しと置かれた空き缶の山の写真は社内でもちょっとした話題になってました。だって数十本って数だったんですよ!

LUKE RINARD:Brianのデスクまで行ったら、彼はバグの詳細を他の人に説明してました。激しいジェスチャーを交えて、エンジニア魂を炸裂させてる感じ。そこで僕が現状を尋ねようとしたら、隣りにいたエンジニアが「待った待った!シーッ!今すごく大事なとこなんだ。Brianにとっておきのアイデアが降りてきてるんだよ」って。

BRIAN BOSSE:観戦者システムはずっと怪しいなと思ってたんです。eSports環境と通常環境で根本的に違うのはそこだけなので。ええ、eSports環境ではまったく違う観戦者システムを使ってるんですよ。一方で他のメンバーはステージ上でBjergsenのアカウントを使ってバグを再現させていました。「バグはいつ再現し、いつ再現しないか?」を見極め、原因を絞り込んでいったんです。あの作業で集まった情報と、こちらで発生した部分的再現のデバッグの結果から、ようやくざっくりとした原因の線引きができたんです。


サンフランシスコ - 9月30日 午前10時

原因判明、解決策も特定された。eSportsチームは、Worlds 4日目からオレリオン・ソルの使用停止を解除すると発表。

RAVEN KEENE:第一報を聞いた時の僕らのリアクションは「神よ!感謝します」、続けて「Bosse、マジで神!」でしたね。次に考えたのは、解決策の内容でした。簡単に解決できるものなのだろうか?と。でも今回の場合は簡単でした。各選手のアカウントを調整することで対処できましたから。その次の仕事は、ライアット社内の関係者にバグの潜在的影響について連絡することでした。アカウント関連のバグだったので、全観戦者、それから世界各国の観戦者と情報を共有する必要があったんです。ライブプロダクションチームは相当忙しくなりました。放送関係者への連絡に加えて、すべての代表チームに使用停止解除を知らせ、スクリム(模擬戦)の日程を確認し、スクリム開始前に修正を施す必要もありましたから。

BRIAN BOSSE:本当にホッとしました。当初はあらゆる可能性がありえたのに、もう大丈夫だというところまで抑えることができたんですから。振り返ってみれば、できすぎなくらい順調だったと思いますよ。

LUKE RINARD:僕は手伝ってくれたメンバーを探して、ひたすら賛辞の言葉を投げかけてました。自分にとっては本当に一大事だったんだ、君たちこそが英雄だって。でも僕が「本当にありがとう」って言った後…彼らが返してくれた言葉は「ああうん、当然でしょ」って。「ありがとうって、何に?木曜日の深夜だろうが、そりゃ駆けつけて何時間でも対処するよ」って感じだったんです。

BRIAN BOSSE:この件で凄いなと思ったのは、誰も「呼び出されて」ないってところです。エンジニアが数名、QAメンバーの何人か、それから自発的に手伝ってくれたプロダクションのスタッフ。強制的に呼び出された人間は一人もいなかった。それでもあんな深夜まで馬鹿みたいに長い時間修正作業を手伝ってくれたっていうのは、本当に凄いことだと思う。

AMELIA VON HADEN:手伝ったのは、そうするべきだと思ったから。夜も遅くて大半のメンバーは帰宅した後だったし、翌日にも試合が控えてた。私は問題を把握してたから、手伝えると思った。何か…手伝うのが「正しいこと」だって感じたというか。Worldsを最高の体験にするための最善手を打っただけというか。代表チームの多くがオレリオン・ソルを練習してきてるのも、彼の活躍を心待ちにしてる視聴者の人もたくさんいるのも知っていたから、オレリオン・ソルなしのWorldsなんて…絶対ありえないと思って。


サンフランシスコ - 10月2日午後8:30

Worlds 4日目、オレリオン・ソルの使用停止は解除された。そしてCounter Logic Gaming(CLG)対ROX Tigers戦でCLGのHuhiは早速オレリオン・ソルピックをピックする。得意チャンピオンを手にした彼は、韓国王者(ROXは当時LCK Summerで優勝)を相手に圧倒的な活躍を見せて試合に勝利した。

AMELIA VON HADEN:あの感覚は、チャンピオン制作チームのみんなが感じる感覚と似てると思う。手がけたチャンピオンがピックされると、「酷い試合になるじゃないか、あるいは不具合が出るんじゃないか」って不安から胃がギュッと締め付けられるような感覚があるから。オレリオン・ソルの場合も、携わった全員が同じ気持ちだった。試合を見ながら、バグ出るな!ってひたすら願い続けてた。

RAVEN KEENE:使用停止解除後にオレリオン・ソルがピックされた瞬間は、全員が「さあ、おいでなすった」って感じでした。試合開始から数分間はみんな息を殺して見守ってた。しばらくして、ゲームが滞りなく進んで見事なプレイが飛び出すようになって、場の空気は一気に変わりました。社内でも、社外でも。プレイヤー、ファンの皆さん、あらゆる場所で変わったんです。オレリオン・ソルはあの瞬間「使用停止にされたチャンピオン」から「破壊者」へと生まれ変わりました。

LUKE RINARD:オレリオン・ソルがピックされてCLGが大活躍を見せた時は、「めちゃくちゃ強いな、ちょっと強すぎるんじゃないかな」って感じたくらいでした。Worldsの舞台で彼がプレイされてて、しかも大活躍してるのを見るのは本当に嬉しかったですよ。あの試合の後、月曜日にはオフィスでみんなにもう一度お礼を言って回りましたから!日曜の試合でプレイされてるのを見て、この1ヶ月が報われたよ!って。その後Worlds決勝でも勝敗を左右する第3試合でピックされたので、追加で1ヶ月報われた気分でしたね。


Worldsはリーグ・オブ・レジェンドの最高峰を決める国際大会だ。もしもオレリオン・ソルほど重要なチャンピオンが使用停止にされたままであれば、プレイヤーと視聴者にとって著しい悪影響が生じたことだろう。サモナーズカップを目指してしのぎを削る世界最高峰のプレイヤーたちが、他でもないWorldsの舞台でオレリオン・ソルを使うことができるよう、彼らは己の意志で集結し、昼夜を問わずバグの修正に当たったのだ…!なお本バグの技術的な詳細に興味のある方は、Brian Bosseの記した原因分析(英語サイト)を参照されたい。


1 month ago

タグ付け: 
Aurelion Sol