インターンに行ってきたよ日記
目次
はじめに
どうも、三回生コーディング課のポテリーです。今日はクリスマスイブですね。メリークリスマス!皆さんはいかがお過ごしでしょうか。最近また一段と寒くなりましたね。僕の下宿先のアパートは築年数が多くて隙間風が吹いています。最近は着るタイプの電気こたつを買いました。あれマジでいいですね。快適すぎる。でもやっぱ掘りごたつが一番です。机のうえにみかんを置くためだけの器をおいて顔だけ出してたいです。ところでメリークリスマスって24日と25日のどちらで言うのが正解なのでしょうか。普通に考えればクリスマス当日は25日だからこの日だと思うのですが、みんな騒いでるのって大体24日ですよね。まぁどっちも言えば解決。
前置きが長くなりましたが、今回は先日行ってきたインターンについて記録がてら話していこうと思います。
インターン内容
具体的な企業名とかイベント名は伏せるのですが、チーム3人集まって2日でゲームを作ろうというものです。イベントの一週間前にキックオフでテーマが発表され、一週間を通じて企画の立案、コード設計、スケジュール計画などを立てて準備をしていきます。そして一週間後の2日で実装コードを書いていくというものです。
事前準備
今回、RiG++のコーディング課リーダーのにしちゃんと、3D課リーダーのともちんと一緒にイベントに参加したのですが、中々有意義に一週間の事前準備期間を過ごせたんじゃないかなと思ってます。コードの実装は禁止という中で、事前期間の初日から企画を提示してメンターさんからフィードバックをもらえていましたし、その後もコード設計や目標決め、ブランチの分割、演出の素材集めなど、必要になりそうなことはおおむね決めました。自分としても、担当モジュールの実装シミュレーションや、モジュール内設計をできる限りしてから当日に臨みました。
ゲーム仕様
- 登場するのは「うさぎ🐰力士」と「かえる🐸力士」。
- プレイヤーは「かえる🐸力士」となり、制限時間以内にできるだけうさぎを土俵から落としていく。
- 土俵の周りには倍率がそれぞれ書かれたルーレットが回転していて、プレイヤーはより高い倍率を狙う。
- うさぎは四種類。それぞれ基礎得点があり、それに倍率をかけた点数がプレイヤーのスコアに加算される。
- 高スコアを目指そう!
このゲームのコンセプトは「爽快感」。次々に出現するうさぎを吹き飛ばしていくことでストレスを発散します。SEやアニメーション、エフェクトを多用して気持ちよくなっていきます。

また今回設計面で新しいことに挑戦しました。
下図は事前にメンターさんに提示したスライドの一部です。


にしちゃんが本番用DIコンテナを管理して、モックのモジュールでテスト、私とともちんがモックのDIコンテナを作成して各モジュールをテストする方針です。その際、僕らがモックのDIコンテナにInstallerと呼ばれるものを設置していき、そのInstallerの中に、各依存クラスを登録していきます。にしちゃんの本番用コンテナと結合する際は僕らが作ったInstallerをそのまま登録するだけで済みます。非常に疎結合でテスト性が良い設計ですね。(key君ありがとう)
当日
東京に行きました。満員電車に揺られながらの移動が特に大変でしたね。ビルが高かったです。
前日からホテルが提供されていたので、そこからの移動です。早起きしてみんなで向かいました。
一日目
初陣
会場についてイベントが始まると、自己紹介フェーズに入りました。みんなコミュ力高すぎてびっくりしました。僕はきょどったのでうまく話せなかったです。
メンターさんと今日の動きについて話し合って計画をまとめたあと、ついに開発がスタートしました。みんな超急いでいましたね。なにせ2日(1.5日)くらいしか開発出来ないので…。うちのチームの初動は以下の分担をしていました。
- にしちゃん:各モジュールにつながるインターフェースの定義
- ポテリー:ライブラリインポート&ディレクトリ作成等
- ともちん:アセット等のインポート
にしちゃんはリーダーとして基盤管理をしていたので、各モジュールの結合層やゲーム全体のステート管理をしていました。一つ問題だったのが、私がUniTaskやUniRx、VContainerをインポートする中で、gitのdevelopに上げるまで、にしちゃんがそのライブラリを使えなかったということです。インターフェースにUnitとか書けないので、エラーが出つつも記述をし、developに上げることで対応しました。
実装開始
無事に三人とも初動を終え、事前に決めていたモジュールのコーディングに入りました。私は主に以下のシステムを担当しました。
- ルーレットの回転&落下物検知
- スコアシステム
- 敵(うさぎ)スポーンシステム
事前に頭の中で実装シミュレーションしていたため、初めの方はうまくいってました。二時間くらいでルーレット系が出来、その後一時間くらいでスコアシステムが完成しました。続いて一番時間がかかる敵スポーンシステムを作成していたのですが、これが一番辛かったです。簡易Wave制で一度にスポーンする敵群を現在のWave数に応じて変更、土俵(円)の中で位置をランダムに選び敵をスポーン。これだけのシステムですが、短い時間の切迫感で結構やばかったです。これは一日目の中では終わらなかったので、夜ホテルの中で完成させました。
ともちんが担当していたプレイヤーモジュールが中々曲者だったようで、その入力操作の受け取りに苦労していたようです。ビルド先がAndroid端末との指定だったので、その入力操作を提供するAPIを企業側が公開していたのですが、事前準備期間でこれを私は読んでいませんでした。隣で、悪戦苦闘をしているのに対して、解決案を何も出せないでいるのがもどかしかったです。結局、一日目ではこの問題は解決せず、ビルド先の端末を企業に置いて一日目が終了しました。
二日目
再び戦場へ
そこそこ寝ました。また皆で企業先に向かったのですが、焦りと不安感で、電車の中での会話が極端に少なかったように感じます。その日の昼下がりが開発締めだったので無理もないです。プレイヤーの操作感については端末が無いと分からないので、ホテルでできなかったんですよね。一番の懸念点がプレイヤーモジュールでした。
二日目が始まり、開発が再開されました。始まって数十分くらい経った時、プレイヤーモジュールが急速に改善したようです。
「良かった!」
分かりやりやすくチームの士気が上がり、会話が増えていって明るくなりましたね。昼休憩前には必須の機能はすべて揃い、バグ修正やレベルデザインなどを凝る時間になっていました。最悪の状況を想定していた身としては、願ってもない展開でした。
昼休憩後も開発の時間があったので、ひたすらSEや、エフェクトなどの演出を追加、調整していきました。開発締めが近づき、メンターさんにテストプレイをしてもらいました。そこでプレイヤーの操作感が気になるとのフィードバックを受けましたが、ちょっと時間が足りませんでした。その操作感については結局私は触れることなく開発締めとなりました。
制作物
結果以下のようなものが出来ました。
わりかしいいものが出来たのではないでしょうか。
にしちゃんが、色々なアニメーションやUIを作ってくれたおかげで見た目はかなりいいものになりました。プレイヤーの操作感も最初よりかはかなり改善しました。あとともちんが作ったウサギとカエルがとても良い。何より、面白いです。ゲームが。
最終スコアに対して関脇級とか大関級とか横綱級とか用意する案は最高でしたね。かなり面白いものになりました。エフェクトやSEも不自然にならないくらいにモリモリに盛って、できるだけ「爽快感」を出すようにしました。
開発締め後、発表
端末が回収された後、スライド発表を作成する時間になり、そのまま全グループ発表しました。自チーム合わせて5チームあったのですが、どのチームもゲームをしっかり完成させていてマジですごかったです。どこか1チームくらいは完成しなかったところがあってもおかしくない時間設定ですからね…みんなすごいです。それに皆考えていることが面白い。アイデアの段階でもう面白い。全然自分では思いつかない企画ばっかりでした。もっとゲームを色々プレイしなければ…
発表後、試遊会があり全チームのゲームをプレイさせてもらいました。みんな2D系のゲームを作成していました。しっかり3Dのゲームを作ったのはうちぐらいなようです。画面をなぞった軌道上にブーメランを飛ばして敵を倒すゲームとか、ジャイロ機能を使用して重力を回転させながら進むアクションゲームとかあって面白い。GPTで生成させたUIを使用しているところもありました。そんなに精度向上していたのかとかとちょっと驚きました。プレイした感想は、皆とにかく操作感が良い…ストレスを一切ため込まず、ゲームに没頭できるものばかりでした。私たちはその部分に課題を残したのでちょっと悔しいです。
結果は…
その後、一応リーグ形式なので、優勝チームが発表されました。
結果は…
ドコドコドコ…デン!
優勝ならず!
前に説明したジャイロ機能が付いたゲームが優勝しました。コンセプトが面白かったし、ステージ数も10個くらい作っててやりごたえがあったもんね。アイデアから負けていたように感じます。優勝チームはその企業キャラの人形をもらっていました。ちょっと欲しかったです。
懇親会
表彰があってそのまま懇親会に入りました。メンターさんがそれぞれのメンバーの動きとかコード、ゲーム性に関してフィードバックをくれました。メンターさん曰く、惜しかったらしいです。ほんとうかな??面白いゲームだったとほめてくれました。良かった!ピザとかおかずとかビールを飲みながら、全員の良かった面を言っていってくれました。僕に対しても「コードはしっかり書けているし、このまま努力していってほしい」との旨をいただきました。ほんとうかな??
途中で社員さんによるLTが始まったのですが、内容はAIの使い方に関する物でした。設計に関しては自分で考え、実装をAIに行わせるという方針を推していました。自分はAIに実装を任せてしまうことに、抵抗があるのですが、生成した内容を理解することは前提として、設計を伝えた上で実装部分を任せていくことは悪いことではないのかなと思いました。AIありきのコーダーになってしまうことが懸念点ですが…。意外と企業側はAIに対して肯定的で驚きました。
また懇親会が再開し、メンターさんの1人が良い本があることを教えてくれました。「Game Engine Architecture」。バチバチに難しい本だそうですが、ゲーム開発に関するほとんどすべての分野が体系的に載っているらしいです。前半から数学的な内容が続くそうですが、これから自分もゲームエンジニアとして生きていくうえで必要な知識をこれで養おうと思います。今回のゲーム制作においてプレイヤーの操作感が問題になっていましたが、RigidBodyの挙動のせいでもあるので、自作で組んでみるのも面白いかもしれません。ページ数が超多く、ちなみに1万円以上するらしいです。プロの人でも理解が難しいらしいので、かなり大変ですね。頑張ります。
メンターさんたちと話していて思ったのは自分がUnityというサービスのユーザーに過ぎなかったということです。プロのエンジニアたちはUnityが提供しているサービスをそのまま使うのではなく、独自のコンポーネントを使った理想的な開発環境を実現しようとしていました。物理挙動や動画の暗号化、解読スピードの向上試行など…オリジナルなものを実装しているそうです。私も自分が不便に思った機能については妥協するのではなく、どんどん拡張していきたいなと思いました。
また、デザインパターンについてのフィードバックももらいました。デザインパターンは初めから使おうとするものではなく、起きている問題を意識したうえで、設計をしていく中で至る先のパターンであるということを言われました。現場の人たちは、話し合ってクラス設計をしていくとき、どのように分けたら開発が楽になるのかを意識し、デザインパターンの名前などは一切出さないと言います。よく、デザインパターンに縛られずに柔軟に設計するということを言われますが、常に先立っているのは問題意識であるということが決定的な違いだと感じました。意識を根底から変えることは難しいですが、今一度、拡張性やテスト性を高めるには何が必要で、何がいらないのかを今の自分の設計志向から考えていきたいと思います。
帰り道、終点か始点か
今後の方針が立ち、躍起だっている人もいれば、自信を露骨に失くす人もいました。私は、次にやること、目指していく先が会話の中で見つかったので、ちょっとずつ変わっていこうかなと思います。開発期間が終わりみなさんお疲れのようで、夜はよく眠りました。
良かった点・悪かった点
今一度、今回のインターンを通した振り返りをしていきたいと思います。
良かった点
- 事前に組んでいた設計通りにコンポーネントを組むことが出来た。
- 実装スピードをある程度出すことが出来た。
- チームとの報連相を欠かさず行った。
- メンターさんに相談することで解決案を見つけることが出来た。
- 積極的にメンターさんから情報を聞き出すことが出来た。
- 今後何をしていくかの方針が立った。
今回何かが起こるたびに声にしたり、Slackで共有していたりしたので、常にみんなが何をやっている状況なのか、どんな問題が発生しているのかを把握することが出来ました。チームはもちろんメンターの人たちも含め把握できていて、アドバイスをもらえることが出来ていたことが大きかったと感じました。また、先にも述べた通り、良い本を紹介してもらったので、ちょっとずつ読んでいこうかなと思います。
悪かった点
- コンポーネントのテストが全くできてなかった。
- 事前に配布されていたAndroid端末の入力APIを読んでいなかった。
- 自分の作業に没頭しすぎて人が困っているところに加助舟を出すことが出来なかった。
- 設計に関して、問題意識から入ることが出来なかった。
あんまりテストしないで、developに上げてしまったことが結構あって、不具合が見つかったことが多々ありました。確実なものにしてから上げるべきだったと強く反省しています。また、事前に配布されていたコードをあまり読まなかったことも大きな問題でした。入力を調べずに計画をして、当日を迎えてしまったことがリーグの敗因であり、プレイヤー操作をうまく制御できなかった理由でもあると感じています。
おわりに
今回はチームで行ってきたインターンについて、記録をしていきました。まだまだ課題は山積みであり、プロの人を唸らせるには程遠いと感じています。みなさんも外部のインターンに是非行ってみてはいかがでしょうか。団体内という閉鎖された空間から飛び出して新しい視点を得ることはとても大事なことだと思います。回生関係なく、新しい世界にどんどん飛び込んでいきましょう。では、さよなら!メリークリスマス!

