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

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

アカツキのサマーインターンに参加したお話

こんにちは。 7/5〜7/27までの3週間、アカツキのサマーインターンに参加させていただきました、あおやまと申します。 このインターンでは、「八月のシンデレラナイン」のサーバーサイドの機能改修・運用改善などの業務に携わりました。

ここでは、このインターンで取り組んだこと、学んだことについてまとめていこうと思います。

はじめに

自己紹介

通信制の大学に通う学部3年生です。 大学ではCS系のことを学んでいます。 普段はWebの開発をしており、インターン参加前はサーバーサイドというよりはフロントエンドよりのことをやっていました。

スペック

Ruby/Ruby on Railsは3週間ほどしか経験がなく、超基本的なことしか理解していない状態でした。(普段はPHPやTypeScriptを書いています)
自己紹介でも書きましたが、普段はWebの開発ばかりやっているので、ゲーム開発は初めてでした。

インターンで取り組んだこと

新規機能開発(断念)

雑談で上がっていた新規機能が面白そうだったので、ディレクターさんやプランナーさんにその機能を開発したいと相談しました。 その話し合いの中で、その機能を作る目的について聞かれました。 しかしながら、私はユーザーに対する目的しか浮かびませんでした。そこで、他にどのような目的が考えられるかを尋ねたところ以下のような回答をいただきました。

  • 実装に関するコスパが他のタスクを比較して良い(実装工数・検証工数が小さい)
  • キャンペーン・マーケティングに使える(実装タイミングでお祭り感を出せる)
  • 使える工数がある(そもそも手が空いてるのでなんかしたい)
  • チームの育成に役立つ(難易度が適切なので、チームの練度向上に使える)

「ほぇ〜〜」
実装に対するコスパ、マーケティング、チームの育成など今まで考えたことがないばかりだったのでとても学びになりました。

これを元にプランナーさんと話し合いをした結果、現状はこの機能は現実的ではないということで断念しました。

作戦変更

上記の新規機能開発は早い段階で断念する決断ができたため、その後は作戦を変更することにしました。

その作戦名は、

運用改善タスクを数こなしてみんなに感謝されよう作戦

です。 私が配属されたチームでは、手のつけられていない運用改善タスクが山ほどありました。そこで、それらを1つずつ片付けていきました。
運用改善タスクは、仕様が決まっているものもあれば、あやふやなものもありました。仕様があやふやな場合は依頼者に、「なぜこの機能が必要か」「この機能で検証したい部分はどこか」などの聞き込みが必要でした。そのような聞き込みをするのが初めてだったので、最初は何を聞いたら良いか分かりませんでしたが、複数タスクをこなすうちに、依頼者はどのような機能が欲しいかなどを感じたり、うまく聞き込みをしたりすることができるようになりました。(成長!)
結果、サーバーサイドの運用改善タスクはほぼやり切ることができ、数としては6つこなすことができました。

まとめ

良かった点

新規機能開発の一部を体験できたこと
断念してしまいましたが、話し合いを通じてたくさんの学びがありました。

運用改善でチームに貢献できたこと
運用改善チームの方から感謝されました^^

ゲームのサーバーサイドの中身を知ることができた
機能改修タスクや一部の運用改善タスクはゲームのロジックの理解が必要だったので、そこを理解しレビュアーとしっかり議論することができました。

エンジニアとして技術以外のことをたくさん学ぶことができた
ただ作るだけでなくなぜ作るかやどう作るかという考えや、エンジニア以外の方とのコミュニケーションなど個人では体験できないことを実際に体験し、そこからたくさんのことを学ぶことができた。

自走力が成長した
いい意味でメンターさんが私を放置してくれたので、自分からエンジニアやディレクター、プランナーさんたちにコミュニケーションを仕掛けたりと自走する力が成長しました。

今後の展望

オーナーシップを育てる
今回のインターンでは、自分がタスクのオーナー(それについて一番詳しい)になることが多々ありました。しかし、まだまだ自分がオーナーだという自覚が足りない場面がありました。これからたくさんの経験を積んで1つのプロジェクトを見れるくらいのオーナーシップを育てていきたいと思います。

リアルタイムのゲーム開発
参加前はゲームはするのは好きだけど、自分で開発するということは考えていませんでした。しかし、自分の好きなもの(ゲーム)を開発することはとても楽しかったので、もっとゲーム開発をしたいと思うようになりました。次はリアルタイムでやりとりが行われるようなゲームの開発もしてみたいです。

最後に

参加前はフルリモートで若干不安でしたが、参加してみると毎日メンターさんが1on1を開いてくれたり、朝会・夕会があったり、定期的に社内の方とランチ会があったりととても楽しくインターンを過ごすことができました。
とても充実した3週間を過ごすことができました!!

アカツキで「ハチナイ」のサーバーサイドインターンを体験しました。

はじめまして!ハチナイのサーバーサイドエンジニアとしてインターンを体験させていただきました、堀崎と申します。7/5〜7/27の15日間お世話になりました。

今回のインターンで開発したものとそこから得た学びを書いていこうと思います。 

自己紹介

名古屋大学に通う学部3年生です。

アプリ開発サークルに所属しており、普段はWebアプリを開発しています。サーバーサイドとしてRails、フロントエンドとしてVueを主に使っています。

今回はRailsでの開発がメインでしたが、普段使っていることもあり技術に対する不安はそこまでなかったです。

やったこと

管理画面の開発

最初は簡単なタスクとして、管理画面の機能追加を行いました。管理画面はActive AdminというGemを利用して作られており、初めて触りましたがすでにあるコードを参考にして難なく実装が出来ました。

ゲーム機能の改善

管理画面のタスクを終えてコードの全容が見えてきたところで、ゲームAPIの速度改善のタスクを引き受けました。改善点が明らかになっていなかったため、まずはログの調査から始めて改善策を練ることにしました。

ログの調査結果

以下の問題が判明しました。

  • N+1問題
  • 大量のdeleteクエリ

N+1問題に対する対策としてeager_loadすることにしました。そしてdeleteクエリに関しては一括で削除するメソッドを自前で用意することになりました。

改善結果

改善前はレスポンスを返すまでに約5.5秒かかっていた処理を約1秒まで短縮することができ、約80%の速度改善に成功しました。

運用改善

最後のタスクとしてプルリク作成時にファイル名をチェックするCIを追加しました。こちらはGithub Actionsに新たにjobを追加するだけだったので比較的速くこなすことができました。

インターンを終えて

3週間という短い期間でしたが、色々なことを学ばさせていただきました。

技術的な成長

今回のインターンでは、調査タスクを多く経験させていただきました。その中で公式のドキュメントを読み込んだり、GithubのIssueを探索したりとコードを深く追っていく力を養うことができました。

また、これまでに触れたことのないGemやCI/CD関連のツールにも触れることができ、保守性の高いシステムに関しても新たに学びを得ることができました。

チーム開発におけるコミュニケーションの難しさ

このインターンで一番苦しんだのがコミュニケーションだと言ってしまっても過言ではありません。これまで小規模の開発しか経験してこなかった僕にとって、自分の思っている実装方法を人に伝えることは非常に困難に感じました。言葉足らずで自分の意思が正確に伝わらず、メンターさんを困惑させてしまうことが何度かありました。自分で改善することが難しかったコミュニケーション能力に関して、ご指導してくださったメンターさんにはとても感謝しています。まさかエンジニアインターンでコミュニケーション能力が養われるとは思ってもいませんでした。

おわりに

15日間あっという間に過ぎてしまいましたが、非常に有意義な時間を過ごすことができました。メンターさんをはじめ、たくさんのサポートを本当にありがとうございました。

アカツキ社内の雰囲気について、皆さんが楽しそうに話されている姿からアカツキという会社がより一層魅力的に見えました!

短い期間でしたが、本当にお世話になりました!

アカツキのクライアントサイドインターンに参加しました

初めまして、アカツキのクライアントサイドのインターンに参加させて頂いた植村と申します。

 

今回、7/12〜7/30の13日間、開発に参加させていただいたので、取り組んだことや思ったことについて書いていこうと思います。

 

はじめに

自己紹介をします。

私は今、早稲田大学修士1年でVRについて研究しています。

趣味はゲームをプレイすること、制作すること、それからロボットです。

将来はゲーム開発に関わる仕事を志望しており、今回はUnityエンジニアとして参加させていただきました。

 

取り組んだこと

僕が参加したのは、「八月のシンデレラナイン」(以下ハチナイ)の現場でした。

そこでメンターの方と話し合い、主に選手交流周りの改修を任せてもらえることになりました。

それぞれタスクについて書いていきます。

 

選手交流で悩み解消前のテキストを読めるようにしたい

インターンで初めて取り組んだタスクです。この悩み解消前テキストというのは、選手育成から解消してしまうとゲーム内で見る手段がなくなってしまうものでした。それに対し、選手交流における悩み解消時再生エピソードに付随させられるようにするというタスクです。

f:id:utaishi:20210730182734p:plain

まず最初に行ったのはデザイナーさんとプランナーさんとの会議です。そこで仕様を決め、実装に移りました。

実装をする中で現場で作られてきたコードに触れながら、理解を深めました。

コードの意味や実行速度について、ここまで深くやったことはなかったのでとても良い経験になりました。

 

この機能の中で特に苦労したのは、ストーリーのエピソードのIDから悩み解消前テキストをマスターデータから検索してもってくるところでした。

結果としては

エピソードのIDに一致する悩み解消時エピソードを持つシーンのスキルを検索

→そのシーンのスキルを持つ悩みを検索する

→悩みが持つテキストを取得

という流れだったのですが、マスターデータの関係が複雑で、どこにどの情報が入っているのかを理解するのに時間がかかりました。

 

ここで思ったのは、自分が欲しい情報、データがどこにあるのかをコードから予想して見つけてくる力がとても重要なんだな、ということでした。

他の人が書いたコードを読むときの考え方というものをこのインターンを通じて知ることができました。

 

その後も一度会議をして、アイコンの追加などが決まりました。

自分からは表示するダイアログのタイトルを悩み解消前のスキル名にすることを提案し、実装することになりました。

 

実装してPR→レビューの流れを何度か繰り返し、実機確認もしてなんとか終えることができました。

 

f:id:utaishi:20210730182658p:plain



最後に検証さんの方に機能の検証依頼を出して終了です。

仕様決定から検証依頼までの流れを一通り体験できてよかったと思います。

 

選手交流の詳細で、隣の選手に移動したい

次のタスクは、選手交流の各選手に遷移した時、そのまま別の選手に移動したいというものでした。

プランナーさん、デザイナーさんと会議をした結果、ボタンとスワイプで移動すること、選手の並びは選手交流トップに倣う形にすることが決まりました。 

f:id:utaishi:20210730182821p:plain

まず最初にやったのは、隣の選手へのスワイプ機能、ボタンの機能の実装です。

ハチナイにおいて、似た形のスクロール処理はいくつかあり、今回はその中からデレストのオーダー選択と選手交流トップのスクロールを参考に作ることにしました。

 

機能について理解しながら、基本となる部分は実装できました。

が、気になる問題点がいくつか見えてきました

 選手の切り替えで読み込み時に、選手とメニューが一瞬消えてから表示されるのを改善

もともと動かすことを優先してシーンが開始する時の処理を毎回呼び出していたが、必要なものだけに絞って、メニューが消えるのを阻止しました。

 

スクロール完了と共に、スクロールを中心に戻しつつ、選手を表示するGameObjectの位置を交換することで更新時、選手の読み込みを新たに増えた一人分だけにするようにしました。

これにより、選手の更新は画面外のみで起こるようになったので、選手が消える問題も解決しました。

 

隣の選手へ遷移するのに必要なスワイプの移動量の調整

もともと参考にしていたスクロール処理では隣の選手との距離の半分を超えてドラッグしていたら移動という感じだったのを、距離に対するスワイプの移動量の割合を、あらかじめ設定した閾値を超えるかどうかで判定するようにしました。調整をできるようにするとともに、閾値を大幅に下げました。

 

選手交流の円環リストに対応する

選手交流トップにおいて、本校では有原と草刈がつながる形の円環のリストとなっています。対して、コラボ選手、ライバル校は手に入れない限り人数が少ないので、その場合同じ選手が画面に並んでしまう事になります。

それを避けるため、本校以外のカテゴリーには端があります。

 

このようにカテゴリーから対応を変える処理をするためにプレイヤーが所持しているカテゴリー別の選手のリストを作る必要がありました。

選手リストはマスターデータから持ってくることになりますが、コラボとライバル校のどの選手を表示出来るかを知るには、APIを叩く必要がありました。

選手交流トップの方でこの処理をしてカテゴリー別所持選手リストは生成されている上に、選手交流詳細では選手交流トップで使うリストと同じ選手の並びを使いたいということもありました。なので、もうあるのならばそれを使わせてもらおうということで、円環リストは選手交流からシーンの遷移時に渡してもらうことにしました。

 

選手交流詳細から絆アルバムと信頼度のページに行った後、戻るボタンで戻ると正しい選手に戻らないことがある問題の改善

スワイプでの移動は関係なく、選手交流詳細のページに入った時の選手になるので、戻るボタンに選手交流詳細から来た時のみ、どの選手に帰るか指定する関数を渡しました。

円環リストを生成する中で、リストも渡さなくてはいけなくなりましたので、シーン遷移時にリストを持っていない場合、APIを叩いてリストを生成するようにしました。

 

その他にも作業する中で、確認していると、気になる点や機能の追加によって動かなくなる点をいくつか見つけました。ページのスワイプがボイスや課題メニューの時に出来てしまうことや、スワイプ後に表情がリセットされていないことを発見し、メンターの方に報告して修正を行なっていきました

 

この機能では、機能実装→レビューなどで問題点を発見→修正を多く繰り返しました。

最初はコードを見て、仕様通りになるように実装するのが精一杯といった感じでしたが、繰り返すうちにだんだん自分で問題点を見つけて、共有し、修正するということが出来る様になって成長を感じることが出来ました。

 

振り返り

インターン中に思ったことや感想について書いていきたいと思います。

 

開発が進んだ現場に入るという体験

朝会、夕会は雑談から入るのですが、毎回様々な話題で盛り上がっていて雰囲気が良いな、と思いました。その後は、共有事項などについてしっかりと話し合っていてメリハリがあるなと感じました。和気藹々としながらもやるべきことはちゃんとやって、全員がゲーム開発チームの一員だと思って仕事をしているのを見て、こういう風に働きたいなぁと思ったりしました。

 

Gitの使い方(PRの出し方やブランチの分け方など)やリポジトリの使い方など小規模開発では、意識しない所で数多くの工夫が見られ、驚きました。

他者が書いたコードを読み込むという経験をあまりしてこなかったのですが、他者のコードを読む際には、ただ漠然と理解しようとするのではなく、自分が今何を知りたくて、その情報はどこにあるのかを考えながらコードを読むことが、大事なのだと気づかされました。

 

現場の雰囲気や大規模開発のコードの読み方は、このインターンに参加しなければ得られなかった貴重な学びとなりました。

 

他の職種の方との会議

ゲーム開発においては、各職種が連携して作り上げて行くというのはもちろん知っていましたが、どのようにそれを成すのかは、あまりイメージができていませんでした。

今回インターンに参加してみて、そのことについて実感が湧きました。これも参加してみないと分からない点だと思うので実感できたのはとても良い経験になりました。

 

大きなゲームの中の機能を作る楽しさ

私のゲーム開発の経験は大体が半年後に向けて動くゲームを作るといった短いスパンのものでした。そうした場合まずは最低限動くものを目指すこととなり、小さな、完成度を高めるための開発の経験が積めていませんでした。

こういう経験を積めるのは、もう既に動き出しているプロジェクトに参加したからこそなので、知ることが出来て良かったです。

 

大きな一つのゲームの中で、自分の実装した機能が動いているという喜びは初体験でしたが、とても良いものでした。

 

反省点

もともと用意されていた課題のうち一つを達成できなかったことです。これの原因は、必要な情報がどこにあるのかを予測し、調べるのに手間取ったことと自分が今何で詰まっているのかをメンターさんに上手く共有できなかったことだと思っています。

自分で調べることはとても重要なのですが、実はちょっとしたことで詰まっているということがインターン中に結構ありました。

悩んでいることをただ書いておいて、手が空いている人が見てアドバイスをする、という場所がちゃんと用意されていたのに上手く使えていなかったなという反省点があります。

これからは作業に没頭するのではなくて考えをアウトプットするのをもっと意識して開発したいと思います。

 

まとめ

反省点はあるものの、ゲーム開発の現場についてよく知ることができ、チームで一つのゲームを作るとはどういうことかを知ることができました。

現場で使われているコードに触れたおかげで、コードを読む力、書く力共に大きく成長できたと思います。

やはりゲーム開発は楽しいです!

 

たくさんの収穫を得られた良いインターンでした、3週間受け入れてくださりありがとうございました!

【LT会】Akatsuki Geek Live 2021 開催レポート!Vol.1

みなさまこんにちは!アカツキ新卒採用担当のこさだです。

7/12(月)に、23年卒業の学生さま向けイベントの第1回目として「Akatsuki Geek Live2021 Vol.1」を開催しました!

前回は2月に開催をしたのですが、卒年が変わって今年度としては初開催!どれくらいの方にお集まりいただけるだろう・・・と不安に思っていたのですが、なんと前回を大きく上回る約90名の方にご参加いただきました〜!(888888888)

コロナ禍のため今回もオンラインでの開催です。オフィスに来ていただけないのは残念ですが、こうやって気軽にご参加いただけるのは良いところかもしれません!

当日はアカツキのメンバーだけではなく、内定者や一般の学生さんもご登壇いただき、イベント名の通り、非常にギークで濃い、技術の話が飛び交う会だったので、ご視聴いただいた方も楽しんでいただけたのではないでしょうか?

今回の投稿は、イベント当日の様子をレポートしたいと思います!
当日使用した発表資料も閲覧できるようにしていますので、少しでも雰囲気を味わっていただけると嬉しいです!

「Akatsuki Geek Live」とは?

エンジニアを志す学生さんと、アカツキエンジニアが登壇するLT会です。フリーテーマで7分間のLTを実施、その後懇親会を実施し、交流の場を設けています。楽しみながらアカツキのことを知れる場、そして学生さん同士の横のつながりも作れる場として実施しております。

 

▼イベント概要はこちらから

aktsk.connpass.com

「Historie(ヒストリエ)」と名付けられたオフィス内の図書スペースより、WEB配信の形式でお届けしました。

f:id:megumikosada:20210305123234j:plain

Historie

(こちらが会場です。詳しくはHPに掲載しています!)

 

司会は採用担当の「もりしま」と、エンジニアの「しまむら」が担当しました!しまむらさんは最早レギュラー出演で、前年度からパーソナリティーとして盛り上げていただいています。もりしまさんは今回が初出演。発表もあり、とっても緊張していたようです^^

そんなもりしまさんからのアカツキの紹介発表、アカツキのエンジニア4名、学生4名の合計9名が登壇するLT会が始まりました!

ここからは当日の発表資料も交えてご紹介します。

 

当日の様子

@もりしまさん(アカツキ/採用担当)
なるほどよくわかる!アカツキ理解のヒント 

トップバッターはエンジニアの採用を担当しているもりしまさん。
アカツキの会社説明に加えて、就活についてやインターンシップが多数行われている夏の過ごし方についての発表でした!ただ過ごすのではなく仮説検証を、というのが印象的でしたね!とっても緊張した〜と後日談で話していましたが、私には全然そんな風に見えなかった・・・!
【登壇資料】

 

▼@JPさん(アカツキ/クライアントエンジニア)
ハイパーカジュアルゲームの企画から全世界リリースまで

エンジニアのトップバッターはアカツキでクライアントエンジニアをしているJPさんです。
HCG(ハイパーカジュアルゲーム)ってなんぞや?というところから始まりましたが
「ゲームジャンル」ではなく、「ビジネスモデル」だ。という話が興味をそそる内容でした。利益を最大化するために企画、分析検証、実装を爆速で回していくので、エンジニアとして企画できると最高のものができるという熱いメッセージがとっても素敵でした〜!

【登壇資料】

 

▼@すぎやんさん(アカツキ/サーバーエンジニア)
サーバエンジニアが新卒研修でUnity使ってHCG作った話

年度違いのHCG繋がりです!すぎやんさんは2021年の4月入社。6月に研修を終えたばかりでしたので、その研修でのお話をしていただきました。先輩後輩、サーバーサイドとクライアントサイド、違った目線でのお話で面白かったですね!研修とはいえ、実際に予算をかけてリリースまで行うことで、「ものづくり」を経験していただくための研修。素敵に研修について発表していただいたので、きっと研修担当チームは喜んでいたと思います(涙)

【登壇資料】

 

▼@白狐さん(学生/アカツキ22卒内定者)
タイピングガチ勢、タイピングゲームを自作する

お次は学生から、白狐さんに発表していただきました。まずは、社会人に混じっての登壇に手を挙げてくださったことに感謝感謝です!(888888888888)
そして、自分が好きだから、作ってしまうという、その情熱に感服しました。当日は実際に公開しているゲームのURLもお伝えいただき、大いに盛り上がりました!

【登壇資料】

 

▼@たむさん(学生/アカツキ22年卒内定者)
Houdiniによるツタの動的生成

続いても内定者である学生のたむさんに発表していただきました!
連続して作りたい、だから簡単に、でもリアルにできたらいいのにな・・・という要望を叶える技術の紹介でした。「こんなこといいな、できたらいいな」からいろんな技術は生まれているんだろうな、と想像してしまいました。

【登壇資料】

 

▼@ふじさん(一般学生)
ディープラーニングで作るバッハの音楽

休憩を挟んで後半戦です。アカツキのLT会は就活サイトなどで告知をさせていただき、視聴者と登壇者を募っているのですが、いつも登壇者は現れず・・・なんと今回、一般応募からふじさんが手を挙げてくださいました!
内容も、自分が幼い頃から触れてきた「音楽」と技術を掛け合わせたもので、視聴者のみなさんからもチャットで質問や感想が飛び交っていました!
【登壇資料】

 

▼@ゆーゆーさん(アカツキ21年秋入社予定)
mXparserとInternalsVisibleToを駆使して超便利なUnityエディタ拡張を作った話

続いては、あと数ヶ月後に入社が決まっているゆーゆーさん。アカツキメンバーからもチャットで質問が飛んでいましたね!私はエンジニアではないのですが、「こうなったら便利なのになあ」と日々思うことがあって、それを「まあいいか」で終わらせるのではなく、技術の力でどうにかできるのでは?さらに、途中で壁があっても、なんとかなるのでは?と試行錯誤して実現させたゆーゆーさんの行動力や探究心、見習いたいなあ、と思いました!

【登壇資料】

 

▼@やすさん(アカツキ/サーバーエンジニア)
公衆無線LANを構築してみた話

司会のしまむらさんからもコメントがありましたが、普段何気なく使っている技術に疑問を持って、分解して作ってみるってすごく素敵な心意気だなあ。と思いました。もちろん技術はどんどん進んでいるのですが、当たり前のように受け取っていると気が付かないこともたくさんあるんだ、と改めて感じました!

【登壇資料】

 

▼@いたみんさん(アカツキ/クライアントエンジニア)
プロジェクトでの運用改善について

最後にいたみんさんより発表です。技術!という話ではなく、アカツキのクライアントエンジニアがプロジェクト内でどんなことを考えながら仕事をしているのか、実際にどんな業務をしているのか、という内部のお話を聞かせていただきました。参加いただいた学生さんは会社で働くということがどういうことなのか、イメージがかなり膨らんだのではないでしょうか?

【登壇資料】

 

 

 #最後に懇親会!(質問受付会)

今回は登壇者が多かったこともあり、中身の濃いLT会になりました!少しお疲れ気味かな・・・と心配したのですが、エンジニアの皆さん、やはり技術の話となるとそんなこともなかったようで、登壇者への質問もたくさんいただき、LT会後の懇親タイムも大いに盛り上がりました!

オンライン配信だったので、少し一方的になってしまい、意見を交わすことや、直接お話することができなかったのは残念ですが、今回のLT会が、エンジニアの皆さん、エンジニアを目指す皆さんの新たな発見や、一歩踏み出すきっかけになっていればとても嬉しいです! 

世の中に平穏が戻り、次回は直接お会いしながらギークなお話ができることを祈っています。

ではまた次回お会いしましょう〜!

アカツキのクライアントサイドインターンに参加しました!

はじめまして!アカツキのクライアントサイドのインターンに参加させて頂いた伊藤と申します。

今回5/17 〜 5/28までの十日間クライアントの機能実装に関わり、やったことやどう思ったかを書きたいと思います!

 

インターンについて

 私は以前から、アカツキが主宰するLTでの発表やハッカソンの参加などでご縁があり、今回選考の一環としてこのインターンに参加していました。

今回のインターンは完全リモートで、私は関西にいながら参加していました。対面できない、会社の風景が見られないというのはデメリットですが、全く別の場所からインターンに参加できるというのは大きなメリットと思います。

事前面談でメンターとなる方とコミュニケーションを取って参加するプロジェクトが決まり、インターン前日にMacなどの備品が郵送され初日開始という流れでインターンが始まりました。

解決した課題

私が配属されたのは「八月のシンデレラナイン」を開発しているチームで、主に新機能開発の課題に取り組むことになりました。私が担当していたものはおそらく今リリースされているハチナイには入っている機能だと思います。

私は今回、2つの機能の改善や実装を行いました。

メニューのカスタム画面の改善

この課題は私のPCのセットアップが何とか終わった初日の翌日、火曜日から始まりました。

右上の[MENU]をタップで出てくるメニュー画面内には、左上にメニュー画面そのものをカスタマイズするボタンがあります。(私は気付いていませんでした。そこそこやってたのに…)
この画面ではメニューのカスタマイズが出来るのですが、これを保存する時にフィードバックがなく、また、保存せずに戻ると変更内容が破棄されるという仕様でした。
そこで、これにフィードバックを付けよう というのが私が最初に取り組んだ課題になります。

やったこと

まずどのような仕様、デザインにするかを決めなければなりません。そのため、火曜日早々に私主宰でデザイナー/企画の方とMTGを組むことになりました。大変緊張しました。
すぐにMTGを組むつもりだったのですが、メンターの方に主催者は実装の方針をある程度固めた状態で始めた方が良いと教わり、夕方からのMTGに設定しました。
その間に私はコードを読み、おそらくオーダー編成画面が参考になるだろうと思い、MTGでここの表現(機能)を使うつもりでいますと話しました。皆さんからありがたくも賛同いただき、この方向での実装に決まりました。
決まった仕様は、変更を保存するときは[保存しました]と中心に出し、変更があるまま戻る時は確認のダイアログを表示する というものになりました。


ダイアログ表示の実装自体はそこそこ順調に進んだのですが、連続して保存するとおかしくなるケースやそもそも保存できないケースがあるなどいくつかの問題点があり、それらを解決しきったのが結局木曜日になりました。中々苦労しました。あとGitでいろいろやらかしブランチがたくさん生まれ消えて行きました。
木曜夜に修正が終わったPRを出し、一旦はこのタスクが終了しました。レビュー待ちをしている間に次の課題に取り掛かりました。

思ったこと

MTGではデザイナー/企画の方を交え、なぜここがこういう挙動なのか、ここはどうして行くべきかといった話ができたのがとても面白かったです。例えば、既存の保存ボタンは殆どのユーザーさん達が頻繁に押すボタンではないだろうから同時に閉じた方が操作の手間が減るだったり、これからの実装でオーダー編成画面を参考にするのであればその挙動に合わせた方が良いだったり、そういった仕様の部分からのお話ができるとは思っていなかったので嬉しかったです。
そして、仕様通りに作ることの難しさも感じました。単に実装すると仕様と異なる挙動をする〜みたいなケースが結構起こり、なかなか思った通りの操作をさせるのが難しいなと思いました。

キズナレベルアップ演出の改善

私が取り組んだもう一つの課題は、キズナレベルアップの演出をよりリッチでかわいいものに変更する というものでした。
既存のキズナレベルアップ演出は左右からキャラクターの立ち絵が出てきてレベルアップの表示が行われるというものでしたが、それをSDキャラがカットインアニメーションをした後ハイタッチしてレベルアップの表示が行われるというアニメーションに変える というものです。
アニメーションはデザイナーの方が作って頂いていたのですが、最初のMTGでアニメーションを見た時めっちゃ可愛いですねーという話をしたのを覚えています。非常に可愛いアニメーションです。

やったこと

まずは1つ目の課題と同様、MTGを設定しデザイナーの方と課題を確認しました。今回はアニメーションの変更だけなので企画の方はいませんでした。
その後デザイナーの方からデータをいただき、それをキズナレベルアップ時にちゃんと再生されるように実装を進めました。
この時は既存コードがどのように練習しているキャラクターのデータを流しているのかを追い、その流れに乗せてアニメーションが再生されるように実装しました。

アニメーションを動かす実装をしている間に、スキップ機能が必要ではないかという話になりました。これを実装し始めた時点ではスキップは考えていなかったのですが、アニメーション全体が長くなったため、画面タップで適切なタイミングまでアニメーションを飛ばせないとユーザーさん達の待ち時間が長くなってしまうという問題がありました。そこでデザイナー/企画の方とコミュニケーションをとり、必要そうだという結論に至ったのでこの機能を追加で実装することになりました。

スキップ機能はやりたいこととしては単純で、画面上をタップされたらアニメーションを特定の地点に飛ばす といったものです。しかし、これを綺麗に実装するのは中々大変で、デザイナーの方と何度もお話をしながらアニメーションデータそのものの変更もしてもらい、その上で実装を進めました。
水曜日にこの機能の実装が何とか終わり、PRを出してレビューしてもらいました。

そして木曜日にはレビューが返ってきたのですが、アニメーション遷移のより良い方法があること、スキップするためのボタンの配置の場所があまり良くなかったこと、そしてアニメーション終了の処理にUniRxが使えるということを教えて頂きました。
UniRxは私がインターン中に学びたいことの1つとして挙げていて、それを学べる機会をここで作って頂けました。なのでこの日一日はUniRxのことを調べ、コード内に使われている部分を参考にしつつ実装を進めました。
何とか木曜の夜に実装が終わり、完全な形のPRを出し切り、私のこの十日間のインターンでの実装が終了しました。

思ったこと

適切な粒度でのコミュニケーションの難しさというのをすごく感じました。この課題では1つ目のものより多くのコミュニケーションを取ったのですが、私が十分に伝えきれなかったり解釈を間違えたりで手戻りをさせてしまうことがありました。みんな自分の考えや思いを持っているので、それを適切に表現できる、汲み取る力の重要さを感じました。
ボタン関連の処理やアニメーションを扱うにあたり、UniRxは非常に使いやすいと思いました。学んでいる最中では同じ意味の処理を無駄に長いコードで書いてしまったりしていましたが、それも含めて非常に良い経験をさせてもらったと思っています。

業務を通じて学んだこと

チームでの開発がどのように進んでいくのか

今回得られた知見の中で最も大きなものがこれだと思っています。
クライアントエンジニアは機能開発を行う時どのようにデザイナー/プランナーの方とコミュニケーションをとり、どのように業務を進めていくのか。私は特に企画やデザインとも多く関われる方が好きなので、アカツキでは実際そういう風に開発が進んでいくというのを感じられたのは非常によかったと思っています。

UniRx

技術的な知識として、私が前々から付けたいと思っていたものがこのUniRxでした。今回のインターンではほぼ1日かけてUniRxについて調べ、実際の業務レベルのコードも読めるといった非常に良い環境で学ばせてもらい、知識がとても深まりました。
これまでは正直ほぼ使えないぐらいの知識しかなかったのですが、今回で多少使えるようになったと思っています。

Git (Github)

集団開発においては必須のツールですが、これまでは趣味での開発や個人開発がほとんどだったのでまともなレベルで使っていませんでした。しかし今回のインターンでは1つ目の課題からGitを(当然ですが)使うことになり、分からないことが多いながらもとても勉強になりました。
ただもう少しGitの基本的な使い方に慣れておくべきだったなぁという後悔もあります。少なくとも今回インターンで使った機能は忘れず、使っていこうと思います。

直接の業務以外のこと

課題解決の実装を主にやっていましたが、ランチで先輩社員とお話したり1on1を毎日設けてもらったりとかなり充実したインターンを設定して頂けました。

ランチ

基本的には私がこんな人に会いたい!と事前にリクエストして、それにマッチした方とお話しする という流れでした。LTで既に面識のある先輩社員の方に助けてもらったおかげで、私は十日間のインターンにも関わらずランチが5回もあり、ものすごくいろんなことを伺うことができました。どのランチでのお話も面白く、いろいろなことを知れました。

1on1

メンターの方と毎日朝夕2回の1on1を設定して頂きました。これのおかげで自分が今日何をやるのか、何ができたのかがより明確になりとても業務が進めやすかったです。

朝会夕会

私が所属していたチームは朝会と夕会があり、毎日アイスブレイクということで誰かが適当なトピックを5分ぐらい話すという場がありました。チーム自体の雰囲気が非常に良いというのが伝わってきましたし、話も毎日別のトピックで面白かったです。もちろんアイスブレイク後には共有するべきことも話していました。

アップデート

私がいる間にハチナイのアプデがあり、中でどういったことが起こっているのか、運用チームやサーバー側はどんなことをしているのを横から眺めることができました。空き時間にこういうことをやっているという説明もして頂き、(横から見ているだけの私は)とても楽しかったです。実際担当するとヒヤヒヤするだろうなぁと思います。

コードリーディング

UniRxでもそうですが、私は既存のコードを読むのが結構好きで、今回はいろいろな場面でコードを読めて面白かったです。特に業務レベルのコードだと、こうすればよかったのか!みたいな発見が結構あるので、非常に勉強になりました。

テキストベースコミュニケーション

私はこれまであまりSlackなどを活用していなかったので、今回のインターンでのテキストベースのコミュニケーションは中々慣れないものがありました。最後メンターの方からそれほど悪くなかったよと言われたのがすごく嬉しかったです。テキストベースだと非同期的にコミュニケーションが取れ、また後々ログが残るという良さもあり、今回の経験も含めて慣れて行きたいと思います。

まとめ

非常に短期のインターンでしたが、十日間とは思えない充実ぶりでした。会社の空気感や業務の進め方、雰囲気、そして技術的な知見ととても多くのことを学ぶことができました。
短い間でしたが、本当に皆さんお世話になりました。ありがとうございました!!