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

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

良いチーム構成のための図解思考法

こんにちは、ゆのん(id:yunon_phys)です。みなさん、良いチームを作っていますか? 良いプロダクトを生み出すためには、良いチームであることが必要です。 そして、良いチームであるためには、チーム構成が適切になっていないといけません。 今回は、どうやったら良いチーム構成が出来るか、というのを考えるときの思考ツールをご紹介します。

チーム構成はトレードオフの関係がある

モバイルゲームはリリースがゴールではなく、むしろリリースがスタートです。 リリースしたら何年も運用することになり、プロダクトチームは数ヶ月~1年後を見据えてアセットを用意していきます。 そのため、いかに普段から効率的にアウトプットを出せるプロダクト組織を作ることが重要です。*1 効率的にアウトプットを出すためには様々な工夫をしますが、プロダクト組織内のチーム構成も一つの鍵です。

*1:クオリティを上げる方向に時間を使えるようにもなるので、効率化はゲーム開発においてとても重要である

続きを読む

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:動的に生やす方法はある