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

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

Akatsuki GAME JAM 2019開催レポート

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

去る9月14日(土)〜15日(日)に2021年新卒エンジニア向けインターンシップ「Akatsuki GAME JAM」を開催いたしました。いきなりの報告ですが、今年は全チームがゲームをつくりきり、優勝争いも稀に見る接戦で最高の盛り上がりを見せました!

今年で第5回となるその様子を紹介いたします。

「Akatsuki GAME JAM」とは・・・

2日間を通して、ゲームアイデアの企画から開発までを行い、その制作物の結果を競い合うという内容です。今回のテーマはアカツキを象徴する言葉でもある「カラフル」。参加者は22人が7チームに分かれ、Unityで開発を行います。

 ▼詳細はこちら

https://aktsk.jp/recruit/gamejam2019/

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

私たちは本気で「ゲーム開発を通して、世の中をワクワクさせるようなプロダクトづくりを体験をしてもらいたい!」という想いを持っているからです。

もちろん、参加者の中にはこれまでにもハッカソン参加の経験や、サークルなどでのチーム開発を経験している参加者も多くいました。一方で、多くの学生とお話をする中で、プロのエンジニアから近い距離でアドバイスをもらいながら、開発を進める経験をしたことがある学生は少なく、その機会を創出したいと思い開催しています。今年で5回目になりますが、毎年パワーアップしております。

#昨年から何を変えたのか

メンターの関わり方を昨年より濃密にしました。従来も各チームにメンターがつき、開発をサポートしていましたが、今回は「コーディング以外は全て関わる」ことに決めました。どこまで関わるかは毎回議論に上がりますし、過度なサポートは参加者の気づきや成長を制限してしまうことから、従来はヘルプの声が上がった際のサポートにとどめていました。

しかし、2日間という限られた時間では、完成まで至るチームが半数程度だったことや、面白さへのこだわりをやり遂げきれないチームも見てきました。その中でタスク・スケジュール管理の重要性などは実感できたとは思いますが、どうしても悔しさが勝ってしまいます。やはりゲームを完成させ、それを他の参加者に触ってもらったり、フィードバックをもらうことによって得られる体験の方が重要だと判断し、今回の変更を行いました。

結果として、全チームがゲームを作りきり、各チームの個性を磨くところまで進めることができました!(もちろんこの結果は、メンターのサポートだけの成果ではなく、参加者みなさんの本気がもたらしたものですが!)

#当日の様子

今回の参加者は2月から実施しているAkatsuki Geek Live(LT会)や面談・面接を行った学生、中には学部の時に初めてお会いした学生が院生となって参加してくれたケースもありました。当日までにもすでに感慨深い時間を過ごしていましたが、準備期間はあっという間に過ぎ、開催当日を迎えました。

全参加者が時間通りに集まり(優秀!)、早速開発ゲームのアイデアソンへと移ります。

今回のアイデアソンでは「カラフル」というテーマから連想するワードを時間制限を設けて、列挙していきました。それを数十秒という短い時間で他のメンバーに回していき、新たなアイデアが足されていきます。自分だけでは思いもつかなかった発想が生まれ、その後に行ったチームの枠を超えたフィードバックによって企画が順調に磨かれていきました。

▼各アイデアへの投票の様子

f:id:kenji-hanada:20190917202032j:plain

ゲーム企画が決まったところで、いよいよ開発開始です。ここでは、2日間の開発スケジュールや役割分担決めます。今回驚かされたのは「今日の何時までに○○まで開発が進んでいなければ、軌道修正をする!」という意思決定のマイルストーンをしっかり置けているチームが複数いたことです。短期型ハッカソンの開発スタート時点でここまで議論できている例は珍しく、頼もしく感じました。

▼タスクを整理し、いよいよ開発開始!

f:id:kenji-hanada:20190917202026j:plain

f:id:kenji-hanada:20190917202020j:plain

開発時間は白熱する議論や笑い声が飛び交い、非常に熱量の高い空間であったことが印象的でした。毎年のことではありますが、開発時間はあっという間に過ぎ、2日目いよいよ成果物のプレゼンテーションへと移ります。

各チーム、プレゼンの練習も入念に行い、自分たちのゲームのこだわりや面白みを魅力的に伝えてくれました!また、多くのチームがOne more thing..として、サプライズを準備してくれた点も非常に盛り上がりました!(PC版だけではなくiOSやVRでの実装、ロジックが複雑なゲームの対戦機能の追加など)

▼プレゼンテーションの様子

f:id:kenji-hanada:20190917202017j:plain

発表に対しては、メンターを務めたアカツキメンバーや、参加者からも多くの質問が飛び交いました。

▼アカツキメンバーからの質問タイム

f:id:kenji-hanada:20190917202012j:plain発表後には、各チームのゲームを体験できる試遊会を実施。音声認識のゲームを開発したチームブースからは大声が聞こえるなど、盛り上がりを見せていました(非常に尖ったゲームアイデアだったのですが、内容がアレなので詳細は控えます笑)。

そして、いよいよ運命の結果発表へ。

まずは準優勝チーム。「るつぼロケット」というタイトルを開発してくれたチーム「ナンカレー」が見事に受賞!完成度の高いビジュアルに止まらず、細部のエフェクトや操作性・ゲーム性を備えた作品に審査員の評価が集まりました!準優勝賞品はアカツキオリジナルカレーだったので、結果的にピッタリの受賞でした笑

▼準優勝チーム

f:id:kenji-hanada:20190917202009j:plain

 

そして、栄えある優勝は「Skeleton Board」というカジュアルゲームを開発したチーム「お願いマッスル」でした!敢えて、超シンプルなゲームでの勝負でしたが、テーマを活かしつつ、シームレスな画面遷移やレベルデザインの調整など、リリースレベルまで仕上げてきたことが高く評価され、見事優勝をおさめました!

▼優勝チーム

f:id:kenji-hanada:20190917202005j:plain

#最後に、運営側としての感想

一言で表すと「みんな最高でした!!」。何より、様々なアイデアを形にしていく時のみなさんのキラキラした笑顔。時に悩みながらも課題を解決した際の興奮。見ているこちら側が羨ましくなるくらいの時間をプレゼントしてもらいました。

実は今回、運営側として最初に決めていたことがありました。この夏の出会いを、この場限りで終わらせるのではなく、紡いでいきたいという想いから参加者の同窓会を企画しています。その同窓会を待ち望むには十分過ぎるほどの熱い時間を過ごさせてもらえました!数ヶ月後の再会を約束し、晴れやかにまた新たな挑戦に歩みを進めたみなさんを心から応援しています!

▼懇親会で達成感を分かち合うみなさん

f:id:kenji-hanada:20190917202001j:plain

▼参加者のみなさん、本当にお疲れ様でした!

f:id:kenji-hanada:20190917201953j:plain



アカツキでサーバーサイドエンジニアを経験してみて

こんにちは!今回はサマーインターンで大規模プロジェクトにサーバーサイドとして携わらせていただきましたDopponです!8月1日〜8月23日までみっちりインターンさせていただいて、本当に多くのことを学び、たくさんの気づきがあり、アカツキの雰囲気にどっぷり浸かってきたのでアウトプットしようと思います!

1. チームの雰囲気 

これまで実は他でもインターンを長期で経験してました。なのである程度は働き方のイメージは出来ていたのですが、やっぱり誰にでも不安はある訳で、チームの仲間とちゃんとコミュニケーションを取れたりメンターさんと上手くやれるかなどは気にしていました。

しかし、実際のところそんな心配は杞憂に終わりました笑

まずメンターさんが色々配慮してくださり、自分が全力でやれる環境づくりを整えてくださったのが一番大きかったです。本当にありがとうございました。次にチームの雰囲気も良かったことが印象的です。ゲーム会社だからって事もあるからか(?)、好きなゲームの話だったり好きなアニメについて話せばだいたい通じるので、馴染むのにそう時間はかからなかったです笑

自分のサーバーサイドのメンバーはだいたい8人ぐらいで、それぞれが強みを持っている印象で良くこんな人たちを集めてチームを作りあげたなって正直に思いました。

なので本当に雰囲気も良くて、そうそう会って話を聞く事すら出来ないエンジニアのもとで一緒に働けた事が誇りに思います。

じゃあ、自分の大好きなメンターさんと一緒にランチに連れてってもらってインターン中一番美味しかったカレーの写真を載せて、どんな開発をしたのか話して行こうと思います!

f:id:dopponpon:20190823092052j:plain

 

2. 開発 

実際のインターン内容ですが、ざっくりあるゲームタイトルの友達機能の周りの改修を手伝いました。
メンターさんとお話をする中で、今後に向けて友達機能周りを充実させていくのが良さそう、と思ったのがきっかけです。

実は初日のミーティングで、色々残っているタスクなどを共有していただいてその中でこの友達機能の改善に興味が湧いたのも大きいです。実は自分と同じタイミングで同じチームに配属されたインターン生は別タスクでログの解析を行ったりと、結構やることはバラバラで自分で手をあげて選ぶって感じがありました!

こういった雰囲気はアカツキの会社説明のときに良く聞いていたので、そのまんまだなと思いました。

 

3. 今後について 

この短期間で本当に色々な経験をさせていただいて、学ぶこと、反省することが多かったです。友達機能の設計は考え所が多く、自分でも以前につまづいていた箇所だったので、今回実際にどういう設計で作られているのかを知れたのは、それだけでも大きな収穫でした。
もちろんそれだけでなく、アカツキの文化に触れられたこと、どういう風に開発に向き合い、どういうこだわりを持って進めているのかを体感できたこともとても良かったです。
また、今回のインターンで全国から集まった学生と交流することで自分の至らない点を痛感することもあり、もっと努力しなければと励みにもなりました。どこかでこのお礼ができるようになるためにも、沢山勉強してもっと力をつけようと思います!

アカツキ就業型インターン8月の部

はじめまして、この度アカツキのサマーインターンに参加させていただいたので、その参加報告をいたします。

経緯

魔法のスプレッドシートで知りました。 ゲーム制作に昔から憧れがあり、やっている内容も面白そうだったので、応募しました。 なにか未経験のものがやりたいと思い、UnityとGo(サーバ)で応募しましたが、 面接で話し合った結果railsのプロジェクトに参加することになりました。 当初は希望していたところと違っていて残念だなと思っていましたが、 経験のあるrailsで参加できて、サービスの理解や設計により注力できたかなと思います。

インターンの応募

僕の場合は コーディングテスト→人事面接→技術面接という流れで進みました。

コーディングテストはプログラムを書いたことがある人ならまず通るような内容でした。 業務内容に比べるとかなり簡単だと思います。

面接は2回あり、その後に合否の連絡とメンターの方と何をやるか決める面談をしました。 技術面接でインフラ(クラウドですが)とかを触った経験があったので、そのあたりの話をしたような気がします。 似たようなことをやっていたのがよかったのでしょうか。

会社の雰囲気

支給されるPCは最新のMacBook Proでした。画面のサイズとキーボードの配列を選択できます。 僕は英字配列しか打てない人なので、キー配列を選べたのはうれしかったです。

あと、オフィスがきれいでした。オフィスの中にはセルフコンビニもあります。 ゲーム会社なのでゲーム好きな人が多いかなと思っていましたが、人それぞれであまりゲームをしない人も多かったです。 ただ僕はサーバサイドで採用されましたが、 フロントの方がゲーム好きの方が多いような気がします。

インターンの内容

業務以外

インターンの方は、数回分ランチの枠が用意されていて、 自分が参加しているチーム、職種以外の方と食事ができる機会があります。 ぼくはフロントエンドのエンジニアの方や、 研究開発のエンジニアの方とランチに行かせてもらいました。 そこでアカツキの働き方や、それぞれの分野の詳しい話を聞けたのでとてもいい経験になりました。

業務

10時~19時の3週間(16日間)の勤務でした。

実際の業務と同じような内容でした(と僕は感じました)。 時給の高さを考えるとこれぐらいは期待されているのかもしれません。 最初の3日間ぐらいは少し大変ですが、慣れてくると楽しいです。 自分の変更がマージされるときは嬉しいものです。

ソーシャルゲームのサーバサイドということもあり、 大規模なトラフィックが想定されています。

このような大規模なサービスに学生のうちから触れられるのはとてもいい経験だと思いました。

今回のインターンでは2、3個の新規のAPIを実装しました。 それに伴ってデータベースの新規設計も行いました。

仕様、設計が確定しているものについては実装は楽でしたが、 開発が始まってから数年経ち、機能やテーブルも多岐にわたるので、 個々の機能を理解するまでが大変でした。 なので新規機能の開発を始めるときは、既存機能の仕様、コードを確認し、 そこから新規機能の仕様を確認し、実装を始めるという感じでした。

感想

短期のインターンでは実際の業務とは違うことをやらされたりして、満足行かないことは多いと思いますが、 今回のインターンはリリースされているゲームのバックエンドの実装ということで、とてもいい経験になりました。

インターンでゲームのデバッグツール機能開発をした話

こんにちは、アカツキサマーインターンシップ2019第2期生の伊藤です。 

今回、8/1〜8/23の平日16日の間*1、株式会社アカツキでサーバサイドエンジニアとして就業してきました。

この場を借りて、インターンで何をやったのか、色々アレコレどうだったのかを振り返りたいと思います。

インターン内定まで

4月のサポーターズ逆求人イベントで、アカツキの人事さんとエンジニアの方とお話する機会がありました。

丁度ゲーム系のインターンを探していたので、イベント後早速選考を進めることにし、5月中にはインターンの内定を得ることができました。選考自体はプログラミングのWebテストと1回の面接のみで、特に対策等は行っていません。

やったこと

僕はサーバサイドのコースで応募したので、面接の段階でRubyのコースとElixirのコースを選ぶタイミングがありました。元々はゲームサーバのプロダクションコードを触りたいなと思っていたのですが、以前から気になっていたElixirにここで触れるのも巡り合わせかなと思い、Elixirのコースを選択しました。*2内容はデバッグツールの開発ということで、個人的にゲーム開発を行っている自身としても良い経験を得られそうだと感じていました。

さて、実際にインターンでやったことですが、主に以下の3つの機能実装となります。

  • デバッグツールのパーティ編成機能
  • デバッグツールのパーティメンバー能力値操作機能
  • デバッグツールのパーティメンバースキル操作機能

以上を実装する背景は、テスト環境において、様々なレベルの敵とのバトルのデバッグや、特定のゲーム進行状況を再現しづらいという点を解消するというものでした。デバッグはプログラムに詳しくない方々も行うので、簡単な操作で複雑な状況を再現出来ることが必要不可欠でした。

今回担当したタイトルでは、ゲームロジックがサーバに寄った設計になっているため、デバッグツールはWebアプリケーションとして実装されています。技術的には、WebアプリケーションフレームワークとしてPhoenix、UIフレームワークとしてVue.jsが採用されています。

詰まったこと

初めて触れる言語ということもあり、Elixir周りで躓くことが多々ありました。また、Vue.jsに慣れていないためVue.jsの気持ちに沿ったデータ構造設計が行えず、最終的にリファクタリング作業をすることで無駄に工数を増やしてしまうということがありました。

以下でざっくり振り返ります。

Elixirの詰まりポイント

Elixirは動的型付けではありますが、Typespecという型表記法やDialyzerという静的型解析ツールがあり、比較的型に対する意識が高い言語です。

また、Elixirはトラディショナルなオブジェクト指向言語とは異なり、クラスという概念はありません。*3さらに継承も無いため、それぞれ独立した構造体、リストやマップなどによってデータを表現することになります。この辺はなんとなくGo言語に近い雰囲気を感じます。

なるほどプリミティブと構造体で上手いことデータ構造を表現して、Dialyzerを用いれば静的型付け言語と同じような気持ちでコードを書けそうだ、というのが最初の感想でした。

ここで問題となったのが、DialyzerはStructural Subtypingでは無さそう(=Nominal Subtyping)ということでした。Nominal Subtypingとは型名だけでデータ構造を特定するような型システムのことで、C言語やJavaなどほとんどの言語ではこちらが採用されているようです。対となるStructural Subtypingは、ある型のデータ構造を含む、より大きなデータ構造があった場合に、大きい方を小さい方の型としても扱うことが出来るような型システムです。こちらはML系言語(OCamlとか)などで採用されているようです。

Elixirのような継承を許さない構造体を扱う言語の静的型解析にはStructural Subtypingを期待してしまうのですが、どうやら違うようです。なので、基本的に複数の構造体の結合はMapとして表現するしかない、ということが起きます。そもそもMap.mergeしているのだからMapになるだろうと言われればそれまでですが。厳密にやりたいなら、その複数の構造体の結合を新たな構造体として定義する必要があります。

静的型解析が要らないというのであればこれは問題ですら無いのですが*4、新たに巨大なコードベースに立ち向かうには型という案内図があった方が都合が良いです。その案内図(型定義)が大雑把(map)過ぎて、案内図の機能を果たしていないというのが今回の問題でした。*5

素人の感想ですが、Ectoを使っているとやりがちな問題なのかな?と思いました。

なぜこのようなことになっているのか詳しく理由を聞くと、途中からDialyzerを導入したプロジェクトなので現状仕方なくそうしているということでした。問題意識はあるようですので、今後改善されて行くのだろうなと思います。

Vue.jsの詰まりポイント

Vue.jsはリアクティブにデータバインディングしてくれるイマドキなフロントエンドフレームワークなのですが、どこまでならリアクティブにバインディングしてくれるのかを理解していないと辛いことになります(なりました)。特に変なデータ更新の仕方をするとハマりがちなことかと思います。

Vue.jsはdataで定義したフィールドは追跡してくれるのですが、新たに追加されたフィールドは基本的に面倒を見てくれません。内部的にはクラスのsetterを利用しているため、テンプレートの方で指定しているフィールドがなければそのsetterは生成されないようです。*6

結論として、データはsetterが引かれるような更新の仕方をするべきでした。

感想

田舎の大学に通っているため、3週間とはいえ東京で生きていけるか不安でしたが、意外となんとかなりました。まあ、人ごみと暑さにはなかなか慣れませんが…

遠方(岩手)からの参加だったのでマンスリーマンションを用意して頂きましたが、結構快適でした。洗濯機・冷蔵庫・電子レンジ・IH以外ほとんど何も無いので、ある程度日用品調達は必要でしたが、真下にコンビニがあったので特に困ることも無く。アカツキのある目黒まで電車で2駅なので、通勤もそれほど苦ではありませんでした。

業務内容はメンターさんが事前にきっちりタスク化してくださっていたので、ほとんどやるだけと言う感じでした。個人的には、もう少し他の社員さんとも絡みたかったなという感想です。

全体を通して満足感のあるインターンだったと感じています。

*1:途中、学会で抜けたので実際は14日間

*2:実はRubyもまともに触ったことは無いが、関数型言語の側面が強いElixirの方が興味が強かった

*3:その代わりプロトコルという機能でオブジェクト指向の特徴の1つであるポリモルフィズムを実現している

*4:実装上は問題無い

*5:一言で言うとGoの埋め込み型が欲しい

*6:動的に生やす方法はある

インターンでクライアントエンジニアを体験しました

はじめまして。ハチナイのクライアントエンジニアインターンとしてお世話になりました、AxIと申します。
今回15日ほどハチナイの開発としてお邪魔させていただきました。
僕はゲーム開発は初めてだったのですが今回のインターンで、自分で改善点を見つけて、ある程度実装するところまで経験させていただきました。

目次

インターン開始前

一週間前に説明をいただき、UnityとGitの復習を行いました。

インターン開始

まずは改善点の探索ということで、仕様書を20時間ほど読み、仕様書で与えたいユーザー体験と僕が自分でプレイして経験した体験のどこにギャップがあるのかを考えました。また、1ユーザーとして不便なところやわかりにくいところを考えリストアップしました。
それらの改善点を抜粋し、開発チーム内の様々な職種の方のまえで発表とディスカッションを行い、理にかなっている物の中でインターンという短い時間の中で可能な改善点を選定しました。

課題決定

取り組む課題は、デレストのカード詳細のユーザーフレンドリーな確認方法の実装としました。
従来、デレストオーダー編成時、サポート選択時にはアクションカードの効果を三つ以下の小さなアイコンで理解しなければならなく、特に初心者にとっては難しい環境でした。(対象カードを所持しているキャラアイコンを長押しすると、選手詳細から説明文をみることが可能)
そのため、それらの画面で軽いアクションで確認できる機能は、初期ユーザーのデレストへのハードルを下げる、中長期ユーザーのオーダー編成時の煩雑さを下げるという点でメリットが期待されました。

実装

あまり触れたことのないUnityの2D周り(3Dは経験あり)、Git、ゲーム開発という環境で不安でしたが、社員さんの優しいサポートの元、牛歩ではありましたが実装を進めました。
インターン中にすべてのコード理解は不可能と感じたため、まだ見ぬ他の機能を阻害しないように基本的に現状の機能内に似た機能を探し、その実装方法を真似て実装するというカメレオン的なコーディングを意識しました。

初期想定ではカードタップ時にポップアップ表示、ポップアップ表示時にポップアップ以外タップでポップアップ消去という機能でしたが、実際に実機で触れてみたところ、ポップアップ消去動作が煩雑であったため、カードに触れている間のみポップアップを表示という機能に変更しました。
このように実機でなんどもビルドし、ユーザーの邪魔にならないポップアップの表示方法を検討しました。

f:id:AxI:20190628174437p:plain
実装結果
実装の詳細は成果発表の時に使ったスライドの抜粋として、末尾に添付しておきます。

インターンを終えて

反省点

迷惑をかけたくないという感情が強すぎ、自分でできる可能性があるところはとことん遠慮がちになってしまい逆に迷惑をかけてしまったように感じました。
配慮と遠慮の区別をつけられるよう今後精進したいです。

良かった点

仕様書を読んで改善点をプレゼンし、仕様書を書いて実装して、実機で動かして、使ってみて使ってもらって、改善して。と一連の流れを体験できたのは、ゲーム業界未経験の僕にとってかなり価値のあるものだったと思います。
また、問題提起や発表、コーディングは好評をいただけました。
問題提起や発表は学問や研究と繋がる面が多々あったので、普段頑張っていることが社会に出ても役に立つ実感ができてとても嬉しかったです。
コーディングも実務は未経験でしたが、実装をしていく中で授業や研究で学んできたことがしっかり役に立ってる感が味わえ、今後卒業に向けた研究へのモチベーションにもつながりました。

タイミングが良かった

アカツキの9周年祭、ハチナイ の2周年祭がインターン中にあり、インターン生ながら参加させていただきました。

f:id:AxI:20190628173036j:plain
かわいいケーキ
インターン生だろうが関係なく受け入れていただいた面や、ハチナイのお祝いに他の部署の人たちが御祝品もって突入してくる雰囲気はとても暖かでした。

成果発表の時に使ったスライドの抜粋

f:id:ytfkbc:20190729115421p:plainf:id:ytfkbc:20190729115700p:plainf:id:ytfkbc:20190729115718p:plainf:id:ytfkbc:20190729115726p:plainf:id:ytfkbc:20190729115736p:plainf:id:ytfkbc:20190729115745p:plainf:id:ytfkbc:20190729115754p:plainf:id:ytfkbc:20190729115803p:plainf:id:ytfkbc:20190729115830p:plainf:id:ytfkbc:20190729115839p:plainf:id:ytfkbc:20190729115922p:plainf:id:ytfkbc:20190729115930p:plainf:id:ytfkbc:20190729115940p:plainf:id:ytfkbc:20190729115951p:plainf:id:ytfkbc:20190729115959p:plainf:id:ytfkbc:20190729120007p:plainf:id:ytfkbc:20190729120018p:plainf:id:ytfkbc:20190729120027p:plainf:id:ytfkbc:20190729120038p:plainf:id:ytfkbc:20190729120048p:plainf:id:ytfkbc:20190729120059p:plainf:id:ytfkbc:20190729120120p:plainf:id:ytfkbc:20190729120130p:plainf:id:ytfkbc:20190729120139p:plainf:id:ytfkbc:20190729120153p:plainf:id:ytfkbc:20190729120203p:plainf:id:ytfkbc:20190729120238p:plainf:id:ytfkbc:20190729120250p:plainf:id:ytfkbc:20190729120301p:plainf:id:ytfkbc:20190729120329p:plainf:id:ytfkbc:20190729120340p:plainf:id:ytfkbc:20190729120353p:plainf:id:ytfkbc:20190729120407p:plainf:id:ytfkbc:20190729120419p:plain