こんにちは、日々ゲームバグと戦う新人プログラマーの三條です。
今回はゲームデバッグについて非常にプログラマー寄りな内容をお届けします!

現在ゲームを制作している皆さんに当てはまることだと思いますが、ゲームに新しい何かを実装しているプログラマーは、常にゲームをデバッグしながら制作しています。

新機能の実装以外にも、制作中のゲームに以前実装を最優先で書いた汚いプログラムソースを発見してしまった! どうする!? うーん……今は安定して動いてるし、全然バグとは無縁そうだし、見つけちゃったらキレイにしとかないとな~?と修正すると……ソースはキレイになったけどゲームがバグるようになっちゃった!!! 同じ処理を整理しただけのはずなのに、なんで!? なんてことは日常茶飯事。個人で制作しているゲームでもデバッグはとても時間がかかるし大変ですよね。しかし、会社に入ってプロジェクトにかかわると、沢山のプログラマーが協力してゲームソースを書いているため、全く知らないソースを解読してデバッグをすることになる機会が必ず訪れます。そんなときのために、私が会社の先輩から聞いて以来、すごく大切にしていることが3つあるのでお話ししたいと思います。


まず1つ目は「勝手に目星をつけない」

これ実はものすごく大切なことなんです。そんなの当たり前だし!って言う人もいるかもしれませんが、開発の現場で時間が限られているなかでデバッグをしていると、無意識に「全部デバッグしてると時間がかかって大変だし、ここら辺はさすがにデバッグしなくても大丈夫でしょ」と考えてしまうんです! でも実際にはその飛ばした箇所に原因や手がかりが隠れていることが結構ありました。また、先輩にどうしてもバグが取れないと助けてもらったことも何度かありますが、ここからここまでの処理は完璧にバグが無いことが確認できています! 他のどこにバグの原因がありそうですか?と聞いたときはものすごくスムーズに原因特定までいけました。開発の現場で実際にデバッグをしていて少しでも詰まった場合は、大雑把に当たりを付けて調べるよりも、関係有りそうな箇所を総当りでチェックした方が早く修正できる場合がとても多いと実感しています。


2つ目は「原因の原因の原因の原因を探る」

バグを起こしているコードを発見したとき、ついついその近くのコードのミスを探りがちです。でもそこは一息ついて、どうしてそのバグが起きるのか原因を探ってみて下さい。

例えばnullptrでメモリアクセスエラーが発生した場合、まずどこでそのポインタがnullptrになるかを探します。次にどうしてnullptrにする処理を通るのか原因を探り、さらにその原因を、と捜索していけば必ずバグの根元に辿り着くことが出来ます! バグが起きたら焦らずに原因をたどって行きましょう。


3つ目は「処理をブロックにまとめる」

最後の1つはデバッグをやり易くするためのコーディングです。一連の処理を全部1つの関数(ブロック)に書いてしまうのではなく、処理別に細かく複数の関数に分けて書きます。既にみなさんも耳にタコが出来るほど言われてるかも知れませんが、コードの可読性を上げていきましょう、ということです。基本的ですが開発現場でも、とても重要視されています! コードが読みやすければデバッグで役に立つだけでなく、拡張や改変もやり易くなるので、面倒くさがらずに学生の頃から処理をブロック分けする癖を是非つけておいて欲しいです!

3つとも、言われてみれば当たり前なことかも知れません。でも、時間が限られている開発現場では、つい軽視してしまったり、忘れてしまいがちです。意識しなくても上記の3つが出来るようになれば現場でも頼りにされるプログラマーになれるはず! 是非学生のうちに意識してみてくださいね。私もこれからがんばって制作中のゲームのデバッグをしてきます! では!!



ちなみにこの記事の冒頭に掲載されている画像は、私が学生時代に制作した『タップスミス』というゲームの紹介画像です。GooglePlay限定ですが、今でも* 無料で遊ぶことができるので是非プレイしてみてください!(ゲーム内課金や広告もありません)
https://play.google.com/store/apps/details?id=jp.ac.kobedenshi.android.sanjo&hl=ja
(* 2018年3月時点)






sanjo三條明寛 Akihiro Sanjo
2017年にプラチナゲームズにプログラマーとして入社。現在は新規プロジェクトの開発ツール等の作成を担当している。

過去記事:
ゲームプログラマー志望の僕が用意した就職作品はこれ!アピールのポイントは?