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

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

Akatsukiサーバーエンジニアインターンを経験して

こんにちはAkatsukiのサーバーエンジニアとして8月24日から9月11日までの3週間参加させていただきました、飯田です。私がこの3週間でどのような事に取り組み、何を学んだのか、振り返りを書く事になりました。

Akatsukiのサーバーエンジニアってどんな事しているのか、またどういう環境なのか興味がある方はぜひ読んでいただけたらと思います。よろしくお願いします。 

インターンの参加理由

まずインターン参加の理由から話していきます。

私がアカツキのインターン参加を決めた理由は「実際に業務をやりながら学べる」という事にありました。私は働いている環境を知りたいという思いがあり、 実際に社員のエンジニアの方と業務を通してやりとりできるというのは大変嬉しい事でした。

 そしてもう一つ大きな理由としては、「やりたい事に取り組ませてもらえる」という事です。事前に何がやりたいかを何度も聞かれ、自分が関わりたい領域をきちんと話せば、それができるように取り計らってくださいます。面接の時からそんな感じで、ご縁があり参加させていただく事になりました。

 

ちなみに私がやりたいことは仕様の検討や設計をゼロから考えること、AWSに関するタスクでした。普段から開発する中で、自分の中に課題としてあったので取り組めたら良いなと思っていました。

 

インターンで取り組んだ事

私は「八月のシンデレラナイン」というゲームタイトルのサーバーエンジニアチームに配属され業務を行うことになりました。インターンでは合計5つのタスクに取り組みました。そのうち特に沢山学びがあった3つを紹介したいと思います。

 

その三つとは

・チーム評価ログを取りやすくする実装

・ECSデプロイ完了時に通知を送る仕組み

・デレストキャンペーン時のプランナー作業自動化の実装

です。

 

チームスキル評価込みのチーム評価を容易に取れるログの実装

 最初にチーム評価に関して簡単に説明しますと、ハチナイにはチームを組んだときに4つの評価値をもとに総合値であるチーム評価というのを計算します。(画面下部)

 

f:id:iidatakuya:20200911172337p:plain

 

ハチナイの分析チームはユーザーのチーム評価の値を分析に利用しているそうなのですが、チーム評価を取得するには、クライアント側との連携が必要になり、チームスキル評価の部分のみ独立して取得するというやや複雑なロジックが必要になっていました。そこでこのチーム評価のログデータを簡単に取れると、よりログの分析が簡単でやりやすくなるというのがチームからの要望でした。

 

クライアント側との連携があることから、クライアントエンジニアの方と相談し、容易に取れるような方法を新たに考え、より簡単に一括でチーム評価ログを取れるように実装してレビューしていただいた段階で沢山の質問が飛んできました。

 

・既存の実装にはログはログデータとして送信しているので、ログ専用のデータベースのカラムはない。その辺りはどう考えてますか?

・なぜその実装が良いと判断したのですか?

・他の実装案はどうだったのですか?

 

最初少し驚きました笑

確かに実装方法はいろいろありますがどうしてそれに決めたのか、何を判断根拠にしたのかなどをしっかりと考え抜いて言語化出来るかを見ているようでした。言語化を大切にされている文化なのだと感じました。考えていたこと・自分の中に持った明確な判断基準をきっちりと説明して、納得してもらえるようにして初めてOKをもらえることになります。

 

普段個人開発をしている人は何となくこっちの方が良いよね、みたいな感じで実装することもありがちだと思うんですが、実装方針に関してきちんと言語化することは非常に大事なことだなと気づきました。レビューする人や他の人が見ても、別の実装方法とのメリットデメリットの比較やなぜそういう実装に至ったのかを理解できますし、曖昧な部分をなくすことで考慮漏れも起こりにくくなります。きちんと説明できることは学びにもなりますし良いことしかありません。もちろん時間がかかるので、常にこういうことをしているわけではないそうですが、いつ聞かれても答えられるようにしっかり考えて自分の判断基準を持っておくというのは非常に大切な事だと思います。

 

質問は沢山飛んできますが、非常に優しい感じで、「良いとか悪いとかではなくなぜそうしたのか」という事をわざわざ強調して聞いてきてくださるぐらいなので圧迫感とかは皆無で非常にやりやすかったのも良かったです。

 

ECSデプロイ完了時に通知を送る仕組み

次に紹介する取り組んだタスクは、「ECSデプロイ完了時に通知を送る仕組み」です。ハチナイの開発にはAWSのECSが利用されています。現状は、機能を開発してデプロイを行ってから完了したかどうかをいつもAWSコンソールを見に行って確認して、正常に動いている事を確認してから検証をしているという状況になっていました。ECSのデプロイは、行ってから完了するまでの時間が起動しているインスタンスの数によって変わり、環境によって時間がかかる事もよくあり、いつ終わったかを確認するのは手間になります。これを普段チームでやりとりしているSlackでわかるようにしたい、という要望がありました。

 

実装に関する内容としては、AWS SDKというAWSから用意されているプログラムからAWSを操作できるライブラリを利用してECSのクラスターの状態を確認することができるので、それでデプロイが行われたらリビジョン番号が変わる事を利用してSlackに通知を送るという仕組み作りです。これ関しては良い感じのライブラリがあったのでそれを改良する事で対応をしました。

実装ベースの話まで落とすと、一定周期でAWSのAPIを叩いてECSクラスターの状態を取得し、リビジョン番号に新しい番号が出来て、一定時間内に現在のリビジョン番号が新しいリビジョン番号に遷移していればデプロイ成功の通知を、新しいリビジョン番号ができても一定時間内に遷移できていないならデプロイ失敗の通知を送るという感じです。

一定周期でAPIを叩くというように、常に起動させておく必要があるので、ハチナイで使われているEC2のサーバーの中にデーモンのプロセスとして登録し、インスタンスを立ち上げたときに自動で実行されるようにする事で、人手を一切介さないで良いようにしました。

 

f:id:iidatakuya:20200911182028p:plain

 

ずっと正常に動いてくれていて良い感じです。好きなSlackの絵文字を設定して良いとのことだったのでこんな風になりましたが、もうちょっと普通のにしたら良かったなと後で思いました(反省)

 AWSのIAMの権限に関することや、クラスター周りのことを調べる良い機会となり、結構詳しくなれたように思います。

 

 

デレストキャンペーン時のプランナー作業自動化の実装 

 

 最後に紹介するのは、「デレストキャンペーン時のプランナー作業自動化の実装」です。ハチナイのデレストには、定期的にキャンペーンがあり、キャンペーンによって主に次の3つ内容が変化します。

 

・消費元気が1/2になり、紹介文にキャンペーン中の文言が追加される

 

f:id:iidatakuya:20200911182818p:plain

 

ソウルストーンのドロップ量が増える

 

f:id:iidatakuya:20200911182953p:plain


 ・秘奥義が取得できるようになる

 

f:id:iidatakuya:20200911191043p:plain

現状これらの対応を行うために、プランナー陣の工数が大きくかかっているという事でした。どうやら作業手順が煩雑で、特定のプランナーに作業が属人化してしまっているということにもなっているようで、これらのキャンペーンによる変更をサーバー側のロジックで自動化しようということになりました。

 

これに関しては仕様もなにもなく要望でしかなかったので、まずはヒアリングを徹底的に行いました。プランナーの方が実際にどういう形で実現できると嬉しいのか、というところをもとに社内で使われている企画などを書くページに仕様書/設計書を作り、それをもとにプランナーの方と検証チームの方にも確認していただき、「要望通りの実現ができる仕様となっているか」「検証する際の問題はないか」というところを見ていただきました。

 

しかしここで問題が発生しました。確認が取れて仕様が決定した段階で、このキャンペーンによる表示の変更はサーバー側で全部生成しているわけではなく、一部クライアント側で保持して出しているということが判明しました。(自分の確認漏れです)

 

これによってクライアントエンジニアの方にも協力をお願いすることになります。と言っても仕様は自分が考えているので、クライアント側でどういう事をすれば実現できるかをちゃんと調べて設計して提案する形で相談をしていただきました。しかしその確認の途中、さらに問題が発生しました...(問題起こりすぎ)

 

秘奥義の表示部分が他のゲーム画面にも跨っており、影響範囲の見積もりが完全に誤っていたことが発覚。さらにこれによって他の問題も見つかることになります。

 

「このままでは実装に進めない」という状況になり、色々打開策を考えるも出てこず、他のエンジニアやプランナーの方に向けてヘルプを頼むことにし、皆さんの協力のおかげでなんとかインターン期間内での実現が可能そうな落とし所が見つかりました。

 

実装方針の修正ができたので、仕様書を再度作り直して、今度はプランナー・検証チーム・クライアントエンジニアの方々に見ていただきました。(10人近く見て頂いて確認を取るので、結構頑張りました。ページの枚数も凄いことに。)

 

各チームの方が見るに当たって、何が分かれば良いのか、どこを見たらすぐわかるのかなどをしっかりと考慮して作ったおかげあってか、一発でOKが出て分からないと突っ込まれる事も特になく、ようやく実装に着手できるようになり、この時点でインターンの終わりが目前に迫っていて大分焦って実装に取り組んでいました。なんとかテストまで書き終えてPRを出してレビューをもらうところまではできたのですが、時間が足りず完遂することまではできなかったので引き継ぎをお願いすることに...(悔しい)

 

途中で問題が起こったり、関わる人が沢山いて考慮すべきことが沢山あってひたすら考え続けていたという感じで、非常に多くの学びがありました。これはやはり業務をしているからこそならでは、というところもあると思うので、実装を完璧に仕上げることまではかないませんでしたが、自分で一からヒアリングして仕様を作って設計してというところを色んなチームが関わる中で、しっかりと考えて取り組めたのは凄く良い経験をさせてもらえたとなと思います。

 

このタスクでは沢山の学びを得られました。最初のタスクであったような言語化が必要なことはもちろん、仕様の検討に関して、「要求された方針だけで考えるのは”検討”とは言わない、全ての可能性を考えて最適なのを探すのが検討」という指摘があったことは深く印象に残っています。

 

インターンを終えて

まずは、3週間本当にお世話になりました!毎日が本当に学びの連続で、技術に関することだけでなく、エンジニアの姿勢というところまで沢山勉強させていただきました。上の話の中では出てこなかったですが、メンターについて下さった方が、私が困ったときに的確なヒントをくださり、教えてもらうのではなく、基本的に自分で考えて動き続けることができて本当に楽しく取り組み続けることができました。本当メンターの方の推察力と言語化力が凄すぎました。(どうしたらそんなに風になれるんだろう)

 

また、最初はヒアリングをあまり上手くできておらず、自己判断が多いところもありましたが、指摘をいただいて自覚でき、途中から直して取り組むことができました。インターン中での成長がはっきりと目に見えてわかるのが凄かったという風に仰っていただけたのも嬉しかったです。

 

本当に手取り足取り教えるのとは対極で、自分で考えて出したアウトプットに対するサポートという感じで接して下さって、自分には凄くあっていてよかったです。皆さんもとても優しくて、心理的なハードルを一切感じる事もなく気軽にきける環境で、リモートというのが全く気にならないぐらいでした。働いていて凄く楽しかったです。本当に素晴らしい環境で学べたことを嬉しく思います。アカツキの良さを沢山知ることができました。

 

最後になりますが、本当に3週間という長い間お世話になりました。ありがとうございました!

 

 

 

 

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ユーザーとして嬉しかったです!

おわりに

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

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


参考:成果発表資料