青山Pが振り返る「ドラゴンクエストX」3つの失敗――消すつもりのコードが本番環境に:累計20万チケットを生んだオンラインゲーム開発プロジェクトの裏側(1/3 ページ)
スクウェア・エニックスでドラゴンクエストXのプロデューサーを務める青山公士氏は「ドラゴンクエストX」の3つの不具合を振り返り、サービス開発、運用時の教訓を紹介した。
翔泳社は2019年2月14〜15日に「Developers Summit 2019」を開催した。本稿では、スクウェア・エニックスでドラゴンクエストXのプロデューサーを務める青山公士氏の講演「ドラゴンクエストXを支える失敗事例」の内容を要約してお伝えする。
青山氏は「ドラゴンクエストX オンライン」(以下、「ドラゴンクエストX」)で起きた3つの不具合とその原因を取り上げ、ドラゴンクエストX開発陣が不具合から得られた教訓を紹介した。
ドラゴンクエストXはどのように開発、実装されているか?
ドラゴンクエストXは、各ユーザーがゲームクライアントを通じてサーバに接続し、ゲームをプレイするMMORPG(Massively Multiplayer Online Role-Playing Game)だ。開発では、さまざまな機能拡張や期間限定イベントの実施を見据えて柔軟に対応できる「運営」と、不具合修正や障害対応ができてサービスを継続して提供できる「運用」の2つを重視している。
ゲームの実装はC++言語で、バージョン管理ソフト「Subversion」やプロジェクト管理ソフト「Redmine」を活用している。さらに、botがゲームをプレイしてゲームの進行に問題がないかどうかテストを実施しているという。
青山氏は、ドラゴンクエストX開発初期から現在までに生まれた累計約20万の不具合(バグ)、タスクの中から、以下の3つを取り上げた。どのような不具合なのか、何が原因で起きたのかを見ていこう。
- 「キラージャグリング」「ゴッドジャグリング」の効果音が鳴り続いたり、ノイズが発生したりすることがある。
- 2017年6月10日土曜日の更新以降、「邪神の宮殿」で「同盟の仲間を自動で探す」を選択しても、パーティーが組まれない場合がある。
- 「釣り」において、「オウムガイ」の「ビッグサイズ」や「キングサイズ」を釣ったのに、「釣り老師」や「魚交換員」から、ビッグサイズはノーマルサイズ、キングサイズはビッグサイズとして扱われることがある
1.再現が難しいエフェクトの不具合
初めに取り上げた不具合は「『キラージャグリング』『ゴッドジャグリング』の効果音が鳴り続いたり、ノイズが発生したりすることがある」だ。複数回ダメージを与える「キラージャグリング」や「ゴッドジャグリング」という攻撃スキルを発動させた際、攻撃が終了しても効果音が止まらずに鳴り続ける不具合が発生するようになった。
「問題となっている不具合を確認しようにも、発生するタイミングをつかめないため、調査が難航した。長時間にわたる調査の結果、別の戦闘スキルにまつわる不具合修正のため、音声停止処理を無効化したせいで、この不具合が引き起こされていた(エンバグ)と分かった」
攻撃スキルを発動すると、アクション音が流れた後、アクション音の再生を終了する処理が行われる。そして、敵に当たった場合は「ヒット音」、敵に攻撃をかわされた場合は「ミス音」が再生される。しかし、他の攻撃スキルの内部検証中、ミス音が再生される前に効果音終了の処理が入ると不具合になるという問題が発生した。そのため、他の攻撃スキルでも起きる可能性を考慮し「ミス音の前の効果音終了処理を無効化」してゲームを更新した。その結果、先述した2つの攻撃スキルの発動後、ミス音再生時に効果音が流れ続けてしまう不具合が発生してしまった。
「最終的に、他の攻撃スキルの不具合対応は専用処理で対応し、ミス音再生前の効果音停止処理は再度有効化した。この不具合対応から得た教訓は、システムを改修する際、できるだけ影響範囲を極力狭くなるように調整し、バグトラッキングシステム(BTS)のチケットに影響範囲を明記して、更新する際に問題がないかどうか全影響範囲の再検証を行うべしということだ」
2.データ移行時に利用したコードによる不具合
次に取り上げた不具合は、「2017年6月10日土曜日の更新以降、『邪神の宮殿』で『同盟の仲間を自動で探す』を選択しても、パーティーが組まれない場合がある」だ。8人で協力して敵と戦う「邪神の宮殿」というコンテンツで、参加希望者が8人いてもパーティーが組まれなくなるという、「オートマッチング」機能の不具合が発生した。
パーティーの参加条件は「職業が占い師であること」など、ゲーム内のプレイに制限をかけるもので、毎月10日と25日の午前6時に参加条件が自動更新される仕組みになっている。
「参加条件はゲームプランナーが作成した条件データを用いている。ゲームクライアント側で条件データを利用して、パーティーに参加できる条件を満たしているかどうかをチェックした後、ゲームサーバ側に用意された参加条件ロジックと照らし合わせてマッチングを行っていた。しかし、特定のエリアでパーティーが組まれなくなってしまった。ゲームサーバのソースコードを調査した結果、以下のソースコードが見つかった」
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 高知編:経営のプロが本気で取り組む地方活性化――高知で芽吹くITとコンテンツ産業
元「スクウェア」社長の武市智行氏と、高知県内にゲーム会社を設立した「オルトプラス」代表の石井武氏は、高知の活性化に“本気”で取り組んでいる。 - 開発費5000万円、売り上げ10万円!――オリジナルプロダクト開発に失敗し続けたシステム開発会社の今
トラブルの原因は何だったのか、どうすれば良かったのか。実在する開発会社がリアルに体験した開発失敗事例を基に、より良いプロジェクトの進め方を山本一郎氏が探る本連載。今回は未経験分野のゲーム分野に勢いで参入して、火だるまになった事例を紹介します。 - ベンダーよ、シェルパの屍を越えていけ 〜 細川義洋×山本一郎「なぜ、システム開発は必ずモメるのか?」
リスペクトなきプロジェクトには死が待っている―― 山本一郎さん(やまもといちろう a.k.a.切込隊長)と、東京地方裁判所 民事調停委員 細川義洋さんによるDevelopers Summit 2014の最終セッションは、雪の寒さとは違う意味で会場を震え上がらせた。