Advertisement

More Related Content

More from Developers Summit(20)

Advertisement

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

  1. ドラゴンクエストXを支える失敗事例 株式会社スクウェア・エニックス 青山 公士 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved.
  2. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(3つ) まとめ
  3. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(3つ) まとめ
  4. 株式会社スクウェア・エニックス 第6ビジネス・ディビジョン アオ ヤマ コウ ジ 青山 公士 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介
  5. テン 「ドラゴンクエストXを支える技術 -大規模オンラインRPGの舞台裏」 著者 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介
  6. テン 「ドラゴンクエストXを支える技術 -大規模オンラインRPGの舞台裏」 著者 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介 今回はこの流れで お声がけいただきました
  7. テン 「ドラゴンクエストX オンライン」 プロデューサー 責任者 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介
  8. テン 「ドラゴンクエストX オンライン」 プロデューサー 責任者 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介 こっちが本業
  9. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介 遡ると… 「ドラゴンクエストX」テクニカルディレクター 「PlayOnline」ディレクター、プログラマー (他ゲーム会社)ディレクター、メインプログラマー 一つ前の本業
  10. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(3つ) まとめ
  11. 本題に入る前に 本セッションを活かして欲しい部分 についてご説明します ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  12. 「ドラゴンクエストX オンライン」は オンラインゲームです (後ほどもう少し詳細に解説します) ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  13. オンラインゲーム ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて オンラインサービス
  14. オンラインサービスは リリース後の運営・運用が本番! と言っても過言ではありません ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  15. 開発・検証 運営・運用 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて リリース フィードバック
  16. 開発・検証 運営・運用 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて リリース フィードバック リリースは 完了ではなく
  17. 開発・検証 運営・運用 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて リリース フィードバック お客さま対応の 始まりです
  18. 開発・検証 運営・運用 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて リリース フィードバック その際 良い設計&実装なら 対応しやすいです
  19. 良い設計&実装 ・要望への対応が柔軟 ・不具合が出づらい ・不具合が出ても修正しやすい (仕様が実現できる前提でのプラスアルファ) ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  20. 開発・検証 運営・運用 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて リリース フィードバック そのために重要になるのが 運営・運用経験です
  21. こういう改修要望が来た! →柔軟な対応を可能に こういう不具合が出た! →同様の不具合が出ないように or 早期発見&修正できるように ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  22. ドラゴンクエストXでは これまで多くの事例に対応し その経験に支えられて 開発・運営をしています ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  23. 多くの事例を経験している人が 開発することが望ましいですが ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  24. 現実的には難しいので 他者の事例を共有する ことも重要と考えます ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  25. 開発・検証 運営・運用 ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて リリース フィードバック 本セッションでは 運営・運用中に発生した 失敗事例を中心に ご紹介しますので
  26. 皆さんの経験値の一部に なれば幸いです ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 本セッションについて
  27. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(3つ) まとめ
  28. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは 「ドラゴンクエストX オンライン」は オンラインゲームです 現時点で約6年半運営しています
  29. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは より専門的には MMORPG に分類されます
  30. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは より専門的には MMORPG に分類されます ロール プレイング ゲーム Role Playing Game というゲームジャンル
  31. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは より専門的には MMORPG に分類されます 大規模多人数参加型オンラインゲーム Massively Multiplayer Online Game
  32. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは MMO MO (参考) ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアント ゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント (ホスト)
  33. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームDB 見た目上の本体 真の本体 世界のデータ
  34. 本節では当セッションに関連する MMORPGのアーキテクチャのみ 紹介しました ドラゴンクエストXの特徴は 著書を参考にしてください ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXとは
  35. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(4つ) まとめ
  36. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXでは開発初期から 運営・運用が重要という想定があります 開発ポリシー
  37. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 運営 運用 開発ポリシー 本セッションにおける 運営と運用は
  38. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 運営=仕掛け(攻め) ※機能拡張・期間限定イベント等 運用=保守(守り) ※不具合修正・障害対応など等 開発ポリシー
  39. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 運営=仕掛け(攻め) ※機能拡張・期間限定イベント等 →柔軟性が重要 運用=保守(守り) ※不具合修正・障害対応など等 →継続性が重要 開発ポリシー
  40. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 開発ポリシー例 「一箇所に集約すべし」 (例)配列ループ char buf[256]; for ( int i = 0; i < 256 ; i++ ) … 開発ポリシー 同じ意味はdefineして使う
  41. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(3つ) まとめ
  42. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. これから失敗事例を3つ共有します 失敗事例
  43. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例 実際の告知内容 不具合の内容 原因と対応 得られた教訓
  44. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例その1 失敗事例(1/3)
  45. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容 「キラージャグリング」「ゴッドジャグリン グ」の効果音が鳴り続いたり、ノイズが発生 することがある。 失敗事例(1/3)
  46. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「キラージャグリング」 「ゴッドジャグリング」 は戦闘中の攻撃スキルで 複数回ダメージを与えます 失敗事例(1/3)
  47. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ある更新から突然 演出完了後も時々 効果音が止まらずに 鳴り続けるようになった 不具合です 失敗事例(1/3)
  48. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合の技術的な背景 失敗事例(1/3)
  49. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームDB 見た目上の本体 真の本体 世界のデータ 失敗事例(1/3)
  50. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) エフェクト
  51. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. エフェクトは 視覚効果を演出します 失敗事例(1/3)
  52. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXでは 表示形状、速度、加速度等 各種パラメータが設定された データに基づいて動きます 失敗事例(1/3)
  53. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 効果音の発音も エフェクトデータで 制御できます 失敗事例(1/3)
  54. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 戦闘スキルの効果音設定 失敗事例(1/3) アクション音 発音 ヒット音 発音 (剣を振る音) (敵に当たる音) デザイナー作成のデータで指定された タイミングでC++処理が実施されます
  55. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合が発生したエフェクトの効果音設定 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 (アクション音が継続型のため停止が必要)
  56. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合の直接的な原因 失敗事例(1/3)
  57. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容(再掲) 「キラージャグリング」「ゴッドジャグリン グ」の効果音が鳴り続いたり、ノイズが発生 することがある。 失敗事例(1/3)
  58. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 (実際にはこの形でした)
  59. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 (データの変更はありませんでしたが ※あるある)
  60. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 ミス時の効果音停止が C++プログラムで無効化 されていました
  61. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. なぜ? 失敗事例(1/3)
  62. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 問題の更新より前の 内部検証で発覚した ある別の戦闘スキルの 不具合修正によるエンバグ でした 失敗事例(1/3)
  63. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 別の戦闘スキルのエフェクトの効果音設定
  64. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 別の戦闘スキルのエフェクトの効果音設定 ミス時に効果音を停止すると 不具合になることが 内部検証で発覚し
  65. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 開発ポリシーを鑑みて • 他にも同様の問題があるかも知れないから システムで対応しよう! • 意味的にもミス時は効果音を止めないべき じゃね? という判断になり 失敗事例(1/3)
  66. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「ミス時の効果音停止をC++で無効化」 したのが今回の不具合の原因です 失敗事例(1/3)
  67. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 発覚後の対応 失敗事例(1/3)
  68. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 内部検証で不具合が指摘されたエフェクトデータ
  69. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(1/3) アクション音 発音 効果音 停止 ヒット音 発音 効果音 停止 ミス音 発音 内部検証で不具合が指摘されたエフェクトデータ 専用処理に変更しました
  70. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 他にも同様の問題があるかも知れないから システムで対応しよう! → 個別対応へ • 意味的にもミス時は効果音を止めないべき じゃね? → 間違い 失敗事例(1/3)
  71. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 得られた教訓 失敗事例(1/3)
  72. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • システム改修はBTSチケットに影響範囲を 明記し全影響範囲を再検証すべし • 影響範囲は極力狭くすべし 失敗事例(1/3) 教訓
  73. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例その2 失敗事例(2/3)
  74. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容 6月10日(土)6:00の更新以降「邪神の宮殿」 にて、『同盟の仲間を自動で探す』を選択し ても、パーティが組まれない場合がある。 失敗事例(2/3)
  75. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「邪神の宮殿」は 8人が協力して 強い敵と戦う コンテンツです 失敗事例(2/3)
  76. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 『同盟の仲間を自動で探す』 というオートマッチング機能 があり 失敗事例(2/3)
  77. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 参加希望者8人で 自動的に同盟を組みます 失敗事例(2/3)
  78. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 参加希望者が多数いても 同盟が成立しない というのが本不具合です。 失敗事例(2/3)
  79. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合の技術的な背景 失敗事例(2/3)
  80. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 邪神の宮殿の 戦闘エリアは 複数あり 失敗事例(2/3)
  81. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(2/3) 例えば「封剣の門・三獄」には
  82. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. このような参加条件が 設定されています。 失敗事例(2/3)
  83. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(2/3) ドラゴンクエストXの世界には 「戦士」「魔法使い」など複数の 職業があり転職が可能です
  84. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(2/3) 今回は「占い師」に転職して 挑戦することを意味します
  85. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容(再掲) 6月10日(土)6:00の更新以降「邪神の宮殿」 にて、『同盟の仲間を自動で探す』を選択し ても、パーティが組まれない場合がある。 失敗事例(2/3) 毎月10日と25日の朝6時(JST)に 条件が自動更新されます
  86. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容(再掲) 6月10日(土)6:00の更新以降「邪神の宮殿」 にて、『同盟の仲間を自動で探す』を選択し ても、パーティが組まれない場合がある。 失敗事例(2/3) この日の更新から条件不成立になりました
  87. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合の直接的な原因 失敗事例(2/3)
  88. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 条件はプランナー作成のデータで設定されて います • 問題になりそうなデータはありませんでした 失敗事例(2/3)
  89. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(2/3) しかしゲームサーバにこんなソースがっ! if ( 6月10日更新分 && 封剣の門・三獄 ) { 条件べた書き※データと異なる }
  90. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームDB 一次チェック (操作性向上) 最終チェック (チート対策) 失敗事例(2/3)
  91. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームDB データで設定 された条件 プログラムで設定 された条件 失敗事例(2/3)
  92. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームDB データで設定 された条件 プログラムで設定 された条件 失敗事例(2/3) 全部不成立!
  93. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容(再掲) 6月10日(土)6:00の更新以降「邪神の宮殿」 にて、『同盟の仲間を自動で探す』を選択し ても、パーティが組まれない場合がある。 失敗事例(2/3) 獄による
  94. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. なぜこのソースが? 失敗事例(2/3)
  95. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 遡ることちょうど1年… 失敗事例(2/3)
  96. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 邪神の宮殿 マッチング条件 データフォーマット ver. X 邪神の宮殿 マッチング条件 データフォーマット ver. Y データフォーマットを変更しました 失敗事例(2/3)
  97. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 邪神の宮殿 マッチング条件 データフォーマット ver. X 邪神の宮殿 マッチング条件 データフォーマット ver. Y 運用中のオンラインサービスでは シームレスな移行が重要ですが 失敗事例(2/3)
  98. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 邪神の宮殿 マッチング条件 データフォーマット ver. X 邪神の宮殿 マッチング条件 データフォーマット ver. Y 移行のリリースタイミングが微妙なため および全体への影響を避けるため 失敗事例(2/3)
  99. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 邪神の宮殿 マッチング条件 データフォーマット ver. X 邪神の宮殿 マッチング条件 データフォーマット ver. Y (1年前の)6月分の条件は暫定的に ソースにべた書きすることにしました 失敗事例(2/3)
  100. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. その暫定べた書きソースを消し忘れて 1年後に不具合発生というオチでした 失敗事例(2/3)
  101. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 得られた教訓 失敗事例(2/3)
  102. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 暫定対応は本対応完了までを BTSチケットで管理すべし 失敗事例(2/3) 教訓
  103. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例その3 失敗事例(3/3)
  104. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容 釣りにて、「オウムガイ」のビッグサイズや キングサイズを釣ったのに、釣り老師や魚交 換員から、ビッグサイズはノーマルサイズ、 キングサイズはビッグサイズとして扱われる ことがある。 失敗事例(3/3)
  105. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXでは 釣りができます 失敗事例(3/3)
  106. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 魚には個々に大きさ(cm)があり それに応じてサイズが キング/ビッグ/ノーマル に分類されます 失敗事例(3/3)
  107. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「オウムガイ」も釣れます ※釣れる魚(?)は現時点で123種類 失敗事例(3/3)
  108. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 魚に分類されないものも釣れますが 本セッションでは便宜上 釣れるものを「魚」と呼びます 失敗事例(3/3)
  109. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(3/3) 魚を釣った後 「釣り老師」 と話すと
  110. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(3/3) そのサイズに対応した 報酬がもらえます
  111. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例(3/3) 本件はその際 ビッグサイズの魚なのに ノーマルサイズと判定される という不具合です
  112. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合の技術的な背景 失敗事例(3/3)
  113. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 大きさとサイズの分類は 魚ごとに決められています 失敗事例(3/3)
  114. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「オウムガイ」 1023mm以上でビッグサイズ 1022mm以下でノーマルサイズ 失敗事例(3/3)
  115. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストXの釣り実装は C++とLuaが併用されています 失敗事例(3/3)
  116. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. C++ではmm単位の情報をintで扱い Luaではmおよびmmをdoubleで扱います 失敗事例(3/3)
  117. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合の原因 失敗事例(3/3)
  118. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. C++ではmm単位の情報をintで扱い Luaではmおよびmmをdoubleで扱います 失敗事例(3/3) 浮動小数点の誤差が気になる
  119. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「オウムガイ」 1023mm以上でビッグサイズ 1022mm以下でノーマルサイズ doubleで1022-1023近辺の/1000*1000を検証 失敗事例(3/3)
  120. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 1018 -> 1018 (+0) 1018.0000000000000 1019 -> 1018 (-1) 1018.9999999999999 1020 -> 1020 (+0) 1020.0000000000000 1021 -> 1020 (-1) 1020.9999999999999 1022 -> 1022 (+0) 1022.0000000000000 1023 -> 1022 (-1) 1022.9999999999999 1024 -> 1024 (+0) 1024.0000000000000 1025 -> 1025 (+0) 1025.0000000000000 1026 -> 1026 (+0) 1026.0000000000000 失敗事例(3/3)
  121. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 1018 -> 1018 (+0) 1018.0000000000000 1019 -> 1018 (-1) 1018.9999999999999 1020 -> 1020 (+0) 1020.0000000000000 1021 -> 1020 (-1) 1020.9999999999999 1022 -> 1022 (+0) 1022.0000000000000 1023 -> 1022 (-1) 1022.9999999999999 1024 -> 1024 (+0) 1024.0000000000000 1025 -> 1025 (+0) 1025.0000000000000 1026 -> 1026 (+0) 1026.0000000000000 失敗事例(3/3) 浮動小数点の丸め処理の 統一規定は無さそうなため 環境で結果が変わる可能性 がありそうです (今回の件とは無関係です)
  122. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 担当プログラマーの名誉のために フォローしておきますが 誤差補正処理はありました 失敗事例(3/3)
  123. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. f_Result = math.floor((f_FishScale + 0.0004) * 1000) / 1000 失敗事例(3/3)
  124. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. f_Result = math.floor((f_FishScale + 0.0004) * 1000) / 1000 失敗事例(3/3) 単位はmで1023/1000の 1.022999…が渡されます
  125. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. f_Result = math.floor((f_FishScale + 0.0004) * 1000) / 1000 失敗事例(3/3) 1.022999…→1.023399… (良い感じ!)
  126. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. f_Result = math.floor((f_FishScale + 0.0004) * 1000) / 1000 失敗事例(3/3) 1.0233999…→1023.399…
  127. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. f_Result = math.floor((f_FishScale + 0.0004) * 1000) / 1000 失敗事例(3/3) 1023.399… →1023 (できた!!)
  128. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. f_Result = math.floor((f_FishScale + 0.0004) * 1000) / 1000 失敗事例(3/3) 1023→1.0229999…
  129. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 傷口に塩を塗る 結果になっちゃいましたが これは仕方がないと思います 失敗事例(3/3)
  130. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. でもなぜ急に 問題になったのでしょう (釣りの実績は十分ありました) 失敗事例(3/3)
  131. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ビッグサイズ 失敗事例(3/3) サイズ分類決定 魚生成 大きさ決定 保存 1023mm
  132. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ビッグサイズ 失敗事例(3/3) サイズ分類決定 魚生成 大きさ決定 保存 1023 1022 浮動小数点誤差の影響
  133. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ビッグサイズ 失敗事例(3/3) サイズ分類決定 魚生成 大きさ決定 保存 1023 1022 ビッグ & 1022 再計算負荷軽減のため 両方の情報を保存 (不整合あり)
  134. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ゲームサーバ ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームクライアント ゲームクライアントゲームクライアントゲームクライアント ゲームDB オウムガイ (ビッグ&1022) 失敗事例(3/3)
  135. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. あるとき(別の)不具合が発生し サイズ分類の再計算が必要になり 失敗事例(3/3)
  136. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 釣り老師に話したタイミングで 大きさ(mm)からサイズ分類を 再度求めることになりました 失敗事例(3/3)
  137. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. オウムガイ ビッグサイズ&1022mm オウムガイ ノーマルサイズ&1022mm 失敗事例(3/3)
  138. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 不具合告知内容(再掲) 釣りにて、「オウムガイ」のビッグサイズや キングサイズを釣ったのに、釣り老師や魚交 換員から、ビッグサイズはノーマルサイズ、 キングサイズはビッグサイズとして扱われる ことがある。 失敗事例(3/3)
  139. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 発覚後の対応 失敗事例(3/3)
  140. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. サイズ分類も大きさの数値も 信用できない状態に なりましたので 失敗事例(3/3)
  141. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 再計算をしないように戻した後 ログとゲームDBの情報から 個別対応しました ※行動ログ超大事 失敗事例(3/3)
  142. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 得られた教訓 失敗事例(3/3)
  143. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 表面化していない不具合は 有る前提で対応すべし 失敗事例(3/3) 教訓
  144. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 失敗事例の考察 失敗事例
  145. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. これらの失敗事例を鑑み 柔軟性と継続性に加えて 開発ポリシーに追加すべきは 失敗事例考察
  146. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 「リリース後の改修は要注意」 失敗事例考察
  147. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. リリース後の改修は… • 影響範囲を考察 • BTSチケットに登録 • 確実にチケットクローズまで 失敗事例考察
  148. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. ドラゴンクエストX開発チームは 運営中に出た問題に対して 「どうすれば事前に防げたか」 を検討し パターン別にまとめています 失敗事例考察
  149. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. その中で最も多いパターンは 失敗事例考察
  150. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. リリース後の改修は… • 影響範囲を考察 • BTSチケットに登録 • 確実にチケットクローズまで 失敗事例考察
  151. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. リリース後の改修は… • 影響範囲を考察 • BTSチケットに登録 • 確実にチケットクローズ 失敗事例考察 開発担当者が軽く考える案件が 問題になりやすいようです
  152. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. 目次 自己紹介 本セッションについて ドラゴンクエストXとは 開発ポリシー 失敗事例(3つ) まとめ
  153. • システム改修はBTSチケットに影響範囲を 明記し全影響範囲を再検証すべし • 影響範囲は極力狭くすべし ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. まとめ 教訓再掲
  154. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 暫定対応は本対応完了までを BTSチケットで管理すべし まとめ 教訓再掲
  155. ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 表面化していない不具合は 有る前提で対応すべし まとめ 教訓再掲
  156. これらの失敗事例が 皆さんの経験値の一部に なれば幸いです ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. まとめ
  157. 当セッションの内容は以上ですが 「ドラゴンクエストXを支える技術」に その他の事例を多数 載せていますので 併せて参考にしてください ドラゴンクエストXを支える失敗事例 © 2019 SQUARE ENIX CO., LTD. All Rights Reserved. まとめ
Advertisement