イベント
講演「ゆめくろで効率的な開発をするためのデバッグ機能紹介」レポート。開発スタッフの希望を取り入れてツールを作ることで,シナリオの質も向上する
2024年3月7日にサイバーエージェントのゲーム・エンターテイメント事業部が開催した開発者会議「CyberAgent Game Conference 2024」で,講演「ゆめくろで効率的な開発をするためのデバッグ機能紹介」が行われた。エンジニア側が開発スタッフの希望を取り入れてツールを作ることで,バトルやシナリオの質が上がったという内容で,「夢職人と忘れじの黒い妖精」(以下,ゆめくろ。iOS / Android)の活発なアップデートを実現する効率的なデバッグ機能が紹介された。「ゆめくろで効率的な開発をするためのデバッグ機能紹介」登壇者
ジークレスト クライアントエンジニア 木原康剛氏
ジークレスト サーバーサイドエンジニア 藤城隆志氏
ジークレスト クライアントエンジニア 角 威希氏
クライアント側では,お手製の「汎用メニュー」とお馴染み「SRDebugger」がデバッグを助ける
ゆめくろのデバッグには,クライアントについては,画面単位でデバッグ機能が実装できる「汎用メニュー」と,Unity開発者にはおなじみの「SRDebugger」が用いられており,サーバーのデバッグには,ブラウザで動作する「サーバーデバッグ機能」が使われている。これと合わせて(厳密にはデバッグツールではないが)デバッガーとシナリオ関係者が用いる「シナリオ内検索ツール」が日常のデバッグを助けている。
ゆめくろのバトルでは,個性豊かなマイスターたちが攻撃やスキルの使用をオートで行う。バトルのデバッグ機能には,各キャラクターのステータス表示やアクションの停止,敵味方すべてのキャラクターを操作できるものなどが用意されており,特定の組み合わせでしか発生しないバグの検証が容易に行える。
SRDebuggerの使い方として興味深いのが,「ダメージを算出する際の計算式」や,回避およびクリティカルの発生などの詳細な情報がリアルタイムにログとして出力されるところ。とくに計算式の表示は効果的で,仕様書と照らし合わせてチェックできることに加え,プランナーがバランス調整をしたり,ロジックレベルでデバッグしたりすることも可能だという。
ゆめくろはシナリオも魅力的だが,もしデバッグ機能がないとチェックはどうなるだろうか? シナリオは数が膨大であるうえに条件付きで開放されるものも存在するため,人力でストーリーを進めて1つ1つチェックしなくてはならない。問題を見つけて報告するのも「誰それのシナリオの第×話のあのシーンで……」という調子で簡潔に伝えるのが難しいし,伝えられたほうも確認や修正に時間を要することになる。
こうした問題を解決するのが,シナリオのデバッグ機能で,わざわざ自力で手順を踏んだり,サーバー側の設定をいじったりすることなく,すべてのシナリオを確認できる。それぞれのシナリオにIDやインデックスが付与されているため,問題箇所を指定するのも,開発スタッフがチェックするのも簡単にできるという。
サーバー側の機能を工夫することで,手間のないデバッグを可能にする
ゆめくろでは,サーバーにもデバッグ機能が備えられている。プレイの進捗状況によって各種要素が実際に開放できるかを確認するといった作業では,サーバーに保存されているユーザーデータを操作してデバッグを行う。上記のクライアントのデバッグ機能とは目的が異なるわけだ。サーバーのデバッグ機能はいろいろなゲームで使われているが,ゆめくろの特徴は,「状況再現を素早く行えること」を基本としている点だ。
例えば,キャラクターが特定レベルに達することで開放される要素を確認する場合,ゲームをプレイしてレベルを上げるのは非効率的だ。獲得できる経験値を変更して強引に特定レベルに上げることもできるが,経験値テーブルについての知識が必要になる。ゆめくろのサーバーデバッグ機能では,レベルを直接指定できることに加え「経験値をギリギリまで溜める」といったチェックボックスまで用意されている。これにより,実際のプレイや経験値テーブルの操作といった手間を必要とせず,特定レベルに上がったときの挙動を即座に確認できるのだ。
また,フレンド機能やユーザー同士の対戦機能をチェックするとき,ダミーのユーザーデータをいくつも作成するのは手間がかかる。ゆめくろでは,ゲームの進行度や各種パラメータのユーザーデータをランダムに一括作成する機能を用意した。例えば,ユーザー同士が対戦する「スタジアム」機能をチェックする場合,スタジアム機能の開放までをシナリオ化したうえで,パラメータにある程度の幅を持ったユーザーデータを作れるのだそうだ。
疲弊するシナリオ班を救うために作ったツールが,さまざまな職種の効率化を達成する
厳密にはデバッグではないが,シナリオ内検索ツールもスタッフ内では好評だという。これは,ユーザーが入力した文字列などを,すべてのシナリオデータを対象に検索し,ピックアップしてくれるツールだ。話者やキーワード,タイトルといった項目を指定したり,メインシナリオとキャラクターごとのシナリオ,イベントシナリオなどをフィルタリングしたり,除外キーワードや内部IDの指定を行ったりすることが可能だ。例えば「こんにちは」というキーワードを入力すれば,ほぼすべてのシナリオから「こんにちは」という文字列が使われている部分を探してくれるのだ。
このツールは,キャラクターごとの話し方のチェックや,世界観に沿った表現であるかどうかのチェック,さらに,特定の表現を探したり,セリフの前後の内容を把握したりなどの用途に使える。スマートフォンゲームの開発に携わる人にとっては,これがどれだけ便利な機能であるかが分かるだろう。ゲームのシナリオは巨大化していく一方だが,一般論として,シナリオに携わる人数が多くなるにつれてライターの作品に対する知識などに濃淡が生じ,口調のミスや描写の齟齬といったブレが生じやすい(キャラクターたちが互いを呼び合う際の「呼び方リスト」などが配られるのも,こうしたブレを減らすためだ)。
しかし,このツールがあれば,すべてのシナリオデータを対象に口調や特定シーンのチェックなどが容易に行え,シナリオの質が向上していくわけだ。
この機能は,ゆめくろのシナリオ班が疲労困憊していたために作られたという。
当初のシナリオは,1話ごとに1つのWordファイルという構成で,内容を確認するだけでも大量のファイルを開いて検索しなければならなかった。そのため,1人のエンジニアを専任としてシナリオ検索ツールの作成を開始した。「誰でも容易に検索できる」「NDAを結んでいるパートナー会社とも容易に共有できる」「内部IDでの索引やID確認ができる」「誰がいつ,どのストーリーで話しているかが分かる」「運用が楽」という要件を満たすべく開発を進めていった。
結果として,テキストをUnityのツールで解析してスクリプトファイルに変換するという既存のフローに,スクリプトファイルをCSV形式に変換し,Amazon S3へデプロイするという機能を新規で開発,追加。シナリオ班が納品するだけでスクリプトになり,シナリオ検索ツールで検索できるようになるといった現在の形ができあがったのだ。
完成したシナリオ検索ツールは,シナリオ班から「これがないと業務が回らない」と言われるほど好評で,シナリオの質やデバッグ精度が向上したという。藤城氏は「周囲の人が面倒でつらい作業をしていたら,そこから良いツールのアイデアが生まれるかもしれない。声をかけてほしい」と,コミュニケーションの重要さを語って講演を締めくくった。
「夢職人と忘れじの黒い妖精」公式サイト
「夢職人と忘れじの黒い妖精」ダウンロードページ
「夢職人と忘れじの黒い妖精」ダウンロードページ
「CyberAgent Game Conference 2024」公式サイト
4Gamer「CyberAgent Game Conference 2024」掲載記事一覧
(C)bilibili (C)GCREST
(C)bilibili (C)GCREST