初めまして、20卒サーバサイドエンジニアの田中貴彦です。
昨年4月に入社して、気が付けばあっという間に2年目に差し掛かろうとしています。
そんなわけで今回は、1年目に自分が10ANTZでどんなことを学んだのかを書いていきたいと思います。
目次
自己紹介
入社する前は、4年制のIT系専門学校で学生をしていました。
ハッカソンやコンテストを通じて様々なサービスを作る過程でサーバサイドの技術に興味が湧き独学で勉強をしていましたが、独学の限界を感じたためSNSのアプリを開発している会社にてインターンをしていました。
学んだこと
研修・座学
コロナの影響もあって全ての研修がリモートでした。
研修内容は職種によって違う部分もあれば、共通の研修もありました。
エンジニアだけの研修であれば以下のものがありました。
- ITの基礎
- アルゴリズム
- セキュリティ
- フロントエンド(html, css, js)
- サーバサイド (linux, php, セキュリティ, サーバ負荷)
特に頑張ったのはアルゴリズムの研修で、以下のアルゴリズムを勉強をしました。
- behavior Tree
- A*アルゴリズム
- 数独アルゴリズム
A*アルゴリズムは視覚的にアルゴリズムがどうやって動作しているのか、わかりやすかったので少し紹介します。
A*アルゴリズムとは、探索アルゴリズムの一種です。
経路をノードで表現して、スタートノード(開始地点)からゴールノード(目標地点)までの経路を計算し、経路が最短であることを保証するアルゴリズムとなります。
※ gifは、 https://github.com/qiao/PathFinding.js から引用
A*アルゴリズムにはコストという概念があります。
単純に「コスト」=「距離」と置き換えて考えると、迷路が一様の場合はコストの一番小さな経路が最短経路といえます。つまり、コストが小さくなるような経路を探していくと、最短経路が見つけられます。
処理の流れは以下を順番に処理して、ゴール地点にたどり着くまで 3 を実行し続けます。
- ゴールのノードを設定
- スタート地点から周囲のノードのコストを調べる
- より良いコストを探していく
使用用途としては、ゲームやナビゲーションに用いられることが多いようです。
Web業界とソシャゲ業界の違い
ここでは学生時代からずっとWebアプリを制作していた自分が、業務を通してソシャゲの制作に初めて触れた時に感じたことをお話できればなと思います。
①マスタデータ
ゲームは1画面で使用される情報量がwebとは違いかなり多いです。
APIを通して都度、サーバからフロントへ値を受け渡すのはとても現実的ではありません。その為、クライアント側(スマホ)にもゲームのマスタデータを設置して参照しています。
こうすることで、ユーザデータの変更が無い処理はクライアント側だけで完結させることが出来ます。
カードやキャラクターなどに1つ1つ複雑なパラメータを持ってるソシャゲ業界ならではなのかなと感じました。
②ロジックの複雑さ
これは①の話と少し近いのですが、参照するマスタデータが多いためにService層やロジッククラスのコード量が多くなる傾向があるなと感じています。
あまり詳しくは書きませんが例えば、ガチャを引くというAPIを作成する場合、以下のマスタデータへの参照が最低限必要になってきます。
- ガチャのタイプや開催状況を確認するデータ
- 対象のガチャタイプの消費通貨数やチケット数を管理しているデータ
- ガチャ報酬のタイプを管理しているデータ
- ガチャ報酬のレアリティや抽選確率を管理しているデータ
- ガチャ報酬のデータ
それに加えて、ユーザデータを取得&挿入するコードも必要でしょう。
こうなってくると設計をきちんと行っていない場合、仕様追加や変更時そのコードに触れる場合、かなり注意しなければいけない状況になります。
ゲームの仕様追加や変更時にバグが起きるのはこれらが要因となってることが多いのかなと感じました。
③施策の多さ
これは売り上げを向上させるアプローチの違いからくるものかなと思いますが、10ANTZのゲームは毎日何かしらのイベントやキャンペーンが行われています。
その為、アプリやリソースの更新頻度がWebのアプリとは違い多いなと感じました。
今後の目標
インフラやセキュリティの勉強をしていきたいと思っています。
学生時代からコードを書くのが好きだったこともあり、そっち方面のことしかきちんと勉強してこなかったので、今後はAWS/GCP周りの勉強も頑張っていこうと思います。