【Developpers Summit 2020フォローアップ】グランブルーファンタジーを支えるサーバーサイドの技術


こんにちは。サーバーサイドエンジニアの小松・大橋です。
2020年2月13日・14日に開催された「Developpers Summit 2020(デブサミ2020)」において、『グランブルーファンタジーを支えるサーバーサイドの技術』と題した講演を行いました。ご参加いただいた皆様、当日は素晴らしい時を共有させていただき、ありがとうございました。

なお、この講演はWebメディア「CodeZine」でも取り上げていただきました。ご興味のある方はご参照いただければと思います。

講演資料はこちらになります。

本稿では、講演でお伝えし切れなかったことや、質問を多くいただいた事項をフォローアップしていきます。

中長期的な改善の意義について

講演では、中長期的な改善の意義についてお話ししました。
我々にとって最も大切なのは、お客様に快適にプレイしていただくことです。そして、トラブルを未然に防ぐことも目的の一つであるとお話ししました。
本稿では、さらにもう一つの観点をお伝えしたいと思います。

サーバーリソースの最適化

講演で話し切れなかったもう一つの観点は、サーバーリソースの最適化です。
サーバーリソースを最適に利用できるように進めることは、未来のコンテンツ開発と運営の品質に良い影響を与えます。環境によっては、ビジネスの成否に影響することもあるでしょう。

中長期的な改善は、このサーバーリソースの最適化に繋がります。例えばレスポンス速度は、外部サービスへの問い合わせなどを除くと基本的にCPUリソースの占有度合いに左右されます。このレスポンス速度を本質的に改善していくことは、CPUリソースの最適化に繋がります。

レスポンス速度を改善する一つの選択肢としてスケールアウトが挙げられますが、表面的な解決策で満足せず、「当たり前」ともいえる小さな改善を、中長期的に積み重ねていくことが大切です。

ORM vs 連想配列について

講演では、チューニングの事例としてORMの改善例をご紹介しました。この事例に関しては、講演後の Ask the speakerの時間にも多くの反響をいただきました。特に「ORMと連想配列のどちらを採用すべきか」というテーマについては複数の方から質問を受けました。そこで本稿では、フレームワークのORMを改善するに至った理由をお伝えできればと思います。

プロパティ定義と型の静的定義

講演でもお伝えした通り、従来採用していたORMには『グランブルーファンタジー(以下、グラブル)』にとって不要な複数の機能が存在しました。しかし、ORMの機能すべてが不要なのではなく、ORMの優れた面はグラブルにとっても必要だと考えています。

ORMでは、プロパティと型を静的に定義することで表面的なデータ構造を可視化できます。更新頻度が高く、複数人で継続的なアップデートを続ける開発チームではデータ構造の可視化は大きなメリットです。

一方、ORMの代替として連想配列を採用した場合、ソースコードの保守性・可読性などの複数の観点が弱くなります。グラブルの膨大な更新を支えるうえで、不安材料が残ります。そのために、グラブルに最適なORMを目指して改善を行うことにしました。

PHPのコピーオンライト戦略

PHPの連想配列には、暗黙的コピーが行われるパターンがあります。大規模な開発チームにおいて、暗黙的コピーが行われることで潜在的にチューニングコストが高い(可視化が極めて困難な)問題箇所になる可能性があります。

その点では、ORMクラスのインスタンス(オプジェクト)の扱いは比較的簡単になります。コピーは明示され、エンジニアの意図通りに動作することを担保しやすくなります。PHPにおける連想配列のこの性質も、ORMの改善を決めた理由の一つです。

処理速度の違い

最も大きなポイントですが、連想配列よりも、改善後のORMプロパティ参照が高速であることです。グラブルの性質に合わせて最適化した結果、保守性と可読性を担保しつつ、連想配列よりも高速な参照が行えるようになりました。確かな結果が出たからこそ、グラブルに最適なORMを採用するに至りました。

以上が、我々がORMの改善に踏み切った大きな理由です。これにより、開発者は「ゲームを面白くすること」により集中できるようになり、結果的に生産性および品質の向上につながると考えています。

インフラ構成はどうなっているのか

講演に関する反響の中には、インフラ構成を知りたいというご意見もありました。グラブルのインフラに関しては、「Developpers Summit 2017」における『グランブルーファンタジーを支えるインフラの技術』という講演のフォローアップ記事を公開していますのでご覧ください。

なお、今回の講演タイトル(『グランブルーファンタジーを支えるサーバーサイドの技術』)と、講演中にお伝えした「コア技術は自分たちで実装する」という表現は、この2017年の講演に大きく影響を受けたものであることを付記しておきます。

終わりに

今回の講演や本稿では、『グランブルーファンタジーを支えるサーバーサイドの技術』と題し、サーバーサイドエンジニアの視点での取り組みをご紹介しました。

リリース以来6年間、開発の現場では「お客様に最高のコンテンツを届けたい」という共通の目標に向かい、サーバーサイドのエンジニアのみならず、インフラチームやデバッグチームなど各部署が連携しながら、日々の運用と問題解決・改善に取り組んできました。

今後も同じ気持ちで、チーム一同励んでいきたいと思っておりますので、これからもグラブルをよろしくお願いいたします。

以上、小松・大橋のフォローアップでした。最後まで読んでいただきありがとうございました。