こんにちは! 2021/8/10〜2021/8/27の3週間にわたってアカツキゲームスのサマーインターンに参加させていただきました、細谷と申します。
今回のインターンで取り組んだことや学んだことについてまとめます。
自己紹介
東北大学大学院 情報科学研究科に在学中の修士1年です。研究ではコンピュータビジョンや機械学習を扱っており、趣味でWebフロントエンド・バックエンドを幅広く触っています。
よく書く言語はTypeScript、Python、Golangで、最近は新規Webサービスの開発をしている関係でソフトウェア設計などの学習をしています。
インターンで取り組んだこと
今回私は、『八月のシンデレラナイン』(以後ハチナイ)というゲームの開発チームにサーバーサイドエンジニアとして参加しました。
ハチナイのサーバーサイドは主にRuby on Railsを用いて開発されています。私はRailsでの開発経験がなく、ある程度の予習が必要とされました。そのため、経験があり言語として近い性質を持つPythonとの共通点を捉えつつ、ActiveRecordなどのRails特有の知識を一通り学習してからインターンに臨みました。
APIの高速化
最初に取り組んだのは、「購買部」内にあるアイテム変換機能に関するタスクでした。ここではナインスターや各種変換コインを用いてアイテムを入手することができますが、その際に発生する「現在販売中のアイテム」を取得する処理が重く、アイテム変換への画面遷移が少し遅いという問題がありました。
この処理は具体的には、「どのアイテムを用いて交換できるか(カテゴリ)」という情報と、「各アイテムを何と交換できるか」という情報を取得する2種類のAPIが用いられています。そのため、N個のカテゴリ全てに対してそれぞれで交換できるアイテムを取得すると、全体ではN+1回のAPI呼び出しが行われることになり、無駄が多い状態になってしまっていました。
設計としてはいわゆるRESTfulなAPIでしたが、これらで取得できる情報を1つにまとめることで端末とのやりとりやデータベースへのアクセス回数が減り処理が高速になると考えられます。そこで、既存のAPIとは別に、「アイテム交換で現在販売中のアイテム」全てを取得できるAPIを作成しました。
改善の結果
呼び出す必要のあるAPIを1つにまとめた結果、負荷試験環境において約3.5倍の処理高速化に成功しました。この改善によって、アイテム変換機能への遷移が高速になることが期待されます。
スキルの入れ替えに関する新規機能開発
2021年8月現在の仕様では、各選手ごとに習得できるスキルの個数に上限があり、別のスキルを習得したい場合は既存のスキルのどれかと入れ替えるようになっています。この際、付け替えによって外したスキルを再度習得させたいときに、新しく習得する場合と同様にアイテムを消費する必要があります。これは特に、UR選手で投手と野手を切り替えたい際に不便を強いる形となっています。
そこで、「過去に習得したことのあるスキルを任意に入れ替えることができる」ようにスキルの習得に関する仕様の変更が提案されていました。この実装として、選手のスキルごとに「過去に習得したことがあるか」を新たに保存するようにし、したことがあればアイテム消費なしでスキルを入れ替えることができるようにしました。
チーム内でのやりとり
このタスクは同時期にクライアントサイドのインターンで参加していた方と協力して実装しました。また、仕様の変更に関わる部分であったため、詳細な仕様を確認するためプランナーの方ともやりとりを繰り返しました。結果としては、選手育成の画面にてスキルを入れ替える機能を実装し、クライアントサイドとの結合テストまで行うことができました。
インターン期間内で得られたこと
運営中のゲームタイトルの開発に携わる、ということ
実際にチームのエンジニアの一員として、ハチナイの開発に携われたのは非常に貴重な体験だったと思います。ゲームの体験を壊さないためにも、既存機能の改修には特に慎重になる必要があり、そのような考慮はこれまでの個人開発では得られなかったことだと思います。また、プランナーの方やクライアントエンジニアの方とのやりとりの間で認識の齟齬が生まれないようにうまく言語化することも開発を進める中で得られたことでした。
チームの一員として動く
開発に携わる間にメンバー、一人一人に信頼が置かれているのとともに、チームやプロダクトのために責任感を持って動いているのだと感じる機会が多かったです。
3週間という短い間でしたが、手厚いサポートに支えられ、成長できる機会をたくさんいただくことができました。ありがとうございました。