『Pokémon TCG Pocket』はリリース以降、膨大な数のカードを追加し続けています。
これらが持つバトルにおける効果や固有のダメージ計算処理(以下、カードロジック)は、パラメータ差異を除いても約500種類に及び、今後も留まることなく増加していきます。
通常、固有ロジックの増加は保守コストや学習コストの増大を招きますが、本作では独自のコーディング基盤を設計することで、長期運営における高い開発効率と堅牢性を両立しています。
本セッションでは、複雑なルール体系の上で固有ロジックを持つ大量のエンティティが干渉し合う「デジタルカードゲーム(DCG)」類型特有の課題に対し、我々がいかにカードロジック実装基盤を設計・運用して対応してきたかを、ひとつの解決方針としてご紹介します。
また、その裏側を支える以下の3つの技術要素についてもサブトピックとして掘り下げます。
- Incremental Source Generator による、メソッドを起点とする関連メソッドチェーンの自動生成
- Protocol Buffers + custom protoc plugin による、通信スキーマをもとにした基盤実装の自動生成
- 補完文字列ハンドラのカスタム実装による C# string のテンプレートエンジン化
コード自動生成を用いたエンバグリスク・レビューコストの低減は、DCG に限らず様々なゲーム開発において有用なアプローチです。
大規模タイトルにおけるひとつの活用事例として、皆様のご参考となれば幸いです。
講演者プロフィール
原田 大輝
21新卒として株式会社ディー・エヌ・エーに入社。
現在は Pokémon Trading Card Game Pocket のバトル班テックリードを務めている。
《講演者からのメッセージ》
ドメイン知識の差、経験の差、今日はなんか眠い――様々な要因で人間や LLM の出力はブレて、バグを生みます。
バグが生まれるのは仕方がない、しかしそれを世に出してはならない。そのための検査・修正を人間や LLM がやるとどうなるか? そう、バグを生みます。
ゆえに決定論的コード生成や、不具合を静的解析可能な設計が重要視されるわけです。
……待てよ、そもそも仕様をコード化する過程がなければバグは生まれないのでは? そんな夢物語を現実に落とし込んだ話をします。


