リファクタリングに必要な設計観点と回避法/TECH PLAY

イベント2018/05/31

こんにちは、広報の上原です。

4月27日、TECH PLAYで開催されたエンジニア向けのトークイベント「【20~30代向け】数百万人超のプレイヤーを抱えるゲーム運営ノウハウを大公開!ー長期運営を見越したシステム設計から、タイトル運営における落し穴の回避策、裏話までー」に、技術部部長の平岡洋祐とエンジニア4名が登壇いたしました。

ゲームが運営フェーズに入ったからこそ起こる「あるある!」な話、 長期運営をしているゲームだからこそ培われるノウハウや裏話など、実体験を踏まえてお話させていただきました。

この記事ではエンジニアの廣橋俊昭がお話させていただいた、『運用に耐えるための設計とリファクタリング』についてレポートさせていただきます。

■運用に耐えるための設計とリファクタリング

アジェンダは
■運用を見据えての設計観点
 ー正規化の重要性
 ー機能単位でのコード分割
■リファクタリングをやる必要性とタイミング
です。

まず、ゲーム運営ではどんなことをやっているかというと、大きく2つあります。1つはイベントの定期開催、もう1つは新機能のリリースです。

イベントの定期開催ですが、基本的に大きく機能を変えることはあまりやらず、マスターデータの追加や新たな効果、演出を追加しています。ここでいうマスターデータとは、ゲームに必要なパラメーターで、カードやキャラクターのデータを保持しています。

新機能のリリースの例ですが、キャラクターに装着できるアイテムが追加され、強化できるような機能のリリースが考えられます。この場合はテーブルやコードを一から追加する必要があります。

これらをミスなく運用していくために、きちんと設計していくのがエンジニアの役割だと思っています。

・正規化の重要性

正規化の重要性について例を交えてお話させてください。

デッキにキャラクターが3人いて、敵キャラ1人を倒すイベントだったとします。

各キャラクターは、戦闘中に1回だけ、以下のような特殊効果が発動できるとします。

まずはデータの持ち方を考えてみようと思います。このテーブルの持ち方でコードから引っ張っても、機能的には実現できそうだと思います。

ここで正規化を施してみようと思います。
正規化について細かい説明は省かせていただきますが、ざっくりいうと重複した部分をなくしていくことです。

普段からデータベースをいじられている方であれば、正規化は当たり前ですが、長期運用には欠かせない技術だと思います。マスターデータに着目すると、データに重複がたくさんある場合は修正コストが高く、範囲も広いので、障害につながる可能性があります。

・機能単位でのコード分割

次は先ほどのキャラクターをもう一度使って、実装側を考えてみます。大まかな流れはこんな感じです。今回は特殊効果のダメージ計算が3パターンに分かれていたので、ここを深掘りしていきます。

最初は特殊効果IDごとに分岐しての実装を考えてみます。

運用年数にもよりますが、ダメージ計算のコードが数百行になったりします。こうなるとコードの流れを追うのが大変ですし、特殊効果を追加したいとなったとき、どこに修正を施せばいいのか、考えなければいけないことが増えてしまい、運用の難易度が高くなってしまいます。

次に、効果ごとにコードを分割してみます。

こうすると追加は容易になると思います。

・リファクタリングをやる必要性とタイミング

リファクタリングが途中で必要になるケースを、再度同じ例を使ってご紹介いたします。

長期運用していくと、仕様を追加したいという要望は出ると思います。今回は以下の仕様を追加したいという要望が出たとします。

そして、既存で動いている部分に影響なく追加したい、という心理が働いた場合の極端な例を考えます。

今回の例では1つの機能の追加だったので、このままリリースし、また仕様を追加したくなったとします。

正規化と実装を分割してやってきたのになんでこうなってしまったのかというと、当初のコードは機能ごとに分割していたのですが、想定外の仕様変更に耐えられなかったことがあげられます。

ただし回避できた可能性もあります。実際に仕様変更を考えた企画の方とエンジニアが話をしていれば、耐えうる設計ができていたかもしれません。サービスの未来を見据えて、企画の方とエンジニアが話すことは大事です。
とはいえ、こうなったら恐れずリファクタリングをしましょう。

まとめさせていただくと以下の通りになります。

リファクタリングは怖いものだと思われがちですが、必要なときもあるので、設計観点を忘れずにリファクタリングをしていただきたいなと思います。

ご清聴ありがとうございました。

登壇資料

https://www.slideshare.net/DeNAGamesTokyo/dena-games-tokyo-97978817

ゲームの面白さを追求するための「上手な効率化」とは?/TECH PLAY
https://dgtmagazine.denagames-tokyo.jp/201800530-1/
タイトル移管で大切なのは「移管ゴール」の明確化/TECH PLAY
https://dgtmagazine.denagames-tokyo.jp/201800530-2/
ゲーム運営によくある落し穴とその回避策/TECH PLAY
https://dgtmagazine.denagames-tokyo.jp/201800530-3/
脱・人依存。評価は「頑張り」ではなく「成果と能力」/TECH PLAY
https://dgtmagazine.denagames-tokyo.jp/201800530-5/
参加者と登壇者が熱くゲーム議論を交わす/TECH PLAY
https://dgtmagazine.denagames-tokyo.jp/201800530-6/

DeNA Games Tokyoでは新しい仲間を募集しています
http://denagames-tokyo.jp/recruit/

DeNA Games Tokyoの最新情報はこちら
https://www.facebook.com/denagamestokyo/