新卒がアプリボットで半年間働いてみて学んだこと

 
こんにちは!23卒サーバーサイドエンジニアの東です!株式会社アプリボットで新規ゲームの開発をしております。
本記事では入社して半年間で得られた成果や学びを紹介していきます!

配属を希望した理由

CyberAgentにはゲーム広告メディアという大きく分けて3つの事業部があります。
事業部やその中のプロジェクトごとに求められる仕事や組織の雰囲気が異なるので、新卒の社員はマッチした場所を見つけることが重要です。そこでCyberAgentでは、入社までの間に内定者アルバイトとして希望した場所でアルバイトができる制度が存在します。

私はその制度を利用していくつかのプロジェクトで内定者アルバイトをさせていただき、その中で自分に一番あっていると感じたのがゲーム事業部でした。自分は技術志向よりプロダクト志向が強いタイプなのですが、ゲーム開発も「ユーザーが面白いと感じるか?」が最終的な判断の根拠になることが多いので深い納得感を持って仕事ができると感じました。

ゲーム事業部は10以上のCyberAgent子会社で構成されており、それぞれ子会社が強みを持っています。内定者アルバイトでお世話になったアプリボットは 100人近い大規模なプロジェクトやSSSといったクリエイティブ組織などの非ゲーム領域の事業も展開する会社です。その柔軟な組織の風土にも惹かれ、配属を希望して今に至ります。

「ゲーム機能を全部担当する」を掲げる

サーバーサイドエンジニアとして配属された私が、最初に掲げた目標は「ゲーム機能開発を全部担当する」でした。

サーバーの開発は大きく分けてゲーム機能非ゲーム機能の2種類があります。
ゲーム機能というのはその名の通りゲームの機能で、APIを通してクライアントから送られてくるデータを保存したりサーバーからデータを送ったりするものです。
対して、非ゲーム機能というのはゲーム機能以外の部分で、管理画面の開発や課金機能の基盤開発などがこれに当たります。

私は前者のゲーム機能を全て担当するという目標を立てました。エンジニアとしての経験が浅く、かつゲーム開発が初めての私にとってはかなり大きな目標でした。最終的にゲーム機能をほぼ全て任せてもらえるようになったのですが、それまでに苦労したことがたくさんあったので、それについてお話しできたらと思います。

さっそく実力不足を痛感する

当たり前ですが、配属後すぐにいくつかの困難に直面することになります。

1. ゲーム開発特有の知識がわからない

内定者としてアルバイトをした時に初めてゲーム開発というものに出会ったため、ゲーム開発特有の知識がなく困りました。例えば、ゲーム開発特有の知識として「ユーザーデータ」や「マスターデータ」という概念があります。

ユーザーデータマスターデータは、サーバーがDBで扱うデータを2つに大別したものです。
ユーザーデータとはその名の通りユーザーごとに個別に保存するデータで、ユーザーのランクやクエストの進捗情報などがこれに当たります。サーバーではクライアントから渡ってきたゲームの結果などを元にユーザーデータを更新したり、クライアントの要求に応じてユーザーデータを返したりします。
対して、マスターデータというのは全てのユーザーにとって共通のゲームの設定のことです。例えば敵の強さのパラメータ、ステージの番号や名前などです。これはゲームのレベルをデザインするために細かく設定する必要があり、ゲームの面白さを決める非常に重要なデータです。 マスターデータは更新が少なく、ほとんどがデータの取得になるため、クライアントとサーバーはそれぞれがメモリ上に展開して使います。したがって、クライアントとサーバーの間ではマスターデータのやり取りは行いません
 
こういった前提知識は仕事を進める上で必須の知識ではあるものの、必要な知識がいくつもあるため、先輩に何度も質問しながら慣れていく必要がありました。

2. ゲーム特有の職種や役職がわからない

ゲーム会社には様々な職種の方が働いています。
プランナー、デザイナー、サウンドクリエイター、クライアントエンジニア、サーバーサイドエンジニア、プロジェクトマネージャー、QAなどです。QAという職種は入社して初めて聞きました。実際に何度か一緒に仕事をさせていただくと、仕事内容やその重要性が理解できるのですが、しばらくはQuality Assuranceだから品質を保証するんだろうな、ぐらいのふんわりした理解でした。
 
職種の中でもさらに分かれています。例えばデザイナーと一言で言っても、UIデザインやキャラクターデザイン、背景デザイン、3Dモデルのデザインなど、具体的な仕事や専門性は多岐に渡ります。

さらに職種に加えて、ゲーム会社には固有の役職があります。
プロデューサーやディレクター、開発ディレクターなどです。それぞれの役職の関係や責任を持つ範囲などを理解するのに苦労しました。職種や役職を知らないと、何か困った時に誰に聞けばいいのかわからない、誰に依頼すればいいのかわからないという状態になります。入社時は常に何かに困っているのがデフォルトなので頑張って覚えました。

3. 単純に技術力不足

私は大学が特に情報系というわけではなく、開発経験自体もRuby on Railsを使ったWebアプリ開発のインターンを4ヶ月ほどやった程度でした。現在のプロジェクトで使っている言語はGolangで、その言語やアーキテクチャはWebのフレームワークとは全く異なるので、一から勉強という感じでスタートしました。

以上のように、配属時はゲーム開発の知識も技術力もないという状態でした。配属前からわかっていたことなので辛いということはありませんでしたが、何か自分の貢献できる部分を見つけなくてはいけないという焦りは常にありました。

コミュニケーションだけは完璧にしようと意識した

ゲーム開発では、1つの機能を開発するのにいくつもステップがあり、その多くでコミュニケーションが発生します。知識や技術力に関しては一朝一夕でどうにかなるものではありませんが、コミュニケーションは意識次第でできるものなので、それだけは完璧にしようと思って開発に臨みました。

具体的な開発フローは以下のようになります。

当たり前と言えば当たり前ですが、1人で完結できるのは設計、ロジック実装、動作確認のみです。そのほか全てのステップで誰かしらとのコミュニケーションが必要となります。これらのステップでコミュニケーションが遅れたり漏れたりすると、開発遅延が発生します。1つの機能を開発するだけならまだいいのですが、実際には複数の機能開発が同時に進行することもあるので大変です。

忙しい時期には、3〜4つの機能を同時に開発することもありました。その分上記のフローが並行して走ることになります。そのため、クライアントの手が止まらないように、実装を担当するクライアントの方に対してはもちろん、クライアントのリーダーの方に次の機能の着手予定日やスケジュール感をヒアリングし、自分の作業の優先度を決定しました。

これによって、完全とは言えませんがサーバーがボトルネックになることは最小限に抑えられ、全ての機能を開発締め日に間に合わせることができました。

しっかり迷惑はかけた、その度に助けてもらえた

複数の開発タスクを同時並行でやっていると、頭の切り替えができなくなってきます。単純にマルチタスクが苦手なのもあると思いますが、開発のスケジュールに追われていると焦って変なことをたくさんします。例えば、動作確認が不十分な状態でクライアントの方に渡してしまってクライアントの方が疎通確認した時にバグを発生させてしまう、誤って違う機能のブランチをマージしてしまう、他の人のコミットを誤ってリバートしているのに気づかずそのブランチをマージしてしまう…など挙げればキリがありません。怖いですね。

その度にトレーナーの方に泣きついて助けていただきました。トレーナーの方とは毎日仕事の進め方について相談しているのですが、それとは別に週次で面談の時間を設けていただき振り返りをしました。そこで、その週僕が起こした問題とその再発防止策を一緒に考えていただきました。もちろん問題を意図的に起こそうとしているわけではないのですが、トレーナーの方がいるという安心感のおかげで、初めてのタスクでも臆することなくチャレンジできたので大変感謝しています。そのおかげもあって、今ではゲーム機能開発は任せられるという一定の評価をいただけていると思います。

まとめ

半年間働いてみて、人のモチベーションを大切にする会社なんだと実感しました。高いモチベーションを維持できるような目標を設定したり、タスクを用意し続けることは並大抵のことではできません。会社全体で努力をし続けるからこそ、人が成長し続けられる環境があるんだと思います。

新卒ということで、私は半年間その恩恵をフルに受け続けてこられたわけですが、いつか自分も与えられる側になれるように日々精進していきたいと思います。

関連記事一覧

  1. この記事へのコメントはありません。

てっくぼっと!をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む