デブサミ2019 2日目(02/15)メモ 10:00〜 ドラゴンクエストXを支える失敗事例

  • 個人スポンサー席満席?
  • 立ち見あり
  • 開始前にコンドーさん(翔泳社)の挨拶

    • 2日続けて参加してる人がそこそこ多い
  • スクエニ青山さん

    • DQ10プロデューサー
    • 後で資料は配る
      • これ書いてる時点ではまだ公開されていない(週明けかな?)
    • テクニカルディレクター時代(1つ前の仕事)の話がメイン?
    • キングボンビーを初めてプログラムした(PCエンジン)
      • 生みの親ではない(サクマさん)
  • オンラインサービスはリリース後が本番

    • 運用、運営
  • 良い設計

    • 要件を満たしているのが前提
    • 経験からくる
  • DQ10は6年半やってる

  • 痛い目見ないとわからない部分もある
  • 組織によって解は違う

  • MMORPG

    • MOとの対比→MOはホスト(ロビー?)あり
  • 詳細は本見てね

https://www.amazon.co.jp/%E3%83%89%E3%83%A9%E3%82%B4%E3%83%B3%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88X%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93-%E2%94%80%E2%94%80-%E5%A4%A7%E8%A6%8F%E6%A8%A1%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3RPG%E3%81%AE%E8%88%9E%E5%8F%B0%E8%A3%8F-WEB-PRESS%E3%83%97%E3%83%A9%E3%82%B9%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4297101742/ref=sr_1_1?ie=UTF8&qid=1550311595&sr=8-1&keywords=%E3%83%89%E3%83%A9%E3%82%B4%E3%83%B3%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88+%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93

  • 運営、運用が重要

    • 運営→攻め→イベントとか→柔軟性
    • 運用→守り→不具合対応とか→継続性
  • 失敗事例

    • その1 スキル(?)を使った時の効果音が鳴り続けたり、ノイズがある「場合がある」。

      • クライアント側の話
      • エフェクト

        • データドリブン
        • C++
        • 何も直してません!
        • ミスした時に音を止める処理が無効化されてた
          • 別のスキルで、逆に音が鳴って欲しいのに止まっちゃう不具合があって、それを直す時に他のスキルでもミスした時に音が止まるようにしてしまった。
            • 別のスキルの方を個別の処理にした
      • 教訓

        • 影響範囲をBTSのチケットに明記し、再検証し、影響範囲は極力狭くすべし。
    • redmineを使っている

    • その2 パーティーのオートマッチングが行われない「場合がある」

      • 邪神の迷宮(?) 8人パーティーで進めるダンジョン
      • エリアが複数あり、エリアによってマッチングに参加できる条件が異なる。
        • 条件は月2回(?)自動で更新(変更)される
      • プログラマ、デザイナー、プランナーがいて、条件はプランナーが決めている。(って言ってたと思う。うろ覚え)
      • 条件判定はクライアントで一次チェックが行われてからサーバーで最終チェックしている
        • 一次チェックがOKで最終チェックがNGだった
        • サーバー側にハードコードされた条件判定処理があった
          • 以前のアップデートで条件のデータフォーマット変更があった
            • リリースタイミングが微妙だったので、一旦暫定対処としてハードコードした。
              • 該当ダンジョンのデータが新フォーマットで、システムがまだ旧フォーマット対応だった?
      • 教訓
        • 暫定対応は本対応するまでチケットを残そう
    • その3 釣りで釣った魚(魚じゃないのもある)のサイズ誤判定

      • 釣れるものは123種類
      • 釣りの処理はC++Luaで実装されている
        • C++部分ではmmの情報をintで持っていて、Lua部分ではmとmmの情報をdoubleで持っている。
      • 1023mm以上だとビッグサイズ、1022mm以下だとノーマルサイズ。
        • Lua部分で1000で割ってmをmmにする処理の誤差で1023mmのものが1022mmと誤判定されてた
          • 割る前に補正処理が入っていたけど割るところでNG
          • ぱっと見であってそうだったからスルーしてしまった
          • 急に起きた
            • データ作るところで1023mmになるはずのものが1022mmになってしまった
              • ダブルマスタ(再計算を避ける為にマスタデータを複数持っていた)のズレ
              • 別の不具合も影響して起きた
      • 魚(?)を交換してしまった人をログ等から探して個別に対応した(スクリプトでデータ修正)
      • 教訓
        • 表面化していないバグがあるものと思え
    • 考察

      • 影響範囲を明確に
      • ちゃんとチケットを登録してクローズまで持っていく
      • どうやったら防げたか?
        • チケットを登録していないものが大部分
          • 影響ないだろうと軽視しがち
    • チケット200000ぐらい(不具合以外のタスクも含めて)
  • QA

    • 開発体制はどれくらいの人数でやっている?
      • 具体的な数字の公表はNG
        • 人事から止められている(コスト等がバレてしまう?)
        • スタッフロールには数百名の名前が
    • 影響範囲を特定する方法は?
      • 個別に見る
      • 個々の経験値に依存(あまり良くない)
    • チケットに登録されない理由は?
      • (担当者が)登録するまでもないと思ってしまう
      • 勘違い
        • 大部分はできているがたまーに漏れてしまう感じ
    • タスクが多い中、モチベはどう保つ?
      • 飽きて辞める人もいる
      • チーム内の異動はある
  • 雑感

    • ゲーム固有の話は少なめで一般的な話が主だったかなぁという印象