はじめに

はじめまして。

2023年8月に、CA Tech JOBのインターンシップ生として株式会社アプリボットに就業させていただきました。青山研人(@AoKenty)です。
普段は専門学校に通い、ゲームクライアントエンジニアを目指してUnity・C#を用いたゲーム開発を行なっています。

この記事では、私が実際に現場で活動したことで感じたことや、学びになったことをお話しできればと思います。

 

配属先

改めて、今回のインターンシップでは株式会社アプリボットに就業させていただきました。

社内に複数あるプロジェクトのうち、新規の開発プロジェクトにクライアントエンジニアとして参加し、リリース前のゲームに触れるという貴重な経験をさせていただきました。

 

CA Tech JOBでの目標

今回、CA Tech JOBに参加するうえで目標にしていたことが2つありました。

1つ目は
・実際の現場で作業し、エンジニアとして成長する

というもの。業務レベルのコードを、部分的ではなく個々のつながりまで見ることのできる貴重な機会なので、可能な限り情報をインプットできるよう頑張りました。

2つ目は
・自分の将来像を明確にイメージできるようにする

というものです。今まで、漠然とゲームプログラマーという職を目指して、作品を制作したり、設計を学んだり、ゲームエンジンやプログラムへの理解を深めたりしてきました。
そのため、今回の就業を通して自身の将来像を明確にし、どのような勉強をすれば良いのかを具体的に持ちたいと考えていました。

 

CA Tech JOBでやったこと

今回は、以下の4つのタスクに関わらせていただきました

  1. ゲーム画面にいつでも表示可能な汎用UIの実装
  2. 特定のエフェクト表示機能の繋ぎこみ
  3. サウンドの追加・修正
  4. インゲームUIの改修

実際のゲーム画面に表示されるものを作成できただけでなく、制作する過程でマスターデータに関することや、ゲーム全体の設計思想にも触れることができました。

中でも、2番目のタスクでサーバー側との連携について知れたのがうれしかったです。今まで何度か学内のメンバーを集めてチーム制作を行いましたが、サーバーエンジニアがまわりにいないため、サーバーのことを考えて実装をする機会がありませんでした。このタスクを通じて、サーバーでの処理やマスターデータの管理に関心を持つことができ、クライアントエンジニアを目指すうえで勉強すべきことを一つ明確にすることができました。

 

学んだこと

今回の就業を通し、様々な知識をつけることが出来ました。

中でも、「設計」と「チームビルディング」に関する理解を深められたと感じています。

 

クラスの設計について

まず、ひとえに設計といってもいろいろあるとは思いますが、ここではクラス設計に関することについてまとめさせていただこうと思います。

その1:ドメイン駆動設計

今回参加したプロジェクトでは、チーム全体の設計にドメイン駆動設計を採用していました。
内容を簡単に説明すると、目標とする課題を適切に理解し、そうして明瞭になった仕様をそのままコードに落とし込むことで、コードに可読性や保守性を持たせることを目的とした設計思想となっています。
CA Tech JOBに参加する前から噂を聞き興味を持っていた技術だったため、実際の現場で使用されている例に触れることができ、非常に参考になりました。
また、このドメイン駆動設計というものは、設計といっても単にクラス設計やデザインパターンといったコーディングに関する分野だけではなく、チーム全体の動き方や仕様の決め方にも関わる内容になっているという点がおもしろいと思っています。チームビルディングに関する項目でも後述しますが、参加させていただいたプロジェクトではよりよいチーム作りに力を入れていたため、この設計思想が採用された理由に納得しました。

その2:ImmutableなDtoの活用

Dto(Data Transfer Object)とは、設計のパターンの一つです。
膨大な数のデータをひとつずつメソッドやクラスに渡すのは、コードの可読性が下がるだけでなく、受け渡しするデータの追加修正を行うたびに複数のクラスを修正することになるため、非常に効率が悪いです。

このような問題に対し、受け渡しするデータそのものとしてのみ扱うクラスを定義することで回避しようという目的のものになっています。

クラスの名前から扱われているデータを推測しやすいというだけでなく、就業先のプロジェクトではDtoクラスが保持する値をreadonlyにする制約を設けることで、一度インスタンスを生成したら変わることがないデータとして扱い、不要な書き換えがされないような工夫がされており、発想自体は単純ですが様々なメリットが得られる手法だと感じました。

 

チームビルディングについて

そもそも、私はCA Tech JOBに参加する前はチームビルディングという分野を認識していませんでした。しかし、実際にプロのクリエイターの方々に交じり活動したことで、チームを成長させるということの重要性を理解することが出来ました。

そもそもチームビルディングとは

素晴らしいコーディング能力や、デザイン能力があるメンバーが集まったところで、連携が取れていなかったり、目標がバラバラだったりしたら、良い作品を作ることはできません。
互いを信頼し、一つの目標に向かって進めるようにする施策を行うことで、より良いチームをつくり、結果的な効率を上昇させることを目的とした取り組みとなっています。

行っていた施策

ここからは、参加したプロジェクトで行っていた施策をいくつかご紹介させていただきます。

1. TGIF
Thank God It’s Fridayの略です。毎週金曜日に、この週にやった作業をチームのメンバーに発表するというものです。気楽に自分の成果を見せられる場になるため、行うタスクに対し達成感が得られ、次の週に向けてやる気を維持するいい機会になっていました。

2. モブプロ
モブプログラミングの略です。セクションのプログラマーが集まり、1人が画面を映しながら作業をします。それを他の人たちは見て、それぞれ疑問点や意見を話しながら実装を進めるというものです。自分が担当していない箇所に集中することができる機会になるだけでなく、チーム内での認識をすり合わせることができるという利点があると感じました。

3. パーソナルマップ
新しくプロジェクトに参加したメンバーに、チームのメンバーから様々な質問をし、質問に答えながらその内容をもとにマインドマップのような図を作っていくというものです。相手がどのような人間なのか知る機会を作ることで、その後のやり取りを円滑に行いやすくするという目的があります。

上記の3つ以外にも、勉強したことや体験したことを話す場が設けることで、情報のインプットとアウトプットを習慣づける工夫がされていたり、毎週の目標を確認しあうことで途切れることなく目標を持ち続けられるようにしていたりと、チームメンバーが成長できるような環境が作られていました。

実際にこのような施策を体験したことで、徐々にタスクへの取り組みがやりやすくなっているという実感を得られ、チームビルディングの重要性を感じることができました。

 

最後に

ここまで、CA Tech JOBで学んだことについてお話させていただきました。

私は、学内の制作で何度かチームのメンバーをまとめる立場になったことがあり、マネジメントという分野への興味があったため、それに関係するチームビルディングについての知見を得る機会になり非常に勉強になりました。

就業期間はアプリボット社員の皆さんをはじめ、人事の方々など、多くの方に支えられたくさんの学びを得ることができました。本当にお世話になりました。今後の制作では、この経験を活かし、より良いチーム・ゲームづくりをしていけるよう努力したいと思います。

参加したチームで扱っていたプロジェクトがリリース前のタイトルだったということもあり、具体的な実装をお見せすることは出来ませんでしたが、この記事を読んでくださった方に何か学びのようなものを渡せていたら幸いです。