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

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

Akatsuki GAME JAM 2020 オンライン開催レポート

こんにちは、エンジニア採用担当の橋本です。

去る9月12日(土)〜13日(日)に2022年新卒エンジニア向けインターンシップ「Akatsuki GAME JAM」を開催いたしました。今年で第6回となる当インターンシップですが、今年は初のオンライン開催。

オンラインでの難しさもありながら、全チームがゲームを作りきり、参加者から非常に高い満足度を得た今回のインターンシップの様子をご紹介致します!

 

はじめに

#「Akatsuki GAME JAM」とは・・・

2日間を通して、ゲームアイデアの企画から開発までを行い、その制作物の結果を競い合うという内容です。今回のテーマはアカツキが創業10周年を迎えたこともあり「10」。計17名の参加者が5チームに分かれ、Unityで開発を行いました。 

f:id:kana_hashimoto:20201011222727p:plain

#なぜこのようなインターンシップをアカツキが実施するのか

「IPの世界観を深く理解したゲームを開発し、ファンとの長期的な関係を構築すること」を強みとするアカツキでは参加者の皆さんに「ゲーム開発を通して、世の中をワクワクさせるようなプロダクトづくりを体験をしてもらいたい!」という想いを持っています。

もちろん、参加者の中には多数のハッカソン参加経験のある方や、サークルなどでチーム開発を経験している方もいらっしゃいます。一方で、多くの学生とお話をする中で、ゲーム開発への情熱や個人でのプロダクト開発経験はあっても、プロのエンジニアから近い距離でアドバイスをもらいながら、チームで開発を進める経験をしたことがある学生は少なく、その機会を創出したいと思い開催しています。

 #参加を通じて得られる経験
・最速で最大の価値を出す経験
・プロジェクトマネジメント、コミニュケーション等のチーム開発力
・各チームの専属メンターからのコードレビューを含む個別サポート
・発想力、技術力、プレゼン能力

 #参加者と開催方法

今回の参加者は、イベントや直接GAME JAMの応募ページから応募いただいた方の中から複数回の面談・面接を経て、17名にご参加いただきました。中には学部の時に初めてお会いした学生が院生となり応募してくれたケースもあり、非常に嬉しい再会となりました。

元々は9月に例年通りオフラインでの開催を予定していましたが、コロナ禍の影響を顧みて、全国各地から参加いただく学生の方も多いことから7月末にオンラインでの開催に切り替えました。

オンライン開催による変更点・工夫

#参加者全員の『9マス自己紹介』を実施

9マス自己紹介とは、その名の通り自分に関わるキーワード(なんでもOK!真ん中には自分の名前を入れます。)を9つ書き出して紹介するというものです。通常の自己紹介より準備に時間がかからずに非常に盛り上がるため、オススメの自己紹介方法です。

全員で初日の午前中に一人3分ずつ行い、更にこれをZoom背景として設定することで、今回メインのコミュニケーションツールの一つとなったZoomでの会話時にも相互理解が深まり、アイデアのきっかけにも繋がっていたようでした。

f:id:kana_hashimoto:20201011223102p:plain

▲メンターメンバーの9マス自己紹介例

#アイデアソンの事前準備
今回、オンラインでのアイデアソンの難易度を考慮し、参加者には事前課題として「ペライチアイデアシート」を準備してもらいました。
事前対応事項が増えてしまったにも関わらず、すぐに多くの素敵なアイデアが集まっていく様子を見て、開催前にも関わらず運営陣はすでに感動で胸がいっぱいに・・!笑

▼ペライチアイデアシート 

f:id:kana_hashimoto:20201016190434p:plain

画面/プレイイメージがあるためオンラインでも視覚的にコミュニケーションが取りやすく、節約した時間を開発時間に充てることができました。当日はさらに、このアイデアシートを元に他チームのメンバーとペアになりアイデア発表&相互フィードバックを行うことで、様々な視点からアイデアが磨かれていきました。

上記2点のほかにも、予め全員の開発環境を統一するなど、参加者の協力を得ながら無事オンラインで開催することができました。

当日の様子(開発〜成果発表、結果発表まで)

#開発

アイデアソンを終えて企画が決まったところで、いよいよ開発開始です。

開発中は、各チームのメンターが基本的に常時チームとZoomを繋ぎながらコミュニケーションをとっていたのですが、オンラインながらも例年通り白熱する議論や笑い声が飛び交い、非常に熱量の高い空間でした。段々と、チームを引っ張っていくリーダー、落ちているタスクを拾い適宜サポートする方など各々の役割が見え始めていきます。

   開発中の様子 初めは緊張していたメンバーからも次第に笑みが溢れます。

f:id:kana_hashimoto:20201016190703p:plain

今回はイラストが描ける強者も多く、キャラクターや武器のデザインを行うチームもありました。ハイクオリティ・・・!

 キャラクターデザインの様子

f:id:kana_hashimoto:20201012001107p:plain

#成果発表会

開発時間はあっという間に過ぎ、いよいよ2日目の成果物のプレゼンテーションへ。各チーム着実にプレゼンの練習を行い、各々が制作したゲームのこだわりや面白みを伝えてくれました。特に今回のテーマである「10」との関わり方は、10を武器にして闘う、体の大きさが10倍になる、など各チームとてもユニークでした。発表に対しては、メンターを務めたアカツキメンバーや参加者からも多くの質問が飛び交い、非常に盛り上がりました。

▼成果発表会の様子

f:id:kana_hashimoto:20201012202431p:plain

#試遊会

発表後には、各チームのゲームを体験できる試遊会を実施。通常であれば、ヘッドマウントディスプレイを貸与しVRゲームを開発するチームもありますが、今回はリモートで全員の開発環境が揃えることが難しいため、Unityのエディタ上で遊べるゲームに限定させてもらいました。

アカツキのメンター陣と運営チームは、ソーシャルディスタンスを守りながらオフィスに集まり、参加者のみなさんが開発したゲームを楽しみました。どのチームのゲームも本当におもしろく、GAME OVERになると「もう一回やらせて!」とかなりハマっている様子でした。

▼試遊会(アカツキメンバー)

f:id:kana_hashimoto:20201012003309p:plain

※撮影時のみマスクを外しています。

#結果発表

いよいよ運命の結果発表。

準優勝チームはなんと....同点で2チーム!「TEN倍ヤー」というタイトルを開発したチーム「Akebono」と「1 by One」を開発した君のAirPodsProをたべたい」の2チームが受賞しました。ユニークなアイデアと、細部のエフェクトや操作性・ゲーム性を備えた作品に審査員の評価が集まりました!

▼「TEN倍ヤー」by Team Akebono

f:id:kana_hashimoto:20201012202324p:plain

▼「1 by One」by Team 君のAirPodsProをたべたい

f:id:kana_hashimoto:20201016190906p:plain

そして、栄えある優勝は...「PLUSLIME」というゲームを開発したチーム「ネコヤムクン」でした!独自のゲームルールを採用しつつもシンプルでわかりやすく、何よりも完成度が突出していたことが高い評価を受けていました。また、ゲームバランスも工夫されており、何度も挑戦したくなるような夢中になれる素晴らしいゲームでした!

▼「PLUSLIME」by Team ネコヤムクン

f:id:kana_hashimoto:20201016191148p:plain

#オンライン懇親会

結果発表の後は、Zoomのブレイクアウトルームで分かれて懇親会を行いました。「もっとこうしていたら...この機能を実装できていたら..!」など悔しい気持ちもありつつも参加者のみなさん全員「本当に全力でやり切った!」という清々しい達成感にあふれていたのが印象的でした。2日間の開発の疲労を全く感じさせない盛り上がりで、1時間の懇親会はあっという間に終了。

実は今回、突然のオンライン開催への切り替えによりオフィスの紹介ができなくなってしまったこと、そしてキラキラしたみなさんの姿を見ていたら何か記憶に残る思い出を残したい!と思いこの2日間の思い出ムービー(オフィスツアー付き)を作らせてもらいました。「こんなサプライズは初めて!」と喜んでいただき、運営陣も感無量でした。

▼Zoom画面越しにみんなで乾杯!

f:id:kana_hashimoto:20201016192548p:plain

f:id:kana_hashimoto:20201016192612p:plain

最後に

本当にあっという間の2日間でした。是非、今回のインターンシップが一つの学びとなり、みなさんの次なる挑戦に繋がれば幸いです!そして、この出会いをこの場限りで終わらせるのではなく、また次の機会で参加者のみなさんにお会いできることを楽しみにしています。

▼嬉しいことに、参加者の方がブログを書いてくださいました^^!タイムライン毎の詳しい紹介に加え、自身の振り返りもあり読み応えのある内容です。是非ご覧ください。

 

 それでは、また来年のGame Jamでお会いしましょう!

アカツキでAWS ECS Capacity Providerと格闘して

こんにちは!

この度サーバサイドエンジニアとしてインターンシップで勤務させていただきました、髙津と申します。

本記事では、インターンシップ期間 (2020年7月6日〜7月31日) 中に取り組んだこと、感じたことなどを書いていきます。似たような技術課題に直面している方々、これからインターンシップを受けようと考えている方などの手助けになれば幸いです。

具体的には

  • インターンシップで取り組んだこと
    • 知見
      • Capacity Providerの具体的な設定項目
      • Auto Scalingの仕組みのおさらいと設定項目一覧
    • 検証
      • 懸念事項
      • 1. 動作の上で最適な設定は何か?
        • 1.1. SSPタイプはどちらが良いのか?
        • 1.2. Scalingトリガーとして適切なメトリクスは何か?
        • 2. Scalingは十分に速いか?
        • 3. 安全にScale Inできるか?
    • まとめ
  • インターンシップを通じて感じたこと
    • 取り組んだ課題に関連して感じたこと
    • 課題以外の面で感じたこと
  • 最後に
  • 参考資料

の構成でお伝えしていきます。

続きを読む

出社0回!これが完全リモートインターンシップのリアルだ!

こんにちは!2020年7月にアカツキでサマーインターンシップを行いました栁です!

COVID-19(新型コロナウイルス感染症)、世の中は本当に大変なことになりました。僕のインターンシップ活動も例外ではありません。 なんせ、インターンシップが完全リモートで開催されました。 出社は0回、メンターはおろかアカツキの社員さんと1回も直接顔を見ることなく終わります。

「それじゃインターンシップの意味なくない?」「ちゃんと仕事できるのか心配……」

僕も開始前はそう思いました。でもインターンシップで就職前に一足先に完全リモート勤務を体験できてよかったと今ははっきりと言えます。 インターンシップだったからこそ、完全リモート勤務のいいところと、意識して気をつけるべきところをかなり明確化することができたのです。

3週間の完全リモートインターンシップで自分がどのような活動をしたのか、何に気をつけたのか、皆様に共有します。

はじめに

普段は電気通信大学院の修士2年としてSNS上からフェイクニュースを自動で検出するAIモデルの研究開発を行う傍ら、株式会社justInCase Technologies(jICT)にて少額短期保険サービスのバックエンド開発を行っています。 「修士2年だから21卒じゃないの?」と思う人もいるかもしれません。実は8月から1年間の研究留学を行うために卒業を1年送らせて22卒となる予定でした。コロナのせいで22卒のプランは破綻寸前になってしまいましたが……

そして同じく予定されていたインターンシップはフルリモートに。限られた期間で最初から最後まで完全リモートで活動するのはこれが初めてでした。

このエントリーでは、

  • なぜアカツキのインターンシップに参加したのか
  • インターンシップの内容と環境
  • 実際に活動において気をつけたポイント
  • 全体の所感と提言

をまとめました。「コロナの影響でインターンがフルリモートになってしまった……」な学生さんはもちろん、初めてメンターを行うはずがフルリモートとなり不安を覚えるエンジニアの方にも大きなヒントになるでしょう。是非ご一読ください。

アカツキのインターンシップに参加した理由

僕がアカツキの名前を知ったのは自分が学部1年だった頃(2015年)に、アカツキのエンジニアが大学に講演会に訪れたことでした。 そこから時代は流れ、本格的にインターンシップを検討し始めたのは今年開催された逆求人イベントでした。

当時自分はjICTにてバックエンド開発の経験こそあれ、規模の大きいシステムに触れる経験が足りていないのを実感していました。 そのため、大規模システムに触れることができる完全就業形インターンシップで、(留学の影響もあったため)8月までで完了するものを探していました。 アカツキが提供しているゲームはいずれも規模の大きいものが多く、またゲームという性質上ユーザからのリクエスト数も瞬間的に多くなるシチュエーションがあり、そういった状況下でも安定してサービスを提供しているシステムはどのような形で開発・運用されているのか、非常に強い興味を持っていました。

また、事前にインターンシップが完全リモートになることは告げられていましたが、リモートワーク自体はjICTで既にある程度経験していました。 最初から最後までリモートでやるのは初めてでしたが、これまでの経験を活かせば十分出社と同じバリューを提供できると考えました。

以上より、僕はアカツキの完全就業形インターンシップに参加することにしたのです。

実際の活動内容と環境

この章では、完全リモートとなったインターンシップで自分がやったことと、活動の環境を紹介します。

技術的に行った作業

今回はスマートフォン向けゲームアプリのAPIサーバを対象に、以下の実装を行いました。

  1. 実装予定の新モードと既存モードのアップデートとのすり合わせ
  2. 既存コードのリファクタリング

前者では、既存機能のアップデートにより新たに追加された機能が、まだ実装前の新モードと矛盾を起こさないように開発中の新モードの手直しを行いました。後者では、自分のメンターがプロジェクトにjoinする前から存在する古いテストコード(いわゆるレガシーコード)のリファクタリングなどを行いました。

勤務環境の紹介

勤務はすべて自宅から行いました。使用するPCは事前にアカツキから送付されたPC(MBP 13")を使いました。 また、自分は実家暮らしでインターネット環境は予め整っていましたが、そうでない人を対象にWi-Fiの貸与も行っていました。

開発においては多くの外部サービス(GitHub, JIRA, Confluence, etc.)を使用しており、一部はVPNを経由する必要はありますが、OneLoginによってシームレスに使えるようにされていました。

社内コミュニケーションは基本Slackを使っており、プロジェクト毎にワークスペースが区切られており、細かくチャンネルは目的別に分けられていました。 また対面での会話を行いたい場合は、Zoomを使用していました。 自分が配属されたチームでは、任意で常時接続用のZoomルームも用意されていて(カメラやマイクの有無はもちろん任意)、朝会や夕会もその部屋で行われました。

気をつけたポイント

この章では、実際の勤務において気をつけたポイントを共有します。

初めてrailsを扱った

自分のメイン言語はPythonであり、railsを扱うのはこれが初めてでした。 勤務開始前にrailsチュートリアルで重要な章を列挙して頂き、事前に一通り読んでおくことで比較的スムーズに勤務を進めることができました。 また技術的にもわからない部分は気軽にメンターの方へ質問ができる状態でした。

アンチパターンとの格闘

技術的な部分では最も手を焼いた部分でした。 例えばrequestを送って挙動を確認するテストコードを例に取ると、既存のものはresponseの構造と対応する値の型のみを確認して、DB内のレコードの変化を一切確認しておらず、だいぶ緩い形をとっていました。これでは起きうる障害を早い段階で捉えることは難しくなってしまいます。

最初は自分は既存テストコードをリスペクトしてその意図を忠実に反映した形にしていましたが、リスペクトすべきは実装の部分であってテストコードではないのを痛感しました。 それを実現するためにテスト上でDBレコードを発行し、request送付後の変化を調べる処理を追加することで対処しました。

やはり規模が大きいのも相まってコードの数も非常に多く、中にはメンターですら首を傾げるような処理もあり、読解の難易度が少し高かったです。 こういったサービスに今後関わるにはこういったアンチパターンを孕んだレガシーコードとの格闘は必須であるため、インターンが終わった後には "レガシーコードからの脱却" を読むことにします。

対面でのコミュニケーションが封じられた

完全リモートは即ち直接面と向かって相談することができないことを意味します。 実際に自分がとったコミュニケーションを調べてみると、大まかにSlack9割Zoom1割でした。

円滑なコミュニケーションのため、Slack上ではこれから実装するトピックのスレッドを立て、そこへのレスポンスで"どんなコードを入れたか"・"どんな結果が返されたか"・"何が原因として考えられるか"・"対策でどんなコードを入れたか"・……といったサイクルをとにかく仔細に入れることを意識しました。 こうすれば、メンターの手が空いた時に読んでもらえる上に、急を要する際はメンションを飛ばすことで手軽に相談できるような環境を整えました。 そしてそれをメンターはもちろんワークスペースのエンジニア達から見える場所に書き記すことで、時にはメンター以外の人からの助力を得ることにも繋がりますし、後から自分が見返してこのようなエントリーを作る際にも役立ちます。 それでも解決が難しければ、Zoom部屋を立ててメンターの方と画面共有でリアルタイムで会話しながら問題解決を目指しました。

これは是非リモートワークの際には試してみて欲しいです。

全体の所感

大規模サービスのコードに触れられた

当初の目的として掲げていた規模の大きいサービスの内情を知ることができたのは非常に大きかったです。 常に多くのチームがそれぞれの目標やタスクに向けて動くことで、発生した問題に対処しつつ新たな要素の追加を実現していることを肌で感じることができました。

完全リモートをいち早く体験できた

1度も出社しない勤務を就職前に行うことで、今後の自分の働き方がどのような形になりうるかを具体化することができました。 情報共有のやり方はこれまでとは大きく違うフォーマットが求められるので、早いうちにそれに慣れる機会となりました。

多くの人々と知り合うことは難しかった

基本的には会話する相手が配属先のチームに限られるので、他の部署の人と会う機会は出社する場合と比べて少なくなりました。 一応人事の方とはリモート昼ごはんで合うことはできましたが、こういった機会を事前にちゃんと用意する必要があり、偶然の出会いが生まれにくいのは少しアカツキの文化を知る際に障壁となりました。

提言

  • 完全リモート勤務はタスクをこなす分にはあまり障壁にならないので心配は無用
  • 多くの人と知り合う機会は減るので、積極的にコミュニケーションを仕掛けておいて損はない

さいごに

短い期間でイレギュラーとなる勤務の形となりましたが、実際のサービス運営の現場で活動することで、今後の働く形と自分の技術力を磨く大きな経験をさせて頂きました。間違いなく自分の今後を考える上で大きな財産となりました。本当にありがとうございました。

アカツキでのインターンを終えて 〜フルリモートでスマートフォンゲームの機能改修をしてきました〜

こんにちは、はじめまして。
daimond-arrowです。オタクをやっている大学院生です。
好きなアニメはグレンラガン、今季の一押しは球詠です。 

 

このたび、アカツキさん(以下、敬称略) で
フルリモート型の短期インターンシップ (以下、インターン)
に参加させていただきました。
せっかくの機会なので、インターンを終えての所感をここに残しておきたいと思います。

 

この記事が、

  • これからインターンに参加しようと考えている学生
  • アカツキのことを知りたいという方
  • スマートフォンゲーム開発をしている企業ってどんな感じなんだ?と気になっている方
  • そして、フルリモートのインターンシップってどうなんだ?と疑問に思っている方

にとって、参考になれば嬉しいです。

 

目次 

 

インターンに至るまで

さて、気になるインターンの中身の前に、少しインターンに至るまでの経緯を説明させていただければなと思います。
そんなことよりインターンで何をするかが気になる!、という方は飛ばしてこちらから読んでいただければと思います。

 

まずアカツキとの出会いは、昨年8月の就活イベントでした。
自分が個人・研究室でのUnity開発経験があったことから声をかけていただき、まずは会社見学からということでアカツキのことを知っていきました。
このとき、自分で何かを開発したことがあるという経験が、就活ではかなりアドバンテージになるんだなあと小学生並の感想で思いました。もとい、ゲーム開発をしている企業とマッチする、でしょうか。これから就活という方は一つ参考にしてください。

オフィスに遊びに行かせてもらった際には、その綺麗さにかなり驚きました。オフィスにバリスタがいるのは圧倒的にずるいですね......(私は無類のコーヒー好きなので)

 

 

あれやこれやで話が進んでいき、このインターンのことが決まったのは昨年(2019年)の12月頃でした。じゃあ3月末からインターンしましょうか!という話だったのですが、そこで今回のコロナウイルスでの外出自粛。
インターンもなくなってしまうかなあとすら思っていたのですが、自分がインターンには参加したいです!と主張をすると、アカツキは柔軟に対応してくださいました。
提案していただいたのは、フルリモートでのインターン受入。
こういったところに柔軟に対応してもらえたのはとても嬉しかったですし、そのキャパシティがあるいい会社だなと素直に思いました (後にも述べますが、フルリモートで全く問題なく、むしろ快適に楽しくインターンさせていただきました) 。

 

このようにして自分のインターン参加の日程が決まりました。
ではこれから、本格的にインターンで何をしたのか述べていきたいと思います。

インターンで参画したタイトル

今回インターンで関わらせていただいたのは、アカツキを代表する(と思う)スマホゲーム『八月のシンデレラナイン』━━ 女子高生が甲子園を目指すアツいゲームです(少なくとも私はそう感じています!)。アニメ化もしてます(寺で合宿する回が最高です)。

f:id:diamond-arrow:20200529130414p:plain

そしてこれは色眼鏡ではないのですが、かなり面白いゲームです。個人的にはやればやるほど面白い、やり込み要素のあるスルメゲームだと思っています。
自分がプレイを始めたのはインターン参加3ヶ月前からなのですが、かなりハマってしまいました。
参考程度に自分のプレイログを載せておきます、自分が色眼鏡で言っているわけではないというのがわかっていただけるかなと思います。

f:id:diamond-arrow:20200529131019p:plain

インターン中の業務

さて、タイトルは先に述べた通りですが、具体的にインターン中に何をしたんだという話になると思います。
自分はクライアントエンジニアとしてインターンに参加しました。

開発に使用したのは、主にUnity C#、たまにSQLを叩いたりしていました。

 

f:id:diamond-arrow:20200529131051p:plain

業務内容は、クライアントサイドの機能改修。
今ある機能を変えてゲームを快適にしましょう、というものです。

基本的にインターン生には、一人一人にメンターがついてくださり、チームでの開発にジョインします。質問があればチャットやオンライン通話でメンターやチームの皆さんにすぐに聞けたので、困った事は全くありませんでした。

以下、自分がインターン中に行ったことを3つに分けて紹介したいと思います。

自分のユーザーデータの可視化

自分はかねてより、スマホゲームのデータはサーバー上でどのように保存されているのだろうかと興味を持っておりました。
そこでメンターの方に、ログを見せてください!と頼んだところ、快く見せていただきました。

そしてせっかくログを見せてもらうのだからと、軽く自分のユーザーデータを可視化してみたものが、先ほどのプレイログのグラフです。
クライアントエンジニアとしてのインターン参加ということでしたが、領域外のこともチャレンジさせていただき、大変感謝しています。チームの方にも面白いねと言っていただき、アカツキはチャレンジに対してとても寛容な会社だとしみじみ実感しました。

 

 

戦術機能の改修:オペレーションコストに応じた停止機能の追加

クライアントエンジニアとしての最初の仕事は、戦術機能の改修でした。
少しだけ、前提の話をさせていただきましょう。

ハチナイには戦術機能というものがあります。ハチナイでは、キャラクターが選手として野球をし、相手チームと得点を競うのですが、この選手に指示が出せるのが戦術機能です。例えば、打席に立った選手に[送りバント]を指示したり、ピッチャーに[全力投球]を指示できます。
他方、ハチナイはこの試合をオートで進めることができます(周回が非常に楽!)。そしてそのオート機能にはオプションがあり、試合が[ピンチやチャンスのときのみ停止する]というものがあります。つまり、オートだけど試合に負けているときはプレイヤーとして介入して、戦術機能を使えるよう停止する設定にする、ということができるのです(便利!)。

そして以前まで指摘されていたのは、この停止がオペレーションコストがない場合でもピンチ・チャンスだったら停止する、という問題でした。
戦術を使いたいからオートを停止するのに、オペレーションコストがない場合でも止まってしまうのはユーザーにとって嬉しくありません。

f:id:diamond-arrow:20200529131219p:plain
 

 

そこで自分がクライアントサイドとして取り組んだのが、この機能改修でした。

ロジックとしては単純に、オペレーションコストが足りているかチェックする関数を、既存のロジックに入れ込むというだけで済みました。
さらに幸いなことに、既存のコードで応用できそうな部分があったので、すぐに改修できました。こういったところは、設計がしっかりしていたからかとも思っています。

そして嬉しいことに、インターン期間中にアップデートに盛り込んでもらえるという嬉しい体験をすることができました。この体験はとても嬉しく、ゲーム開発の一つの醍醐味を実感した瞬間でした。

 

 

サーバーサイドと連携しての機能改修:デレストオーダー編成選手の移籍

上記の改修に加え、もうひとつの改修にトライしました。
こちらは、デレストオーダーに編成中の選手を移籍できるようにする、という機能です。

デレストは、普通の試合とは別に用意された別種の育成要素です。こちらもある種試合のようになっており、選手をオーダー編成してチャレンジします。そしてこの編成は自動で保存されるようになっています。

他方、ハチナイでは、キャラクターの売却機能を[移籍]と呼んでいます。この移籍では、ある種のロック機能として[オーダーに編成中の選手は移籍できない]ようになっていました。

ここで問題になっていたのは、移籍させたい選手をデレスト編成から外すことが手間であった、ということです。

f:id:diamond-arrow:20200529131323p:plain


 

次に取り組んだのはこの課題でした。

そしてこの課題には、クライアントサイドだけでなく、サーバーサイドの改修も必要となっていました。移籍や編成についてはサーバー側の処理も入るからです。

そこで自分は、インターン同期のサーバーサイドエンジニアと協力し、二人でこの課題を解決しました。
毎日チャットや通話で、どちらがどこまで担当するのかを話し合い、お互いに問題がないか確かめ合う時間が続きました。

嬉しいことにこちらもお互い完成し、あとはリリースのみ、というところまでやりきってのインターン終了となりました。

この経験は、チーム開発の肝である密なコミュニケーションの重要性、そしてチーム開発の楽しさ(なぜか二人で開発するということがすごく楽しかった)を感じる良い機会になりました。また同時に、クライアントに閉じず、サーバーサイドにも触れてみようと思える非常に刺激的な機会であったと感じています。

 

インターンで得たもの

以上が自分がインターン中に行ったことの詳細になります。
上記の他にも、アカツキでのインターンは得るものが多いインターンでした。
特に良かったと思うのは以下の2点です。

リッチなコーディング経験

まず、非常に丁寧なコードレビューをいただきました。
自分のプルリクエストに対して、かなり綿密なコメントや改善案をいただき、自分のコーディングスキルの向上が実感できました。

さらに、チームの人が書いたコードをレビューするという機会もいただき、兢々としながらもレビューさせて貰ったのはいい経験でした。

他にも、そもそもの設計がどうなっているのかを知れたり、コーディング規約や実戦での書き方を知ることもでき、非常に糧になる経験でした。

上流からリリースまでの流れを実感

コーディングだけに留まらず、そもそも機能がどう決まるのか、リリースまでにどういう流れを取るのかということを知ることができました。

また、アカツキならではだなと感じたのは、自分が生意気にも「ここも改善してみたいんですけど、どうでしょうか!?」などと提案したことがスルッと受け入れてもらえたことでした。アカツキはエンジニアの意見が取り入れてもらいやすい環境のようです。
こうした提案が通りやすいということは、自分がこのゲームをよくしているんだ!というある種のやりがいが発生しやすいということで、確かにチームの皆さんの士気も高い水準であると感じました。

きっと今後も、このゲームはどんどんよくなっていくだろうなということが確信できることが知れたのも、1ユーザーとして嬉しかったです!

おわりに

アカツキでのインターンはとても楽しく充実したものでした!
メンターの方、チームの方、人事の方、お話しさせていただいた新卒の方、インターン同期、みなさまに感謝しています!ありがとうございました!

そして、この記事を読んでくださった方、ありがとうございました!
こんな記事ですが、アカツキの良さ、ゲーム開発のこと、フルリモートインターンのことなど、参考になれば幸いです!


参考:成果発表資料

 

サーバーサイドでのインターン(五月)の成果報告

まえがき

お初にお目にかかります。 株式会社アカツキさんで五月十一日〜五月二十二日の約二週間(実質十日間)、サーバーサイドの開発でインターンをいたしました、村上と申します。

本記事では、当該インターンにおける成果報告と感想を述べます。よろしくお願いいたします。

インターンの形態について

時期が時期の中行われたインターンですので、皆様に誤解を与えてしまわないよう、まずは本インターンの形態についてご説明いたします。

ご存知の通り、現在、世界中が感染症対策に追われています。日本も例外ではなく、具体的には、オフィスへの出勤を最小化しなければなりません。 ですので、アカツキさんも全面的にリモートワークを行なっています。そのため、今回のインターンは対面を一切廃したフルリモートで行われました。私は愛知県在住なので、東京とおよそ300kmのソーシャルディスタンスを確保した上での実施となります。

機材は事前に郵送いただき、手続き等も全てリモートで行われました。インターンに際して、感染症対策は徹底されていたという点を明記しておきます。

インターンで行ったこと

本インターンでは、大人気ソーシャルゲーム『八月のシンデレラナイン』、通称ハチナイのサーバーサイドの開発業務に携わりました。なお、サーバーにはRailsが用いられています。

10日間中は様々なタスクがありましたが、その中でもメインで行ったものは以下の三つです。

  • APIサーバー開発環境の改善
  • 敵チーム調整用管理画面の作成
  • デレスト編成中の選手をそのまま移籍・保管庫に移動させられる機能の実装

それぞれについて、詳しく述べていきます。

APIサーバー開発環境の改善

インターンを開始してまず手をつけたのが、この作業です。 当時のAPIサーバーの開発環境には以下の問題があり、環境構築におよそ半日ほどかかってしまっていました。

  • 開発用のMac上にそのままRailsやMySQLなどをインストールしていたため、依存するソフトウェアやライブラリのバージョンを適切に揃える必要がある
  • 環境についてのドキュメントが不足しており、構築する側がトライアンドエラーを繰り返して設定する必要がある

一度構築してしまえば問題ないとはいえ、今後入ってくる方にも同じ時間を強いてしまうのは勿体ないこと、さらに非サーバーサイド開発でも手軽にローカルで検証環境を立ち上げられるようにしたいということで、この改善に取り組むことにしました。

対応方針としては、DockerとDocker-Composeを用いて数コマンドで環境を立ち上げられるようにして、誰でも簡単に環境を作成・破棄できることを目指しました。 幸い、作りかけでしたが既にdocker-compose.ymlと関連ファイルが作成されたブランチがあったため、出ているエラーの調査(連携するその他のソフトウェアのメンテナの方からの聞き取り等含む)と修正をしたり、一部テストケースの改善をしたり、ドキュメントを整えたりといった細かな作業を行い、実作業二日間、計三日間でApproveをいただけました。

この改善による影響は大きく、半日かかっていた構築作業がおよそ20分で完了するようになりました。また、ゲームのクライアントを担当されている方と一緒に開発をする際、相手側で検証用サーバーを立ち上げてもらって開発を進める、といった手法も気軽にとることができるようになり、開発の体験が向上しました。 実際に「便利になったね!」といったフィードバックをいただけた時は、本当に嬉しかったものです。

敵チーム調整用管理画面の作成

次に対応できそうなタスクを探していると、『敵チームの調整を管理画面から行えるようにする』といったタスクのカードが目に留まりました。 詳しく話を聞いてみると、ゲームの調整を行う方からの運用改善として以下の課題が出ていたことが分かりました。

  • 試合の敵チームを作成するにあたって、現状は職人技で行なっているので、属人化してしまっている部分がある
  • 敵チーム調整のサイクルが一つの場所で完結しておらず、結果の予測も簡単ではないため、経験が浅いと調整に時間がかかってしまうのが原因
  • そのため、管理画面に敵チーム調整用の機能を追加し、管理画面の機能群だけで調整を完結させられないか

お話を伺う限り自分でも対応できそうだったので、そのまま着手することにしました。 具体的には、ActiveAdminで作られていた管理画面に敵チーム調整用のページを新設し、関連するパラメータも調整できるようにしました。

ActiveAdminの挙動で少し詰まったところはありましたが、それ以外はすんなり実装できたと思います。実装後に簡単なドキュメントも書いたのですが、良い勉強になりました。レビュー含め二日間ほどで終わったと思います。

デレスト編成中の選手をそのまま移籍・保管庫に移動させられる機能の実装

こちらは、ゲームのクライアント側でインターンをされていた方との共同作業になります。 ハチナイの試合やデレストにおいて、今までは以下の問題がありました。

  • 試合やデレストを進めていて選手所属数上限エラーとなった際、デレスト編成中の選手はそのまま移籍や保管庫に移動させることができず、いちいちデレストの画面から入れ替えを行う手間があった

そのため、サーバー側とクライアント側の両方に変更を加え、デレスト編成中の選手でもそのまま移籍・保管庫への移動を行えるように改善することになりました。 サーバー側の変更量自体はさほどだったのですが、変更の内容と影響範囲を考慮し、テストケースの修正と追加をメインに行いました。実際にテストを増やしてみると、実装中は気がつかなかったケアレスミスが発見できたりして、やはりテストを増やすのは正解だったなと実感しました。こちらもレビュー含め、三日間ほどで完了できました。

また、実装に際して、クライアント側のインターン生の方がとても優秀で頼もしかったです。 リモートで実装に関しての相談や打ち合わせを何度かしたのですが、毎回スッと意を汲んで対応していただけたので感謝しています。 円滑な開発を行う上で、コミュニケーション能力は本当に大事ですね。私も精進します。

学び

実質10日間という短い期間でしたが、インターンを通して学べたことは多くありました。

例として、分かっているはずだったものが、実際に手を動かしてみると頭からすっぽり抜け落ちてしまう、といった問題を認識できたことが挙げられます。 具体的には、実装における設計です。頭の片隅に置いてあったベストプラクティスのはずなのに、作業に集中していると目の前のことで一杯一杯になってしまい、後から改善点を指摘される、といったことがありました。 もちろんインターンというアウェーな環境というのもあるとは思うのですが、それ以上に自分の経験不足を感じたのが大きいです。頭をよく使ってから手を動かす、ということを繰り返すことで、どんな状況でもベストプラクティスが実践できるようにしていきたいものです。

また、これはいろんな場所で何度も言われていることだとは思うのですが、チーム開発においてコミュニケーションは重要だなと思いました。 アカツキさんの方々は皆さんお優しくて、Slack上でもいろいろなトピックで会話が弾んでいます。そのおかげで気軽に質問や発言ができましたし、結果的に円滑な作業に結びついていたと感じました。 これが、仮に最低限の会話しかないような状況だったとしたら、インターンというのも相まって、萎縮や虚無感で効率がガタ落ちだっただろうなと容易に想像できます。 リモート作業ではどうしても人との関係性が希薄になりがちで、恐らくこの状況はこれからもしばらく続くと予想されますが、こうしたコミュニケーションが効率という面を支えているということを忘れないようにしたいところです。

感想

インターンが始まるまでは、寝付けずにうなされるくらい、自分がやっていけるのかどうかが心配で仕方ありませんでした。 しかし、実際にサーバーサイドのチームに入って作業してみると、思っていたよりかはパフォーマンスが出せたので一安心です。とはいえこれで傲慢になるのではなく、学んだ点を糧に引き続き精進していきたいと思います。

また、仕事がとても楽しかったです。毎日十時〜十九時までが勤務時間だったのですが、十九時に業務が終わってすぐに次の日の朝が待ち遠しくなるほどでした。 自分でもこの感情には驚いたのですが、それだけアカツキさんが働きやすい環境だったのかなと思います。まさにハートドリブンですね。

さいごに

大変な情勢の中、就職活動の一環とはいえインターンの受け入れをしてくださり、お世話になったチームの皆さんやアカツキさんには大変感謝しております。 ありがとうございました。