- 講演資料:ドラゴンクエストXを支える失敗事例
なぜ、あえて失敗事例を公開するのか
ドラゴンクエストXは国内最大級のMMORPG(大規模多人数参加型オンラインゲーム)であり、リリースから6年半経過した今も運営が継続されている人気ソフトだ。2013年には、日本ゲーム大賞や、CEDEC AWARD(ゲームデザイン部門、ネットワーク部門)にて優秀賞を受賞するなど、華やかな実績を持つタイトルでもある。そのような、言わば業界の成功例であるゲームのセッションで、プロデューサーの青山氏はあえて「失敗事例の紹介」というテーマを選択した。その意図は何か。その説明の前段として、青山氏は過去と現在における「リリース」という言葉が持つ意味の変化についての解説から始めた。
![株式会社スクウェア・エニックス 第6ビジネスディビジョン 「ドラゴンクエストX オンライン」プロデューサー 青山公士氏](http://cz-cdn.shoeisha.jp/static/images/article/11479/11479_001.jpg)
「ドラゴンクエストX オンライン」プロデューサー 青山公士氏
もともとはオフラインゲームのメインプログラマーからディレクターを経て、現職に就任したという青山氏は、過去のオフラインゲームにおけるリリースとについては、あくまで開発業務の「完了」であったと語る。仮に不具合などがあっても修正できないため、むしろ諦めをつけられる区切りでもあった。しかし現在のオンラインゲームにおいては、リリース後にあるのはユーザー対応の「始まり」であり、開発は継続していく。昔と今で180度意味合いが変わった、と語られた。
そのようにリリース後を見据えなければならないオンラインゲームにおいて、設計・実装には「柔軟性」が求められる。つまり、顧客要望への対応が柔軟にできること。そして不具合が出にくく、また出ても修正しやすいということ。過去のゲームでも求められた「仕様そのもの」の実現は大前提とした上で、これらの付加要素を満たさなければならない。しかし、リリース前の段階でその柔軟性を持たせるために必要なのは、実際の運営フェーズでの経験の多寡だ。とはいえ、現実にはその経験を十分に積んだ要員をアサインできない局面も多々あるもの。そこで青山氏は、ドラゴンクエストXという巨大MMORPGで起きた失敗を、疑似体験できるよう事例として共有することで、皆さんの開発における柔軟性確保につなげてほしい。そのようにテーマ選定の意図を伝えた。
![説明の前提として提示された簡単な構成イメージ。個別のユーザーのゲームクライアントがあるが、実態はゲームサーバーで動いている。データもサーバー側のデータベースに格納される](http://cz-cdn.shoeisha.jp/static/images/article/11479/11479_p1.png)
失敗事例(1)――横展開の対象は明確に、影響範囲は局所化を
始めに紹介された不具合は、特定の攻撃スキルの効果音が鳴り続けて止まなくなるという事象だ。効果音は、(1)剣を振るアクション音を発音、(2)音を停止、(3)ヒット音を発音という3ステップになっている。また、攻撃がミスした際には(1)の後に分岐が入り、(2´)音を停止、(3´)ミス音を発音、と同じく3ステップとなる。当初は正しく動いていたこの仕様だが、ある更新作業を行った後から、(1)のアクション音が鳴りやまなくなる場合があるという不具合が出始めたという。
![発音と停止のロジック。発音したら停止するまで鳴り続ける仕様としており、また発音後に分岐がある](http://cz-cdn.shoeisha.jp/static/images/article/11479/11479_p2.png)
各種効果音の発音タイミングはデータで制御しており、デザイナーが作成したデータにより指定されたタイミングで、プログラム処理が実行される構造になっている。しかし、デザイナーに聞いても、「何も修正していない」とのこと。詳しく調べると、データの修正は確かになかったものの、ミス時の効果音を停止する処理(前記(2´))を無効化するプログラムが組まれていることが分かったという。
なぜそのようなことが起こったか。原因は、過去に別の不具合が内部発覚した際の横展開対応にあった。ある戦闘スキルのエフェクトにおいて、ミス時に効果音を停止すると不具合になることが発覚したため、その処理を無効化する実装を行った。その際に同仕様を全体に適用したことで問題が発生してしまった。全体適用が正しいと思い込んでしまったが、実際は固有の不具合であったというのが顛末である。
![ミス側の分岐の処理にて、効果音停止の処理が無効化されていたという。横展開の範囲を広げすぎ、正しく動いていた箇所を改悪してしまったという事例](http://cz-cdn.shoeisha.jp/static/images/article/11479/11479_p3.png)
青山氏は、得られた教訓として、まず影響範囲は全て再検証が必要であること。そして、単純にそれを実行しては検証コストが膨れ上がるため、まず最初に影響の局所化が必要であるとした。今回の事象についても、一度は全体適用してしまったミス時の効果音停止という修正をもとに戻し、内部発覚した不具合だけに対応した専用処理に変更することで、影響を局所化したという。
![1つ目の事例から学べるのは、影響範囲の明確化と再検証の重要性。そして前提として影響範囲を局所化するということ](http://cz-cdn.shoeisha.jp/static/images/article/11479/11479_p4.png)
注
BTSとはBug Tracking Systemを指す。ドラゴンクエストXではRedmineを使用しているという