Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

不具合に強い「柔軟性」を持つ設計・実装とは?――ドラゴンクエストXを支える失敗事例【デブサミ2019】

【15-A-1】ドラゴンクエストXを支える失敗事例

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

 オフラインゲームの時代では、リリースとは「業務の完了」のことであった。一方オンラインサービスでは、リリースはユーザー対応という「業務の始まり」を意味している。この時代における「良い設計・実装」とは何だろうか。ドラゴンクエストXのプロデューサー、青山公士氏はその問いに「柔軟性」であると回答する。要件の実現は大前提とした上で、さらに不具合や顧客要望への柔軟な対応を可能とする設計・実装。それを実現するための教訓が、このセッションで語られた数々の失敗事例に詰まっていた。6年半という長期の運営だからこそ積み上げられた「運営の方法論」ともいうべきノウハウを、このセッションから習得していただきたい。

目次

なぜ、あえて失敗事例を公開するのか

 ドラゴンクエストXは国内最大級のMMORPG(大規模多人数参加型オンラインゲーム)であり、リリースから6年半経過した今も運営が継続されている人気ソフトだ。2013年には、日本ゲーム大賞や、CEDEC AWARD(ゲームデザイン部門、ネットワーク部門)にて優秀賞を受賞するなど、華やかな実績を持つタイトルでもある。そのような、言わば業界の成功例であるゲームのセッションで、プロデューサーの青山氏はあえて「失敗事例の紹介」というテーマを選択した。その意図は何か。その説明の前段として、青山氏は過去と現在における「リリース」という言葉が持つ意味の変化についての解説から始めた。

株式会社スクウェア・エニックス 第6ビジネスディビジョン 「ドラゴンクエストX オンライン」プロデューサー 青山公士氏
株式会社スクウェア・エニックス 第6ビジネスディビジョン
「ドラゴンクエストX オンライン」プロデューサー 青山公士氏

 もともとはオフラインゲームのメインプログラマーからディレクターを経て、現職に就任したという青山氏は、過去のオフラインゲームにおけるリリースとについては、あくまで開発業務の「完了」であったと語る。仮に不具合などがあっても修正できないため、むしろ諦めをつけられる区切りでもあった。しかし現在のオンラインゲームにおいては、リリース後にあるのはユーザー対応の「始まり」であり、開発は継続していく。昔と今で180度意味合いが変わった、と語られた。

 そのようにリリース後を見据えなければならないオンラインゲームにおいて、設計・実装には「柔軟性」が求められる。つまり、顧客要望への対応が柔軟にできること。そして不具合が出にくく、また出ても修正しやすいということ。過去のゲームでも求められた「仕様そのもの」の実現は大前提とした上で、これらの付加要素を満たさなければならない。しかし、リリース前の段階でその柔軟性を持たせるために必要なのは、実際の運営フェーズでの経験の多寡だ。とはいえ、現実にはその経験を十分に積んだ要員をアサインできない局面も多々あるもの。そこで青山氏は、ドラゴンクエストXという巨大MMORPGで起きた失敗を、疑似体験できるよう事例として共有することで、皆さんの開発における柔軟性確保につなげてほしい。そのようにテーマ選定の意図を伝えた。

説明の前提として提示された簡単な構成イメージ。個別のユーザーのゲームクライアントがあるが、実態はゲームサーバーで動いている。データもサーバー側のデータベースに格納される
説明の前提として提示された簡単な構成イメージ。個別のユーザーのゲームクライアントがあるが、実態はゲームサーバーで動いている。データもサーバー側のデータベースに格納される

失敗事例(1)――横展開の対象は明確に、影響範囲は局所化を

 始めに紹介された不具合は、特定の攻撃スキルの効果音が鳴り続けて止まなくなるという事象だ。効果音は、(1)剣を振るアクション音を発音、(2)音を停止、(3)ヒット音を発音という3ステップになっている。また、攻撃がミスした際には(1)の後に分岐が入り、(2´)音を停止、(3´)ミス音を発音、と同じく3ステップとなる。当初は正しく動いていたこの仕様だが、ある更新作業を行った後から、(1)のアクション音が鳴りやまなくなる場合があるという不具合が出始めたという。

発音と停止のロジック。発音したら停止するまで鳴り続ける仕様としており、また発音後に分岐がある
発音と停止のロジック。発音したら停止するまで鳴り続ける仕様としており、また発音後に分岐がある

 各種効果音の発音タイミングはデータで制御しており、デザイナーが作成したデータにより指定されたタイミングで、プログラム処理が実行される構造になっている。しかし、デザイナーに聞いても、「何も修正していない」とのこと。詳しく調べると、データの修正は確かになかったものの、ミス時の効果音を停止する処理(前記(2´))を無効化するプログラムが組まれていることが分かったという。

 なぜそのようなことが起こったか。原因は、過去に別の不具合が内部発覚した際の横展開対応にあった。ある戦闘スキルのエフェクトにおいて、ミス時に効果音を停止すると不具合になることが発覚したため、その処理を無効化する実装を行った。その際に同仕様を全体に適用したことで問題が発生してしまった。全体適用が正しいと思い込んでしまったが、実際は固有の不具合であったというのが顛末である。

ミス側の分岐の処理にて、効果音停止の処理が無効化されていたという。横展開の範囲を広げすぎ、正しく動いていた箇所を改悪してしまったという事例
ミス側の分岐の処理にて、効果音停止の処理が無効化されていたという。横展開の範囲を広げすぎ、正しく動いていた箇所を改悪してしまったという事例

 青山氏は、得られた教訓として、まず影響範囲は全て再検証が必要であること。そして、単純にそれを実行しては検証コストが膨れ上がるため、まず最初に影響の局所化が必要であるとした。今回の事象についても、一度は全体適用してしまったミス時の効果音停止という修正をもとに戻し、内部発覚した不具合だけに対応した専用処理に変更することで、影響を局所化したという。

1つ目の事例から学べるのは、影響範囲の明確化と再検証の重要性。そして前提として影響範囲を局所化するということ
1つ目の事例から学べるのは、影響範囲の明確化と再検証の重要性。そして前提として影響範囲を局所化するということ

 BTSとはBug Tracking Systemを指す。ドラゴンクエストXではRedmineを使用しているという


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

著者プロフィール

  • 西野 大介(SOMPOシステムズ株式会社)(ニシノ ダイスケ)

     独立系SIerにて金融系システムの開発経験を経た後、現在はSOMPOシステムズ株式会社(損保ジャパン日本興亜グループ)に勤務。開発業務では、損保の基幹系システムをオープン化する大規模案件「未来革新プロジェクト」に参画中。本業以外では、CodeZineの連載をはじめ、国内/海外の各種カンファレンスへ...

バックナンバー

連載:【デブサミ2019】セッションレポート

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5