こんにちは!むらってぃー(@canon1ky)です。
エンジニアとして業界の一つであるソーシャルゲーム開発。

実際ゲーム開発のエンジニアってどうなの?どんなところが大変なんだろ…
このように疑問を抱えている方も多いのではないでしょうか。
ソーシャルゲーム開発では、スピード感や熱を持ったユーザーの多さから、障害やお問い合わせなどの様々な大変なことがありますが、その分エンジニアとして得られる知見やスキルが非常に大きいです。
今回は、僕が新卒時代からソーシャルゲーム業界でサーバーサイドエンジニアをやった中で、大変だったこと、得られた知識やスキルを書きたいと思います。
この記事を読めばソーシャルゲーム業界でエンジニアとして働く中で、どんなことが大変なのかや、どんな知識がつけられるのかがわかります。
大変だったこと
実装量・コード量がとにかく多い
プロダクトにおける実装量や、コードの記述量の多さはゲーム開発界隈ではあるあるなのではないでしょうか。
ソーシャルゲームのバックエンドではPHPが使われることが多いですが、とにかく機能の豊富さからAPIの数やコードの実装量が多いんです。
アイテムを使用する度に、その効果を反映させるための通信が走ったり、バトルを終了する度にその結果を反映させる通信が走ったり。
アイテムを使用する機能だけでも、アイテムによって効果が違ったりするのでその分岐の処理を書いたりなど、とにかく実装量が….
また、定期的にイベントを開催したりもするので、新規イベントの度に追加機能の実装を行なったりなどもします。
平気でデータベースのテーブルが100個以上ある
ソーシャルゲームでは
- アイテムデータ、勝負の戦績データ、フレンドなどの各ユーザーに対するデータ
- ギルドの人員データ、経験値データ、チャットなどのチームのデータ
- ショップ、ステージ、ストーリーなどのマスターデータ
などの様々なデータを管理します。
管理するデータが非常に多く、データベースでは平気で100個くらいのテーブルを使います。
そのため、データ不整合などのバグが発生した際にはこれらの非常に大量のデータを分析して、原因解明などを行います。
とにかく管理するデータが多く、この辺は個人的にかなり大変なポイントでした…
お問い合わせ対応が多い
ソーシャルゲームを遊んでいるユーザーの中にはヘビーユーザーが何人もいます。
熱を持って遊んでくれているため、バグや不満点があった際には速攻でお問い合わせが来ます。
お問い合わせの内容としては例えば下記のもの。
「ログインできない」
「画面遷移しようとしたら画面が真っ暗になった」
ユーザーがいる上でゲームの収益は成り立つので、これらのお問い合わせには極力最優先で取り組む形になります。
1日1回くらいだったら良いのですが、1日最低6回とかそこそこの頻度でお問い合わせが来ます。
酷い時には1日50件くらい来たりもしてました。
「そもそもバグが生まれないコードを書けば良いじゃん」という話にもなりますが、大量のデータが絡んでいる以上、全くバグが発生しない実装をすることはほぼ不可能なのです。
そのため、例外のケースを最大限に予測してそれに備えた実装をするというのが非常に重要でした。
ちなみにお問い合わせの対応としては、データベース内の不整合が起きている部分の調査や、バグが起きている部分を探す作業がメインになります。
学んだこと
実装力やエンジニアとしての底力が爆増する
新規機能やイベントを実装する際、プランナーと話し合って要件を決め、数日~数週間の期間で実装に落とし込んでいきます。
要件定義から詳細設計、実装までを一貫して全て行います。
データベース設計やAPI設計からコーディングに落とし込むところを行えるので、とにかくシステムの設計力と実装力がつきます。
また、前節の「コード量がとにかく多い」ということから、コードを正確に書くスピードがめちゃめちゃ速くなります…笑
ゲーム業界を経験した後に、BtoBなどのサービスに移ると、「こんなに簡単なの?」ってくらい一瞬で実装できたりします。
PythonやPHPなどの簡単に開発できるモダンな言語がある現在、「機能を実装に落とし込めることは当たり前」であるため「正確に素早く実装できる」スキルはエンジニアとして非常に大きな価値になります。
コードだけでなくデータベース周りやインフラの知識がつく
前節の「100個以上のテーブルがある」の話からも、データを扱う処理が非常に多いことがわかるかと思います。
とにかくデータ処理が当たり前の世界なんです。
そのため、SQLでクエリを叩いてデータ分析を行うなどのことは日常茶飯事ですし、扱うテーブルも新規機能ごとに増えたりするのでデータベースの更新作業なども行ったりもします。
結合したテーブルにさらに他のテーブルと結合したりとか、そのテーブルをグループ集計して云々などの複雑なクエリなども。
SQLやDBを扱う基本から応用までの幅広い知識がつきます。
そしてこれらの大量のデータを扱ったり、大量のアクセスを処理するソーシャルゲーム開発のサーバーサイドでは、パフォーマンスの高さが非常に重要です。
いかにして大量に存在するデータを素早く処理したり、アクセスに対するレスポンスを早めたりなど。
これらに対してキャッシュを使った処理の高速化や、負荷分散の設計、データベースのインデックス設計など、様々な対策が求められます。
そのためインフラの知識や設計力、データベースの応用などの知識がめちゃめちゃついてきます。
これらはWebアプリを作る上でも、コスト削減や軽量なサイトを作る上で非常に生きてくるんです。
コードを読む力・リーダブルなコードを書くスキルが付く
コードの量が多いことや、前述の「お問い合わせ対応が多い」の話から分かる通り、実装されているコードを大量に読むことは日常茶飯事です。
過去の自分だけでなく、他のメンバーが書いたコードでも実装量が多かったりするので、とにかくコードを読んで頭の中でロジックを追うスピードが早くなります。
また、そんな中で他のメンバーや未来の自分が読んだ時に、ロジックを頭に落とすまでに時間がかかるコードを書いてしまっては、新規実装にもバグ修正にも時間がものすごくかかって破綻してしまいます。
ですので、リーダブルなコードを書くことが必須なのです。
これはゲーム開発に関わらずソフトウェア開発に関わる全ての状況において必要なことですが、実装量が多いゲーム開発で私がとにかく実感したことです。
他人が読んだ時に読みやすいコードをかけることは、独学で勉強してすぐに出来るようなことではない上に、開発のどの業界に行っても通じるスキルなので非常に価値が大きいです。
エンジニアなら1度はゲーム開発を経験してほしい
今回の記事で述べたように、ソーシャルゲーム開発ではスピード感が早い上に、実装や運営を行う中で大変なことが多いです。
しかし、それらのことから学べる知識や習得できるスキルは非常に価値が大きなものであり、他分野では学べないことが詰まっています。
そのためエンジニアで生きていくのであれば、一度はゲーム開発を経験することはキャリアを形成する上で大きなメリットになるかと思います。
もしゲーム業界に興味がある場合は、Tech Starts Agentという転職サービスを利用することをおすすめします。
Tech Starts AgentはIT業界の中でも、Web・ゲーム業界に特化した転職エージェントであるため、豊富なゲーム開発会社の中から、コンサルタントを受けながら転職先を探すことができます。
登録が1分で済むというメリットがあることから、非常に簡単に企業を探し始められますので、少しでも気になった方は目を運んでみることをおすすめします。
ゲーム業界を考えている方は参考にしてください!