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

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

アカツキのサーバサイドインターンに参加しました。

こんにちは。シュウと申します。

この度、3/1〜3/31の一ヶ月間、アカツキのサーバサイド就業型インターンに参加しました。

この短い一ヶ月間で沢山のことを体験し、勉強しましたので、実際に取り組んだタスクや所感を共有させていただきたいと思います。

はじめに

自己紹介

私は現在専門学校の三年生で、ゲームプログラミングを専攻しています。台湾で文系の学科を卒業しましたが、昔からずっとプログラミング、特にサーバサイドに興味があり、留学生として今の学校に入って、ゲームのサーバサイドを中心に就職活動をしています。

アカツキの文化や雰囲気、ゲーム業界の実際の現場の仕事を詳しく知るために、今回のインターンに参加いたしました。

インターンの実施内容

今回のインターンは「八月のシンデレラナイン」のサーバサイドインターンでした。私の実際に取り組んだタスクは以下の通りです。

  1. 管理サイトUIの小規模修正
  2. セットアップガイドに対してのフィードバック
  3. 新規ミッションの実装
  4. デバッグ用コマンドラインツールの作成

各タスクの概要は以下となります。

管理サイトUIの小規模修正

デバッグ用にキャラクターを追加する際、選択肢にプレイヤーがプレイできないキャラも混じっていたので、プランナーにとってとても不便でした。そのため、選択肢の中にプレイできないキャラが入らないように改善するという改修を行いました。

セットアップガイドに対してのフィードバック

アカツキには、インターン生や新入社員を対象にして、開発環境をより早く、より便利にセットアップするためのガイドがあります。このガイドの最初のバージョンは、既にセットアップされた開発環境を前提に書かれたものでしたので、何も入っていない状態のパソコンにインストール及びダウンロードするツールについての説明に漏れがありました。

もともと用意されたタスクではありませんでしたが、自分の苦労したところを、今後他の人が再び苦労しないよう、ガイドへのフィードバックを文章化して書いてみました。

新規ミッションの実装

「八月のシンデレラナイン」では、初心者のために、既に様々なミッションを用意していますが、プレイヤーにより沢山のゲームの機能を体験してもらうため、新規ミッションが作られ続けています。

このタスクではそれらのミッションのうち、いくつかの処理を実装しました。

デバッグ用コマンドラインツールの作成

スマホゲームは、クライアントとサーバの通信が多いです。ゲームのデータなどを取得するため、毎回HTTPリクエストをサーバに送り、サーバから戻った応答を解析するのはごく自然なことですが、開発中にサーバに対してデータを送信する際に、毎回特殊な処理をする必要がありとても不便でした。

このタスクの目標は、開発中により便利にHTTPリクエストをサーバに送ったり、レスポンスを受けたりするためのコマンドラインツールの開発でした。

振り返り

ゲームプログラミングを専攻しているものの、今回のインターンを通じて改めて認識及び学んだことは以下の通りです。

ゲーム作りは一人ではできない、「チーム」で!

仕様の確認は、決して自分ひとりで決めることではなく、チームメンバーと確認した上で進めなくてはなりません。また、ユーザーに最高の体験を提供するため、実装された機能を検証する人も沢山います。したがって、コードを書けるだけでエンジニアになれるとは限らず、コミュニケーションも大事だということを実感しました。

意図的にコードを書くこと

学生時代に就職活動用の作品を作っても、実際のプロダクションコードとは比べ物になりません。自分の作品であれば、他の人に自分の書いたコードが分からなくてもあまり気にすることはありませんが、実際の現場でそんなコードを書いてしまうと、チームワークに支障をきたしてしまいます。今回のインターンでは、意図的にコードを書く重要性を学びました。

ゲーム作りにはみんなそれぞれの役割がある

分からないところ、つまっているところ、自分の伝えたいこと、今までの流れや試したこと、可能の解決方法など、自分の伝えたいことをきちんと文章化することは大事です。現場のチームメンバーは忙しく、学校の先生みたいにずっと自分のやっていることをフォローしてくれるわけではありません。

プラスアルファで一歩先を考えること

授業のように、与えられた仕様の通り実装するだけではなく、それぞれ担当する分野を問わず、一歩先を見据え、他の人が考えていなかったことを考えて提案をすれば、チームメンバーの負荷も軽減することができます。

アカツキの文化・環境

風通しがいい

自分の考えと言いたいことを遠慮せずに言えるのはとても素敵で働きやすい環境です。また、インターン生が来る度に、そのインターン生のSlackチャンネルを用意して、問題があっても素早く対応してくれるので大変助かりました。フルリモートインターンなので、参加する前はコミュニケーションがうまく取れるのかどうか心配していましたが、こういう文化のおかげで、一ヶ月間にコミュニケーションの問題は一切ありませんでした。

感情と心を重視しながら、論理性も重視

コードを書く時も、何かを提案する時も、アカツキでは心や感情を重視しつつも、同時に論理性も重視しています。自分の伝えたいことや自分が思うことを文章化するのは大事ですが、自分の考えが理論的に筋が通っているかを考えることも重要だと感じました。

成長しやすい環境

メンターや現場のチームメンバーは、いきなり答えを提示するのではなく、いつもヒントを出しながら、自分で考えて答えを見つけることをサポートしてくれます。こういう環境だからこそ、未知への挑戦も乗り越えることができるのだと思います。

おしゃれ・面白いオフィス環境

「ゲームを作る前に、まず自分たちが楽しく働けるのかどうかが大事」というのを多くの企業も謳っていますが、アカツキのオフィス見学を通じて、アカツキはそういう考えを体現しているなと改めて感じました。プレッシャーがなく居心地がいい、落ち着いている環境でありながらもっとオフィスを面白くするための工夫があちこちに見られます。また、社員たちが持ってきた面白い物が多く、自分の好きな形で自分の席を飾るのも見られたので、とても個性と人が重視されている会社のイメージが強いです。

まとめ

一ヶ月の間にたくさんサポートをいただいて本当にお世話になりました。あまりにも学生としてやっていることと違っており、色々なチャレンジがありました。みなさんのおかげでいろいろなチャレンジを乗り越えて、エンジニアの仕事の醍醐味を感じました。学びを応援する文化だからこそ、一ヶ月間、最初から最後まで楽しくインターンをすることができました!

それに、最後は念願のオフィス見学ができて、正直自分はすごく感動しました!

一ヶ月間、ありがとうございました!

アカツキのクライアントサイドインターンで何を学んだか

この記事は、アカツキで3週間の就業型インターンに参加して得た所見をまとめた体験記になります。

インターンについて

今回のインターンでは、スマホゲームのクライアントサイドのチームで3週間お世話になりました。

新型コロナウイルスの影響で、インターンはフルリモートで行われました。やりとりにはZoomやSlackを使うことになるので、実際のオフィスでの雰囲気などが掴めなかったのは残念に思います。

ありがたいことに、実際にオフィスに行って見学などをさせていただくというお話もいただいたのですが、残念ながら都合が合わず参加できませんでした。

インターン前の流れとしては、開始1ヶ月前にメンターになる方との面談、1週間前に入社オリエンを行い、それから3週間のインターンに参加するという形式でした。

やったこと

今回私はクライアントサイドのチームで「開発メンバーが喜ぶデバッグ機能を開発する」というテーマのもと、インターンを行いました。

課題設定

"開発メンバーが喜ぶ"ということで、実際にどのような機能が求められているのかを開発に携わっているメンバーにヒアリングしました。今回は一から課題を探していくのではなく、改善要望のリストから選んだものについて深掘りしていきます。

ここでは「なぜ」その機能が必要なのかを聞いて、場合によっては別の提案をしていくことが重要になります。エンジニアの目的は課題解決でありプログラミングは手段でしかないため、課題の根本的な原因を突き詰めることで解決に導いていきます。

今回は画面に描画されたデバッグ用のボタンが邪魔なので設定から消せるようにしたいという要望でしたが、「なぜ」を聞いていった結果、本番環境に近い画面が欲しいということがわかりました。

設計

設計ではプレゼンと同じように流れが重要になります。

私は初めは概要→目的→使い方の順で書いていたのですが、設計をレビューしていただいた結果、目的→概要→使い方→実現方法→今後の展望という流れになりました。

はじめに目的を持ってくることで、読んでいる人がなぜこの機能を作っているのかを知ることができます。

また、レビューで追加された実現方法ですが、これを書かないとエンジニア間で認識の違いが起きてしまうことが考えられます。さらにここでは複数の解を想定し、どういった理由でどの案を採用したのかを書くことで、より説得力を持たせられます。

実装

いよいよ実装になりますが、設計をしっかりやったことや機能自体はかなり単純だったこともあり一瞬で終わりました。

確認

実装が終わったのでプルリクを送ってマージしてもらいたいところですが、その前に必要な工程が一つあります。機能の依頼者に実装したものを確認してもらいます。

もし実装したものが依頼者の想像と違った場合、マージしてから修正するのは非常に手間がかかるのであらかじめ確認を取ることになります。

実装したものについては問題ないと確認が取れたのですが、実装した画面をよく見るとデバッグ表示のような数値が描画されていることに気づきました。

今回の目的は本番環境に近い画面が欲しいということなので、これも消したほうがいいのではないでしょうか。依頼者の方に確認したところ消して欲しいと言われたので、こちらについても消していくことになりました。

課題設定の際に「なぜ」を掘り下げたことで、ここで新しい課題を発見することができました。

追加の実装

デバッグ表示が残っている箇所を調査すると、いくつかの箇所のデバッグ表示が残っていることがわかったため、すべて非表示にできるように実装を進めていきます。

プルリク&マージ

追加の実装が終わったら今度こそプルリクとマージです。今回は大きな修正点もなかったのですんなりマージされました。

機能がマージされたので、これで依頼者の方が当該ブランチで機能を使えるようになりました。

学んだこと

3週間という短い期間のインターンではありましたが、多くのことを学ぶことができました。

GitHubを使ったチーム開発の流れ

これまでチーム開発の経験が少なかったので、とても勉強になりました。

ブランチ周りの機能も一人で開発するときは面倒で使っていなかったのですが、今回はその辺りも学ぶいい機会になりました。

既存のコードをちゃんと読む

チームでの実装となると、既存のコードのほとんどは他の人が書いたものになります。そのためコードをいまいち理解しないまま利用してしまうと、エラーが起きた際にどこが原因なのかがわかりにくくなってしまいます。

また、同じことができる機能が複数あったりもするので、そのときはコードを読むことでどちらがより適切なのかを判断する必要が出てきます。

ただ、既存のコードを読んで理解することは大切ですが、それを信頼するのはまた話が変わってきます。もっと良い実装方法があるかもしれないので、飽くまで既存のコードは参考程度ということになります。

コードに限らず命名は大事

コードを書くとき、変数名や関数名を適切につけることは非常に大切です。しかし、コードだけでなく仕様書やプルリクでもこれは大切になってきます。

いろんな意味にとれる書き方をしてしまうと、読む人に不親切なだけでなく後々認識の違いから問題が起きる可能性もあります。

ちゃんとした日本語を使うことを心がけることで、チームでの連携がより取りやすくなっていきます。

エンジニアの仕事はコーディングだけじゃない

今回のインターンに参加するまで、エンジニア職はコードを書く時間がほとんどなんだろうと思っていたのですが、実際は話し合いや設計の比重が大きいようです。

そのため、技術力はもちろんですがコミュニケーション能力も重要になるでしょう。

まとめ

インターンに参加する前の自分と比較して、かなり成長することができたのではないかと思います。

フルリモートという環境ではありましたが、アカツキの空気を感じることができた3週間でした。ありがとうございました。

What is サーバーサイドの10日間

2/22(月) ~ 3/8(月)の10日間、アカツキさん(以下敬称略)のサーバーサイドエンジニアとしてインターンに参加したBapliscaです。 

はじめに

アカツキが開発しているゲームの中で、「八月のシンデレラナイン」(以下ハチナイ)のチームに配属されました。

インターンに参加する前からハチナイをプレイしていたので、現場でどのように開発しているか非常に興味がありました。

自己紹介

地方国立大学の修士1年生です。

大学のゲーム制作サークルでゲーム制作をしています。

制作したゲームの中で、最近だと大学3年〜4年にかけて制作した音声認識を使ったゲーム「ボイストラベラー」があります(宣伝)。

youtu.be

 

学生のゲーム制作はクライアント側で完結するような小規模なものであり、サーバーサイド開発をしてみたいと思いました。

縁あって、アカツキでインターンする機会をいただけました。

インターン前

人事の方とメンターの方とそれぞれお話ししました。

人事の方とは、インターンのランチ中に話したい人や、インターン前の悩みごとなどを聞いていただけました。

メンターの方とは、やる or やりたいタスクについて話しました。

また、サーバーサイドで用いるRuby on Railsの経験がなかったため、事前にRubyの基本文法とRailsの勉強をしていました。

タスク内容

「同じ期間限定キャラのシーンスカウトが近い間隔でスケジューリングされているのを事前に効率的に察知できる機能」について取り組みました。

このタスクの背景について説明させていただきます。

期間限定ガチャを実施した翌日に、同ガチャを復刻(再開)することは、一般消費者に表示された期間における取引の有利性を誤認させることになるため有利誤認表示にあたる場合があります。

これを防ぐためにハチナイの検証チームでは、チェックシートで対応していました。

そこで、自動化できないかというのが今回のタスクになります。

 

具体的には、マスターデータにスカウト情報を入れる際に検知する機能を作ります。

方針として、既存のデータベースのテーブルのアソシエーションを把握し、適切なテーブルから探索する策を取りました。

また今まで手動で行っていた検証をコードに落とすにあたりハチナイの企画・検証の方にヒアリングを行いました。

ヒアリングの結果、期間限定キャラと恒常キャラの管理が、マスタデータの処理的に扱いやすい形ではなかったので、他に手段を探しました。

 

具体的にはガチャ同士の集合を用いて、期間限定キャラの集合を取っています。

この手段でカラム追加を回避しました。

タスクについての難易度はそれほど高くないのですが、エンジニアだけでなく、企画・検証チームとの連携や提案をする必要があったため要件定義に時間を要しました。

要件定義についてのやりとりで、Slackのスレッドで50件を超える会話になりました。

また、実装した結果から再度要件定義する場合があったので、そこは柔軟で良かったと感じています。

要件定義の後は、コードを書きプルリクをする一般的な流れでした。

最後にRSpec を用いたテストコードを書きました。

インターンを通して感想

ランチ

インターンのランチでチームメンバー方や同時期のインターン生とお話しする機会がありました。

また、運良くチームディナーに招待いただき、業務外の交流ができたのは新鮮でした。特にamong usをプレイできて感動しております。

Slackのチャンネルにたくさん招待していただき、いくつもの会話が見える状態だったので、オンラインであっても閉塞感を覚えることはなく、リモートの制約はなかったかなと思います。

コミュニケーション

オンラインのため、文字ベースでの会話がメインになっています。

そのためSlackで作業ログを残すようにしていました。

また業務を通じて分からない際にはSlack or プルリクコメント or zoomの画面共有を通して、かつ詳しいことを聞く前に前提などをしっかり伝えるように心がけました。

上記を心がけた結果コミュニケーションは上手く取れたかなと思います。

 

おわりに

10日間という短い間でしたが、実務を通してこれまでの経験を生かせる点や、課題・不足点を感じ取ることができました。

学びが多い充実したインターンだったと感じています!

メンターを始めとした関係者の皆さま、大変お世話になりました。

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

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

2/22(月)に、本年度2回目となる「Akatsuki Geek Live2020-2021 Vol.2」を開催しました!前回同様、オンライン実施となりましたが、50名以上の方にご参加をいただきました!参加いただいたみなさま、ありがとうございました!楽しんでいただけていたら本当に嬉しいです。今回は、イベント当日の様子をレポートしたいと思います!

※わたしはアカツキの新卒採用担当、めちゃくちゃ文系です・・・。そんなわたしでもたのしく聞かせていただきましたが、エンジニアのみなさんの目線とは違うかもしれません。お手柔らかに。

「Akatsuki Geek Live」とは?

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

 

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

aktsk.connpass.com

 

 #当日の様子

前回同様、オンラインでの開催となりました。2回目ということもあり、少しずつ運営メンバーも慣れてきました!

前回は、アカツキオフィスの「ShineLounge(シャインラウンジ)」から配信したのですが、今回は「Historie(ヒストリエ)」というオフィス内の図書スペースより、採用担当のながぬまと、アカツキエンジニアのしまむらが司会でお届けしました。

f:id:megumikosada:20210305123234j:plain

(こんな感じの場所です。詳しくはこちらに)

はじめに採用担当のもりしまからスタートし、アカツキのエンジニア3名、来春入社予定の内定者2名の計6名が登壇。
登壇者から資料掲載の承諾をいただきましたので、下記にスライドをご紹介します!

 

@もりしまさん(アカツキ/採用担当)

なるほどよくわかる!アカツキ理解のヒント 

トップバッターはエンジニアの採用を担当しているもりしまさん。
アカツキの会社説明に加えて、学生のみなさんがなかなか聞きづらいポイントを解説しました!

 【登壇資料】

 

▼@菱谷さん(アカツキ/クライアントエンジニア)

鏡のような「映り込み」を表現するシェーダー

エンジニアのトップバッターはアカツキでクライアントエンジニアをしている菱谷さんです。3DCGが大好きで。と淡々と話す姿がギャップがあって印象的でした。映り込みを画面上に表現する技術について発表していただきましたが、発表後の質疑応答では、映画と比較してゲームならではの観点でお答えいただき、学生さんは非常に勉強になったのではないでしょうか?

【登壇資料】

 

▼@坂元さん(アカツキ/クライアントエンジニア)

必殺技ロジックの実装を半自動化する機構を作った話
司会のしまむらからの「エンジニアの一段上の仕事をしている」というコメントが印象的でした。エンジニアが本来集中すべきことに集中できるように、できる部分は自動化し再現性を持たせ、人にしかできない創作をしていくことで、コンテンツのクオリティが上がっていくという最高の仕事を共有いただいた気がします・・・!

【登壇資料】

 

▼@柴原涼さん(アカツキ/サーバーサイドエンジニア)

2048作ってみた

大好きなゲーム2048が出てきてめちゃくちゃ興奮しました。(私情ですみません)
関数に分割できず、辛かった・・・やり切りました。という話が出た際に、チャット欄では、「頭がおかしい」という褒め言葉(ですよね?)が飛び出していました!(笑)
【登壇資料】

 

▼@こけもすさん(学生/アカツキ21年卒内定者)

IPFSとウェブゲーム

IPFSという新しい技術について発表いただきました。発展途上の技術は課題もあるけど、未来があるな~とワクワクする内容でした。ドイツと日本をつないで旧技術との比較を行っている部分では速度がかなり違って衝撃!
そして、発表後の質疑応答がすごく活発で、エンジニア(と目指す学生さん)の新しい技術への関心の強さに圧倒されました・・・!

【登壇資料】

 

▼@軍曹さん(学生/アカツキ21年卒内定者)

UnityVR開発! ~カジュアル"体験"制作記~」

こけもすさんと同じく、いよいよ来月4月に新卒としてご入社いただく予定の軍曹さんにVRについて発表していただきました。
わたしも「VR=仮想現実」だと思っていたので、潜りです・・・。(潜れてもないか)
非エンジニアのわたしにも前半部分は非常にわかりやすいく、後半部分は、難しい、初期投資がかかりそう、部屋が広くないとできない・・・となかなか手が出にくいと思われがちなVR開発に、チャレンジしてみようかな?と思わせるような、そんな内容でした。

【登壇資料】

 

#LTを経て懇親会!

チャットで盛り上げてくださる皆さんのおかげもあり、発表者も楽しくLT登壇を終えられました。少し休憩を挟んでから懇親会パートに入ります。
司会の2人がパーソナリティーのラジオのように進んでいきました。
技術の話や、アカツキ社内のことについてなどたくさんのご質問をいただき、アカツキのキッズ向けVtuberクマーバちゃんのぬいぐるみも登場して、和気あいあいとした雰囲気で残りのお時間を過ごすことができました。
やはり、みなさんと直接お会いして懇親会ができないのは本当に寂しく残念なのですが、オンラインだからこそ、たくさんの地域の方にご参加いただけて、オンラインだからこその出会いもあったと感じています!

改めて、ご参加いただいた学生の皆さま、登壇していただいたエンジニアの皆さま、本当にありがとうございました!

 

当日のスクショを最後に。
みんなビデオオフ・・・!笑 

f:id:megumikosada:20210310110427p:plain

クマーバちゃんも登場してました!

f:id:megumikosada:20210310110421p:plain

今回のLT会が、エンジニアの皆さんの気付きや新たな挑戦のきっかけになっていれば嬉しいです。

Rubyへの累計コミット数18,000以上。アカツキ所属のパッチモンスター中田さんに機能の開発秘話を聞いた

直感的な文法や生産性の高さから、世界中の人々に愛されるオブジェクト指向スクリプト言語Ruby。この言語には継続的に新しい機能や文法が追加されており、利便性が向上し続けています。コミッターの方々による日々の努力が、Rubyの改善を支えているのです。

コミッターのなかでも、とりわけRubyに大きな貢献をしてきたのがアカツキでフルタイムRubyコミッターを務める中田伸悦さん。(アカツキのCSRの取組みについてを記事下部参照)
github.com

中田さんはRubyへのコミット数が全コミッターのなかで最多であり、通称“パッチモンスターと”呼ばれています。

今回のインタビューでは、中田さんがRubyへのコントリビューションを始めたきっかけや、印象に残る機能改修について解説してもらいました。「Rubyのことをもっと詳しく知りたい」「オープンソースソフトウェア(以下、OSS)へのコントリビューションを続ける秘訣を知りたい」と思う方には必見の内容です!

※ 本インタビューはアカツキ所属ではない中薗昴様にインタビューいただきました。
※ インタビューはリモートにて実施しています。

気負わないからこそ、長く活動を続けられた

続きを読む