クライアント クリーンアップ:2020年の振り返り&これから

2020年の進展を振り返りつつ、2021年の予定について紹介していきます。

私たちはリーグ・クライアントのパフォーマンスと信頼性向上のため、内部で行っている作業の進捗を継続的にお伝えしていくことをお約束しました。

本日のアップデートは、同シリーズ第6回目のブログとなります。(第1回第2回第3回第4回第5回も合わせてご参照ください)。

要約:2020年はクライアントの起動時間、アーキテクチャー、チャンピオン選択、試合終了次画面、メモリーリーク/クライアントのクラッシュ、バグ修正の各要因について改善を進めました。現在はソーシャルパネルとクライアントの総合的な安定性改善を中心とした2021年第1四半期の計画を制作中です。


2020年の振り返り

私たちのチームは2019年後半に結成されましたが、当初は「リーグ・クライアントの現状」を正確に把握することが仕事の大半でした。その一環として、私たちは世界各地のプレイヤーの皆さん(あなたも含めて!)がクライアントのどの部分に不満を感じているかを調査し、その結果に基づいて注力するポイントを決定することにしました。もちろん現在も課題は山積していますが、2020年は有意義な改善を実施できたのではないかと考えています。

  • 世界規模でクライアントに関するプレイヤー調査を実施し、結果に基づいて注力する箇所を決定しました。以下の成果一覧は、いずれも皆さんが解決を望まれたからこそ対処できたものです。
  • 世界中のプレイヤーの90%が体験するクライアントのブートストラップタイム(クライアントが起動するまでに要する時間)を16秒まで短縮(2020年初頭当時は29.5秒)
    • これはアーキテクチャーの改修によるもので、ブートストラップEmberアプリ(クライアント起動時にロードされるJavaScriptフレームワーク)63%削減、クライアント内のプラグイン57%削減を実現しています。要約すると「大量のコードを綺麗に直した」とも言えるでしょう。
  • チャンピオン選択画面におけるピック・バンの応答時間と信頼性を改善
    • チャンピオンフィルター使用時のパフォーマンス問題を修正し、チャンピオンアイコンが一覧表示される部分自体を改善
    • チャンピオン選択画面の機能使用率を調査(こちらについては後述)
    • チャンピオンの確定/バン操作時間を改善
    • チャンピオン選択画面遷移時および表示中に生じていたメモリーリークを修正(下記にて強調表示)
  • ゲームが終わってから試合終了画面へ遷移する際にクライアントが完全にフリーズし、画面が暗転していた問題を修正
  • 試合終了時、(そもそも表示される必要のない)「再接続」ボタンが表示され続けていた問題を修正
  • 細かなバグからずっと残り続けていた問題まで、2020年中に合計175個のバグを修正
    • プレイヤー名がチャット上で「...」と表示される
    • チャットでメッセージを受信した際にタスクバーが光らない
    • 新規プレイヤーにソーシャルパネルが表示されない
    • 別のコンピューターからログインすると設定がリセットされる
    • ログイン時に同じギフト通知が繰り返し表示される
    • クライアントで各種操作を行った後にホーム画面に戻ると、画面に何も表示されない
  • 「コレクション」タブおよびタブ内各項目の応答性を改善
  • 「ルーン」タブのロード時間を40%短縮、ルーン関連UIの即応性と安定性を改善
  • クライアント全体に存在していた30個のメモリーリークを修正。この修正は特に難易度が高く、また2020年後半になってようやく発見できた問題だったため、ホリデーシーズン前に修正できたことはチーム全体にとって特に嬉しい出来事でした
    • メモリーリークは、プログラムの一部がタスクを完了したにもかかわらず使用したメモリー領域の開放に失敗した場合に生じます。メモリーリークが生じるとシステムで実行中の他プログラムが利用できるメモリー容量が制限されます。これが複合的に生じるのは大変良くない状況ですが、(大規模アプリケーションの場合は特に)原因特定が極めて困難であることでも知られます
    • パッチ10.23で最初のメモリーリーク修正を実施するまで、Riot管轄地域内のプレイヤーは1パッチあたり193,000回のメモリー不足によるクラッシュに遭遇していました。2020年最後のパッチ10.25では、このクラッシュ回数が55%低下したことが確認されています

先ほど述べた通り、私たちは世界規模でクライアントに関するプレイヤー調査を実施し、その結果に基づいて注力領域を決定してきました。上述の各種修正は皆さんが特に満足していなかった点を改善してきた軌跡です。しかし極端な話、「皆さんに改善したと体感してもらえない」ならばどんな修正も無意味です。だからこそゲームから収集した各種指標だけでなく、プレイヤー調査でも総じて肯定的な回答傾向が見られたことは私たちにとって大変喜ばしい事でした。クライアント利用時に感じるフラストレーションが減ったと感じているプレイヤーが増えている、ということですから。

もちろん上でフラストレーションが「減っている」と書いたのは、まだまだやるべき事がたくさんあることを自覚しているからであり、今年もより良い体験を目指してアップデートを提供していくつもりです。


「チャンピオン選択」と使用率の低い機能

過去のブログでも触れましたが、私たちは以前から「チャンピオン選択」画面の総合的なパフォーマンスを改善するため、使用率の低い機能を削除するべく調査を行っていました。具体的には「お気に入り」、「ミッション」、「エモート」の3点を検討していたのですが、こちらは検討の末に削除しないで最適化することに決定しました。既に「エモート」についてはバグを1点修正しており、現在は「お気に入り」と「ミッション」が意図通りに動作するよう開発を進めています。


次のステップは

現在はまだ2021年第1四半期の計画を仕上げているところですが、一足早く解決を目指す予定の項目を紹介してみましょう。

ソーシャルパネル

昨年1年を通じてソーシャルパネルに関する問題報告は増加傾向にありました。そこで昨年12月に最初の一歩として、試合中のフレンドのホバーカード(カーソルを合わせると表示されるカード)にプレイ中のモードやチャンピオンが表示されなかった問題を修正しました。今後は以下の問題を修正していく予定です。

  1. ソーシャルパネルが未接続状態になる
  2. フレンドリストが読み込まれない、表示されるステータスが正しくない、フレンドが表示されない
  3. フレンドリストが埋まっているプレイヤーにフレンド申請を送れない
  4. フレンドがノーマル戦をプレイしているとホバーカードにランク戦の情報が表示されなくなる
  5. チャットで素早く何度もメッセージを送信するとタイピングの反応が鈍くなる
  6. フォルダの並び順がセッションをまたぐと変更される
  7. 「ゲームとサーバーをグループ化」で並び替えると「レジェンド・オブ・ルーンテラ」と「Valorant」フォルダが表示されなくなる
  8. チャットボックスの設定で「日付を表示」をクリックするとテキストボックスがオーバーラップ表示される
  9. 「新しいフレンド申請の通知を表示」設定がオフになっている時だけ通知が届き、オンにすると届かない

この他には、現在ソーシャルパネルで使用されている古いJavascriptフレームワーク(Javascriptについては後述します)を廃してEmberに完全移行します。移行に合わせて全体の見直しや好ましくないコードの最適化を実施することができるため、移行後は信頼性向上とバグ減少が見込まれます。

クライアントの安定性

ここではリーグ・クライアントの安定性向上を目指して新たに注力していく2つの点、「クライアントのクラッシュ」と「Javascriptエラー」のについてお話ししたいと思います。特にJavascriptエラーは様々な影響を及ぼすものなのですが、これには…クライアントのクラッシュも含まれます。この取り組みではクライアントの特定側面(チャンピオン選択やブートストラップタイムなど)に注力するのではなく、クライアント全体にまたがる包括的なアプローチを取っていきます。従来から優先的に取り組んできた安定性向上作業と合わせて、今後は以下の4点を目標として取り組む予定です。

  • クラッシュ回数の低減:パッチ10.25の期間中、Riotの管轄する16地域ではクライアントクラッシュが220万回発生していました。そこで初期調査を実施したところ、クラッシュの主要な原因を排除するにはChromium(リーグ・クライアントのアーキテクチャーで中心的な役割を果たすWebブラウザです)のバージョンをアップグレードするのが最適解である、という結論にたどり着きました。
  • Javascriptエラーの低減:パッチ10.25の期間中、Riotの管轄する16地域のクライアント上で発生したJavascriptエラーは3600万回でした。Javascriptエラーは必ずクラッシュを引き起こしたり、パフォーマンスに重大な影響を及ぼしたりするわけではありませんが、目に見えないエラーであっても積み重なれば重大な問題に結びつくこともありえます。このエラー数を低減していくことはクライアント全体で様々な好影響を生み出すことになるでしょう。
  • メモリーリーク修正の継続:メモリーリークをいくつか修正できたことは昨年の大きな成果の一つでした。今年もしっかりと成果を出すべく取り組み続けます。
  • アーキテクチャー改修を通じたコードベースの整理:Chromiumをアップグレードするには多数の事前準備を終わらせる必要があります(なお、この準備自体もクライアントのパフォーマンス改善につながります)。現在のところ、事前準備の完了とChromiumのアップグレードは今年の中頃前後を予定しています。

    • 前回Chromiumをアップグレードしたのは「クライアント クリーンアップキャンペーン」開始の数ヶ月前、2019年12月のことでした。この時のアップグレードは優れた成果を挙げています(Ctrl + F で”Chromium”を検索してみてください)。今回のアップグレードでも、導入が近づいてきたら主要な改善予定ポイントを紹介する予定です。


最後に、いつもクライアントに関するフィードバックをお寄せいただき本当にありがとうございます。今後もしっかりと耳を傾けていきますので引き続きよろしくお願いします。2020年はしっかりと成果を挙げられたので、その勢いを駆って今年もクライアントを改善していきます。すべては、プレイヤーの皆さんのために!