SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 セッションレポート(AD)

グランブルーファンタジーの「次なる10年」に向けて、100万行を超える大規模なシステム再構築の裏側とは

【15-D-3】『グランブルーファンタジー』100万行を超える大規模なシステム再構築~10周年のその先へ~

  • このエントリーをはてなブックマークに追加

 2024年2月15日、16日の2日間に渡り、ベルサール羽田空港にてCodeZine編集部主催のイベント「Developers Summit(デブサミ)2024」が開催された。株式会社Cygamesでサーバーサイドエンジニアを務める伊藤顕二郎氏と穴久保拓磨氏によるセッション「『グランブルーファンタジー』100万行を超える大規模なシステム再構築 ~10周年のその先へ~」では、同社が開発・運営するスマホ向けRPGゲーム「グランブルーファンタジー」で100万行にも及ぶリファクタリングとシステム再構築を行った事例の紹介が行われた。

  • このエントリーをはてなブックマークに追加

10年間の運用で積み重なる課題

 株式会社Cygamesが開発・運営する王道スマホRPG「グランブルーファンタジー(グラブル)」は、2024年3月10日でサービス開始より10周年を迎える人気ゲームで、2024年2月15日時点で登録者が3600万人を突破するなど今なお数多くのユーザーによってプレイされている。しかし、この人気の裏では長年に渡る運用の過程でさまざまな課題が積み重なっていた。

 「グラブルはアプリ審査が不要なブラウザ向けゲームのため、機能追加やイベント、キャンペーンなどのアップデートを高頻度で行うことが可能となっています。そのため毎月10回以上、数万行に及ぶソースコードの変更を伴うアップデートを長年続けてきました。そのアップデート頻度を維持するため、本来は開発時に構造から修正すべき実装についても、追加開発では大きく構造を変えず、影響範囲を小さくするように開発を行ってきました。このような開発スキームの影響でコードの多重化や可読性の低下、技術負債の蓄積、属人性の増加といったさまざまな課題が蓄積されていました」(伊藤氏)

Cygames グランブルーファンタジー/サーバーサイドエンジニア 穴久保 拓磨氏
Cygames グランブルーファンタジー/サーバーサイドエンジニア 伊藤 顕二郎氏

 その結果、機能追加のたびに複雑な仕様やソースコードと格闘しなければならなくなっていた。さらにはソースコードの複雑化により、メンテナンスが初期実装者に偏ることで、属人化の問題も顕在化してきた。また、ソースコードのみならず機能追加によるデータアクセスも増加し、データベースやキャッシュサーバーに掛かる負荷も次第に高まっていた。

 こうした運用面での課題に加え、技術面においてもさまざまな課題が持ち上がっていた。例えばコードは初期のアーキテクチャが手続き型で実装されていた事に加え、長年の運用により密結合な状態になっており、拡張性やメンテナンス性が低い状態になっていた。データについても一元的に管理できておらずデータアクセスも最適化されていなかった。データアクセスが増えデータベースやキャッシュサーバーの負荷も増加する一方で、WEBサーバーの負荷も増加を続けていた。

 長年の運用の末にソースコードにして300万行、テーブル数が3万超、アクセス数が秒間28万という巨大サービスに成長した今、それらの課題に直面し、アーキテクチャの限界や老朽化を感じていた。その結果「度重なる拡張によって初期のシステムが老朽化していると考え、グラブルの次の10年を支えていくために、ゲーム業界でも最大規模の100万行を超えるシステムの再構築にチャレンジすることになりました」(伊藤氏)

100万行超の大規模リファクタリングを断行

100万行超の大規模リファクタリングの方針

設計思想や実装意図まで徹底的に読み解いた設計フェーズ

 極めて大規模な再構築プロジェクトになるため、計画や準備にはエンジニアだけでなくプロジェクト全体として半年間かけてじっくり臨んだ。その後まずフェーズ1として「編成関連」の機能のリファクタリングを行い、次にフェーズ2として「クエスト関連」の機能、最後にサービス全体の機能を使用して動作する「バトル関連」のリファクタリングをフェーズ3として行う計画とした。なお本稿執筆時点(2024年2月)では既にフェーズ2までの作業を終えており、残るはフェーズ3のみとなっている。

 リファクタリングの方針としては、アーキテクチャに至るまで刷新するため、関数単位の置き換えではなくAPI単位で移植を行い動作を保証する方針とした。そのためAPIのインタフェースは極力現状を維持することとし、これによりEtoEのテストを可能にした上でリリース後に万が一問題が発生してもAPI単位でリファクタリング前に容易に切り戻しできるようにした。また全体のアーキテクチャには「クリーンアーキテクチャ」を採用し、各コンポーネント間を疎結合で連携させることで変更や拡張に強いアーキテクチャを志向した。

 さらにはシステム全体でデータアクセスを一元管理する「データマネージャー」の仕組みを新たに取り入れ、データアクセス処理をカプセル化することでデータアクセスの安全性を担保するとともに、キャッシュサーバーやデータベース負荷の画一的な最適化を図った。

 一方、このリファクタリング作業を実際に行う主な人的リソースは伊藤氏を含むサーバーサイドエンジニア6名と、この規模の再構築プロジェクトとしてはかなり小規模の体制で臨むことになった。そこで少ない人数でも最大のパフォーマンスを発揮できるよう、開発効率を最大化するためにさまざまな工夫を凝らした。

 「まず上流の設計工程でオリジナルのソースコードの仕様と実装を読み解くのですが、単に動作をなぞるだけではなく、本来の『設計思想』『実装意図』までをしっかり読み解いた上で再設計するようにしました。その上で設計品質の画一化のため設計のレビューを行い、調査不足を検知するだけでなく設計思想や実装方法などの理解に曖昧な点が残らないことを徹底しました」(伊藤氏)

本来あるべき設計・実装を読み解く
本来あるべき設計・実装を読み解く

 設計にしっかり時間をかけることで設計工程における工数は増えるが、設計の品質を高める事で、下流の実装やコードレビューの手戻りを減らし、結果として全体の工数を大幅に削減した。

リファクタリング後にシステム性能が大幅向上

 設計フェーズだけでなく実装フェーズにおいても、作業効率を最大化するためにさまざまな工夫を凝らした。ここでもアーキテクチャや設計思想に関する開発メンバーの理解を重視し、方針から逸脱した実装が行われないよう徹底した。プロジェクトに参画してまだ日が浅く、アーキテクチャや設計思想の理解が浅いメンバーは、必ず理解度の高いメンバーとともにペアプログラミングを行うことでメンバー全員への方針の浸透を図った。

 「たとえ開発歴が長いメンバーであっても、今回のアーキテクチャや設計思想に対して共通認識を持ってもらうため、この点については決して聖域を作らず、すべてのメンバーに理解してもらいました」(伊藤氏)

 また、たとえリファクタリングを既に実施したコードであっても、そこで問題が見付かれば決して妥協することなく再リファクタリングを行う事を徹底した。こうしてチーム内の意識や理解を統一することで、「チーム内で設計に関する議論が、共通認識の下で活発に行われ、それらがチームの設計やソースコードの品質を高め、開発速度の向上にも寄与しました。やはりチームで技術的な課題を共有して、オープンに議論できる文化を作ることが大事だとあらためて実感しました」と伊藤氏は振り返る。

 こうした地道なリファクタリングを重ねた結果、システムに掛かる負荷は確実に軽減している。例えば、性能検証の結果としてレスポンスタイムがリファクタリング前の101ミリ秒に対して、リファクタリング後は61ミリ秒と40%短縮した。またスループットも、WEBサーバー1台辺りリファクタリング前は分間2万リクエストだったのがリファクタリング後は3万2000リクエストと、1.5倍のアクセスをさばけるようになった。

リファクタリングの結果システム性能は大幅アップ

リファクタリングの結果システム性能は大幅アップ

課題解決のためチームで設計思想を統一

 伊藤氏とともにこのリファクタリング作業を担当した穴久保氏は、プロジェクトの過程で遭遇したさまざまな困難について次のように振り返る。

 「設計思想や原理原則に対する各メンバーの理解や意識に差があると、成果物の品質に差が生まれてしまいますし、チーム内の議論も活発化しません。とは言えメンバーはそれぞれ異なるバックグラウンドを持っているため、やはり設計思想や原理原則の意識統一は一筋縄ではいきませんでした」

Cygames グランブルーファンタジー/サーバーサイドエンジニア 穴久保 拓磨氏

Cygames グランブルーファンタジー/サーバーサイドエンジニア 穴久保 拓磨氏

 この課題は、設計レビューとペアプログラミングの取り組みを徹底し、チームで技術的な認識を共有して議論できる文化を作ることで乗り越えることができた。ただし設計思想や原理原則を重視した一方で、細かな設計ルールはほとんど設けなかった。

 「ユースケースによって設計方針は変わるため、細かなルールを決めてしまうとそれを無理やり適用するあまり設計がねじ曲がってしまいルールが方法ではなく目的になることを危惧しました。そのため細かすぎるルールはあえて設けずに、適宜適切な設計・実装方針を議論しながら開発を進めていきました」(穴久保氏)

設計の柔軟性を担保するために細かいルールは作らない
設計の柔軟性を担保するために細かいルールは作らない

 設計思想と原理原則の適用されたソースコードが浸透するにつれ劇的に開発工数が短縮された。変更容易性や再利用性が飛躍的に高まり、かつては1カ月かかっていた新規実装をわずか数日間で行えるようになった。

 また長年の運用の過程で類似するサービス仕様の実装が重複している箇所が多数存在した。これらを本来あるべき形に修正するためにプランナーと検討しながら新たなサービス仕様をすり合わせていった。また膨大なデバッグ量をこなすために、グラブルチームに所属するデバッグメンバーだけでなく、チーム外のデバッグメンバーにも協力を仰ぎ、会社のデバッグ組織として取り組んだ。但し、全てをデバッグチームに丸投げするのではなく、エンジニアもテストの自動化を行うことで、協力して対応にあたった。

 「このように自分たちエンジニアだけで解決にあたるのではなく、会社組織全体として課題解決にあたることが重要だとあらためて感じました。今後もこうした取り組みを続けて、ユーザーの皆様に『最高のコンテンツ』を末永く提供し続けていきたいと考えています」(穴久保氏)

株式会社Cygames

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

提供:株式会社Cygames

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19194 2024/04/23 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング