Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

Akatsuki Hackers Labは株式会社アカツキが運営しています。

アカツキゲームスのクライアントサイドのサマーインターンに参加してきました

初めまして、2021年7月26日から2021年8月13日までの約3週間、株式会社アカツキゲームス(以後アカツキゲームス)でインターンをさせて頂いた叶と申します。この記事ではインターンで取り組んだ内容や感想について報告します。

自己紹介

情報系の修士1年生です。アカツキゲームスでのインターンは元々『八月のシンデレラナイン』(以後ハチナイ)を遊んでいた関係で興味があり、この度参加したいと思いました。そのためインターンでハチナイの開発に携わることができると聞いたときはとても嬉しかったです。ちなみにハチナイはアニメが放映されていたときにハマり、そこからのんびりと楽しませていただいています。

取り組んだこと

練習でキズナレベルを表示させるようにする

ハチナイでは練習という機能で選手のレベルや才能、スキルを向上させることができます。また練習ではペア設定を行うことで選手のキズナレベルを上げることができ、このキズナレベルを上げることで練習の効率上昇や専用エピソードの開放を行うことができます。しかし、既存の練習機能では練習効率を上げるためにキズナレベルが高い選手をペアにしたい、あるいは専用エピソードを開放するためにキズナレベルが低い選手をペアにしたいと思ったときに選手のキズナレベルが分からないという問題点がありました。そこでインターンの最初の週では練習でキズナレベルを表示させる機能の実装に取り組みました。

実はタスクを貰った時点では詳しい仕様やデザインが定まっていなかったため、デザイナーさんやプランナーさんの方と会議をして仕様を決めるところから始まりました。会議の結果、

  • 自動選択でも表示は行う(ただしキズナレベル表示の画像を使用)
  • マニュアル選択時はペア設定の下側にキズナレベルを表示

することになりました。 キズナレベルを表示するだけであればそれほど難しくないように見えますが、1つだけ気をつけなければいけないことがありました。それはサーバーとの通信です。練習のペア設定の画面を開くたびにサーバーへのリクエストを送るのはとても非効率的なので、出来るだけリクエストしないような実装を心がける必要がありました。メンターの方の力を借りながら注意深くコードを読み解いた結果、キズナレベルを取得するAPIはマイページで呼ばれていることが分かり、練習のシーンに到達するためには必ずマイページを1度経由している必要があるため、キズナレベルの情報を既にローカルで持っていることが分かりました。この調査結果から不必要なリクエストをサーバーに飛ばすことなく、キズナレベルを表示する機能を実装することができました。

キズナレベルの表示機能 (開発中の様子)
※画面は開発中のものであり、実際の仕様とは異なる場合があります

音楽鑑賞のマイリスト機能

インターンの2-3週目は主に音楽鑑賞のマイリスト機能の実装に取り組みました。このタスクは実はインターンの初日に自分が提案した機能の中の一つであり、結果的に自分が欲しいと思った機能をインターンで開発することになりました。背景として自分はハチナイの音楽が好きで音楽鑑賞を利用することがあるのですが、

  • 音楽一覧から気になったBGMを探すのが大変
  • 自分が好きなBGMをマイページや編成で流すことができない

という不満を持っていました。また不満の原因は

  • BGMが一つのリストに全て入ってしまっている
  • ユーザーが個別のシーンのBGMを設定することができない

と感じたため次のような改善案を提案しました。

  • 歌、BGMといった新たにタブを作ってジャンル分け
  • ユーザさんによる曲のプレイリスト作成
  • マイページやチーム編成時に流れるBGMをユーザーが設定できる機能

メンターやディレクターの方と相談した結果、2番目のプレイリストを作る機能が採用され、それに伴い音楽鑑賞の再生周りの機能を大幅にパワーアップさせることになりました。 こちらのタスクも細かい仕様やデザインについては決まっていなかったため、会議をして仕様を策定するところから始まりました。 ミーティングの結果、大まかに次のような機能を実装することが決まりました。

  1. 一通りの再生機能(再生/一時停止/次の曲へ/前の曲へボタン)
  2. マイリストタブの追加
  3. 再生設定の追加(連続再生/リスト内リピート/一曲リピート)
  4. 曲の入れ替え機能
  5. Undo機能(マイリストタブでお気に入りを削除したときの救済策)

これらの機能のうち1番大変だったのが4番目の曲の入れ替え機能でした。背景としてハチナイのスクロールリストはオブジェクトプールと呼ばれる手法を用いて実装されています。オブジェクトプールとはオブジェクトの大量生成/破棄を行わずに必要な分だけのオブジェクトを生成して使い回すという手法です。この手法を利用することメモリの消費量の節約や処理負荷の低減を行うことができます。入れ替え機能自体はグローバルメニューのカスタマイズにも似た機能があるのですが、スクロールリスト内でのアイテムの入れ替えは前例がない機能だったため、とてもやりがいがある課題でした。 他にも戻るボタンを押して2秒以内なら前の曲、そうでなければBGMの先頭から再生するといった細かな機能も仕様には含まれていて、とにかく実装する量が多かったことも苦労した点でした。

インターン中はまずはプロトタイプを作ることに専念し、再生やお気に入りボタンなどを適当なボタンに置き換えて開発を進めました。結果としてプロトタイプまででインターンの期間が終了してしまい、本実装を行うことまではできなかったものの、一通りの機能をプロトタイプ上で実装することができました。

音楽鑑賞のマイリスト機能 (開発中の様子)
※画面は開発中のものであり、実際の仕様とは異なる場合があります

感想

ハチナイの開発に携わることができ、かつ技術的にも沢山のことを学べたインターンでした。またインターンを通してアカツキはやりたいことがあればいくらでも挑戦できる環境だと感じました。実際に入社したばかりにも関わらず、小さなプロジェクトのリーダーとして活躍されている方もいるというお話を聞いて、野心家にとってどんどん挑戦して成長できる環境が与えられていると感じました。

3週間本当にありがとうございました!