見出し画像

木こりのジレンマ:効率化するための時間がない??

ゲーム開発をしていると、「目の前の作業に追われていて、新しいツールや効率化の施策に時間を割けない」という状況に陥ることはありませんか?
これは、ゲーム開発に限らずよく知られた話で、「木こりのジレンマ」と呼ばれます。
今日は、ゲーム開発現場における「木こりのジレンマ」について、僕の実体験をもとにお話しします!


木こりのジレンマとは?

ボロボロの斧で木を切り続ける木こりに対して、通りすがりの人が「斧を研いだほうが効率よく切れますよ」とアドバイスします。ところが木こりは「そんな時間はない、木を切らなくてはいけないんだ!」と怒って拒否してしまう。こうして、「一度立ち止まって準備や改善をすれば、作業はもっと楽になるのに…」というジレンマを抱えたまま突き進むわけです。

実際の仕事でも、忙しさにかまけて道具を研ぐ時間を後回しにしている人は少なくないと感じています。特にゲーム開発の現場では、締め切りに追われてとにかく今あるタスクを片付けようとしがちです。こうした状況に巻き込まれると、結果的に手戻りが増えてさらに忙しくなる…そんな負のスパイラルを引き起こす要因になりやすいのではないでしょうか。

具体例:バグ報告システムを整備する


ゲーム開発では、バグの報告や修正が日常茶飯事ですよね。ところが、そのバグ報告のフローが手間のかかる状態のままだと、「細かい報告をするのが面倒で、後回しにしてしまう」という事態が起こります。開発用ROMの番号やログの添付、再現手順の記入など、一つひとつは必要な要素でも、数が多いとどうしても敬遠されてしまうんです。

けれど、ここで「どうせ時間がないから」という理由でフロー改善を先送りすると、バグが大量に蓄積してから一気に処理する羽目になったり、ログ不足で原因がなかなか特定できなかったりします。そこで、思い切って作業を中断し、バグ報告ツールやタスク管理システムを整備することで、最終的に大きな時間短縮を狙えます。

以前僕がかかわったプロジェクトでは、ROMでボタンを1つ押すだけで、ログやROMのバージョンなど、バグ報告に必要な情報が全て添付された状態のタスクが作成され、そのままタスクシステムに投稿できるようにしていました。このシステムによって、チーム内でのバグ報告が活性化し、調査も非常に楽になったのです。

具体例:デバッグ機能を実装して効率化

たとえば、敵キャラクターの挙動をテストする際、特定のHP残量や状態異常条件でしか発動しない攻撃をチェックしなくてはいけないことがあります。何も準備がないと、毎回HPを1割まで削って検証を繰り返すことになり、1回のテストに数分から数十分かかるなんてことも珍しくありません。

でも、あらかじめHPや攻撃スキルを自由に操作できるデバッグ機能を用意しておけば、すぐに該当状況を再現できます。これこそが、まさに「斧を研ぐ」ことだと私は思っています。作るのに少し時間はかかりますが、一度実装してしまえばテストのたびに大きく手間を省けますし、最終的なバグ修正や調整もスピードアップするでしょう。

忙しくないうちは、こういったデバッグ機能の実装は当たり前のようにできるのですが、開発終盤になって、「今日直すべきバグが10件ある」ような状況になると、途端に同じことができなくなってしまうのです。

具体例:通信エミュレータの実装

オンライン通信対戦のゲームにおいて、通信中にプログラムの問題が起きたときのデバッグは非常に困難です。これには理由が2つあります。

まず、プログラムのデバッグには通常、Visual Studioなどの「デバッガ」を使います。デバッガを使うと、プログラムを一時中断し、1行ずつ実行しながら、どこに問題があるのかを特定することができます。しかし、通信対戦のゲームでは、デバッガによるデバッグは困難です。対戦を行っている2台の端末のうち、1台だけプログラムを止めてしまうと、その台は通信が大幅に遅れているという判定をされて、ほかの台から通信切断扱いをされてしまうからです。つまり、デバッガを使うことによって、別の問題が起きてしまうのです。

また、通信対戦のゲームでは、当然ながら複数人でプレイすることになります。つまり、バグを再現するのにも、複数人の手が必要なのです。プログラマがバグを調査しようとしてまず再現しようとすると、必ずもう1人に手伝ってもらう必要がある、ということになります。

そこで大事になるのが、プログラマが1人でも通信対戦を再現できる「エミュレータ」を実装することです。エミュレータは、通信は行わないのですが、イベントを送受信しているのと同等の処理を1台の端末で行い、通信対戦しているときと同じような動作を仮想的に実現します。
エミュレータの実装はとても大変ですが、長期的には大きなメリットがあります。僕のいたチームでは、「通信ゲームを作るなら、まずエミュレータを作れ」とまで言われていました。

具体例:新しいツールへの投資

最近は生成AI(とくにChatGPTなどの大規模言語モデル)が続々と登場していて、ゲーム開発と相性のいいツールも増えています。たとえば、UnityやUnreal Engine向けのコードを自動生成してくれたり、雑多なスクリプトを一瞬で書いてくれたりするものもありますよね。

ところが、実際に話を聞いてみると、今のプロジェクトが忙しすぎて新しいツールを導入する余裕がない…と尻込みしてしまうケースが多いようです。以前、とある他社の開発者の方と話をするなかで、「便利そうなのは聞いているけど、タスクが多くて、会社の承認とかも要るし、試す時間がない」という声を耳にしました。

でも、ここで少しだけ時間を割いてAIツールを触ってみれば、コードの量産やバグの修正において飛躍的な効率アップが見込めるのではないでしょうか。私は、マネジメントやプロデューサーの立場の人こそ、そういう担当者を強引にでも一人アサインして、新ツールの可能性を検証させるべきだと考えています。結果的に全体の納期短縮にもつながる可能性が高いと思うからです。

まとめ


木こりのジレンマは、いつの時代も変わらない課題だと思います。目先の作業だけに追われるのではなく、「効率化できるポイントはどこか」「新しい技術やツールをどう活かせるのか」を常に考え続けることが大事だと感じています。

特に今はゲーム開発の環境が目まぐるしく進化していて、Unreal EngineやUnityのアップデートは頻繁に行われます。加えて、生成AIが驚くほど急速に発展しています。こうした新しい手段を取り入れるには、「忙しくても、あえて作業を中断する決断」が必要になるのではないでしょうか。

私自身、過去にデバッグ作業を効率化するための機能づくりにあえて数日かけたことがあるのですが、その後のテスト工程のスピードが劇的に上がったと実感しました。結局、前もってツールを整備しておくほうが、最終的にトータルの開発時間を短縮できるということを改めて痛感しています。

皆さんも、もし今「斧がボロボロの状態」で頑張っているのだとしたら、ぜひ一度立ち止まってみてください。たった1日でもいいので、時間を取ってツールを試す、自動化を進める、フローを整備することを検討してみると、「あれ? こんなにラクになるの?」と驚くような成果を得られるかもしれません。


少しでも参考になればうれしいです!
Xでも情報発信をしていますので、フォローしていただけると嬉しいです!


いいなと思ったら応援しよう!

この記事が参加している募集