24卒内定者アルバイトが見つけた「ツール開発の魅力」

エンジニア

はじめに

株式会社ジークレストで内定者アルバイトとして働く、24年新卒ゲームクライアントエンジニアの初野広夢です。2023年5月から6月にかけて、2か月間「夢職人と忘れじの黒い妖精」(以下、ゆめくろ)の開発に参加しました。

ジークレストに入社する前にも、モバイルゲーム開発会社での経験があり、デバッグ機能や外部ツールを活用して開発効率を向上させることに強い興味を持っていました。ゆめくろの開発チームでは、私の希望に応えてくれる形で、数々のデバッグ機能の実装や開発効率化のための外部ツールに関わる仕事を任せてもらいました。

今回の技術ブログでは、私が仕事を通じて見つけた「ツール開発の魅力」についてご紹介します。

今回取り組んだツール開発の概要

2か月間の内定者アルバイト期間中、私はさまざまなツール開発に取り組みました。具体的には、以下の4つのタスクを実施しました。

  1. ゲーム内時刻変更ツールの改修
  2. ビルドの成功結果をSlackに通知するJenkinsのバグ対応
  3. 接続先変更ツールの開発
  4. シナリオ検索ツールのご意見に対する改善

ゲーム内時刻変更ツールの改修

最初に取り組んだタスクは、図1のようなゲーム内時刻変更ツールの改修でした。このツールは、デバッグ中に過去や未来のイベントを確認するために役立ちます。

改修前のツールは、ゲーム内時刻の変更は可能でしたが、アプリを終了すると時刻変更がリセットされる仕様でした。そのため、アプリを終了するたびにデバッグ時刻を再設定する必要があり、デバッグ作業に負担がかかっていました。この問題を解決するため、ゲームを終了しても時間の変更を保持する改修を行いました。

改修にあたって、以下の点を考慮する必要がありました。

  1. 変更によってデバッガーさんが困惑しないようにすること。
  2. アプリ終了後に現在日時へのリセットがないため、現在日時のリセット機能を新たに追加すること。
  3. 時刻変更中もアプリを終了している間は、時刻が現実と同様に経過するか選択できるようにすること。
  4. 既存のUIの使用感を変えずに、新たな機能を追加すること。

これらの考慮点をデバッグ担当者と合意を取りながら、1つずつ解決していくことで、図1のようなレイアウトの機能が実装されました。その後、実際に使用していただく中で、時刻変更中に時刻変更中とわかるような仕組みが欲しいというご意見をいただき、図2の様に日時の文字色を変更することで対応しました。このようなツール開発後のアフターフォローを行う経験もあり、ツールを作るだけで終わりではなく、作ったツールが今後も使われていくために機能改善などのアフターフォローが欠かせないことを学びました。

図1.ゲーム内時刻変更ツール
図2.日時の文字色を変更

ビルドの成功結果をSlackに通知するJenkinsジョブの修正

ゲーム内時刻変更ツールの改修が完了した後、ジークレストで以前から問題があったJenkinsジョブの修正対応を行いました。この修正以前のジョブは、ビルドが成功してもSlackに「ビルド失敗」と通知される不具合がありました。

Jenkinsは私にとって新しい技術でしたが、チームの経験豊富なエンジニアから基本操作やジョブの作成方法を学ぶことができました。私はUnityプロジェクトと同様に、ログの出力を利用して原因を特定しました。最初はジョブの内容が理解できずにいましたが、ジョブの修正過程で徐々にジョブの中身を理解し、問題を解決できるようになりました。この経験を通じて、未知の技術やツールにも諦めず、経験豊富な方からアドバイスを受けつつ問題解決能力を磨くことができました。

接続先変更ツールの開発

ゲーム内時刻変更ツールの改修や、ビルド成功結果をSlackに通知するJenkinsのバグ対応などのタスクをこなした1か月後、次の課題としてSRDebugger上での接続先変更ツールの開発に取り組みました。接続先変更ツールは、図3のようにスプレッドシート環境、サーバー接続先、アセットバンドルの接続先をSRDebugger上で簡単に変更できるツールです。

このタスクは、これまでのタスクよりもボリュームがあり、既存のSRDebuggerの機能を改善する必要があるため、影響範囲や実現可能性を考慮して取り組む必要がありました。Jenkinsのバグ対応と同様に、以前から会社が抱えていた問題だったので、是非とも実現したいと思い取り組んだタスクでした。

接続先変更ツールの開発の難所は、接続先一覧が実行時に動的に決定される点でした。SRDebuggerの標準仕様では、動的に変化するList型のプロパティにUIは対応していません。対応しているのは、実行時に中身が変化しないEnum型です。このため、公式にサポートされていないList型を独自実装する必要がありました。既存のEnum型に対応しているUIの構造を参考にしながら、List型を独自実装する方法を試行錯誤しました。最終的に、SRDebuggerを改修することで、動的に変化する接続先一覧を表示し、簡単にSRDebugger上で変更できるツールを実現することができました。

図3.接続先変更ツール

シナリオ検索ツールのご意見に対する改善

内定者アルバイトとしての最後のタスクで、シナリオ検索ツールへの改善に取り組みました。ジークレストには、シナリオチームがシナリオを検索する際に役立つシナリオ検索ツール「図4」がすでに存在していました。このツールが使われる中で、さまざまな要望が寄せられていたものの、開発チームの状況などから対応が難しかった状況でした。そこで私が、シナリオ検索ツールに対する要望をもとに改善の実装を行うことになりました。

改善に対する意見は全部で17件あり、内定者アルバイト期間中にすべての対応が難しいと予想していました。また、実務ではじめてのウェブ開発だったため、不安も感じていました。しかし、実際にタスクに取り組んでいくうちに、基本的なプログラムの考え方はC#と同じであり、ウェブ開発にも慣れていきました。最終的には、17件の要望すべてに対応することができました。今回は、17件の要望のうち1件をピックアップして紹介します。

要望の内容は、シナリオ検索ツールのストーリーIDにカーソルを当てた際に、「マイスターストーリー太陽3話」など、初心者にも読みやすい話数表示ができるようにすることでした。これは、既存のシナリオ検索ツールではストーリーIDの情報しか表示されておらず、新たに参加したメンバーがどのイベントやキャラクターに対応しているか分からないという問題があったためです。

この要望を解決するために、まず既存のシナリオ検索ツールでは取得していなかったデータを取得する必要がありました。この際、マスタデータにアクセスし、必要となるデータを取得しました。このタスクを通じて、マスタデータとは何か、マスタデータの中身をサーバーにアクセスして確認するなどの方法を学び、問題を解決することができました。

シナリオ検索ツールの改善が完了すると、シナリオチームの方から非常に嬉しいお褒めの言葉を頂くことができました。ツール開発の魅力として、さまざまな技術に触れる機会があることも大きいですが、この様に身近な開発メンバーの方からのお礼の言葉を頂けることがエンジニアとしては非常に励みになります。

図4.シナリオ検索ツール

おわりに

ツール開発を通じて異なるセクションの方々からヒアリングする機会も多く得られ、エンジニアでない方にも技術的な可能性を話し合いながら機能提案するのは非常に有意義な経験でした。さらに、自分が開発したツールについて、実際にツールを使った開発者の方々から直接感謝されるのも嬉しい経験でした。

ツール開発はゲームの機能開発とは異なり、他の言語や既存の外部ツールを改修するなどの大変さがあります。ですが、ツール開発の魅力として開発したツールが5年、10年と社内で使われ続けること、チーム全体の開発速度を早めることで、ゲームのクオリティアップに貢献できるという魅力があります。大変さもあるツール開発ですが、ゆめくろの開発メンバーの方々に支えられシナリオ検索ツールの改修の大部分を担当するまでに成長できました。今後もクライアントエンジニアの立場として、開発全体の効率化を支えられるように努めていきたいです。