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

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

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)へのコントリビューションを続ける秘訣を知りたい」と思う方には必見の内容です!

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

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

続きを読む

フルリモートでクライアントエンジニアインターンに参加しました

こんにちは。さんたろと申します。
この度、12/1〜12/24までの間、就業型インターンに参加させていただきました。

大学の講義があったため、フルタイムでの勤務10日分ほどの勤務時間でしたが、とても充実した内容でした。 この記事を通して少しでも学んだこと・感じたことをお伝えできたら幸いです。

インターンの概要

私が配属されたのは『八月のシンデレラナイン』(以下ハチナイ)というゲームのチームでした。
私はハチナイをプレイしたことがそれまでなかったのでインターンが始まる前に遊び、20個ほど改善案を出させていただきました。 最終的には提案した中から1つ、提案以外から1つの課題に取り組みました。

課題への取り組み

課題に対する取り組みはインターン最終日におこなわれた成果発表会の資料にまとめています。
1つ目の課題である「共通ヘッダーの修正」は検証待ちの状態まで進めましたが、2つ目の課題である「ScrollView用のハチナイ独自のクラスへの機能追加」はまだ改善が必要という状態で終了しました。
ただ実装するだけでなく、パフォーマンスの計測や.unityファイルでのデータの持ち方の調査などさせていただきました。
以下発表会で使用したスライド資料です。

インターンを終えて

成果発表のスライドにも書かれていますが、インターンを通して学んだことはとても大きかったです。

視野を広く、先を見据えて

そもそも大規模なチーム開発が初めてで、自分の視野の狭さ故の考慮漏れが多かったです。 コード単位の影響ばかり気にして、Prefab・Scene単位の影響にまで目を向けることがあまりできませんでした。 全体が見えないまま実装をしても、それが今後の開発も考慮した最適であるかわかりません。 まずは影響範囲と周辺の実装をしっかりと把握して、構造を理解した上でどのように実装するべきか考える必要がありました。

問題のノイズを除去する

調査をおこなうとき、今回の調査とは関係のない部分による影響に惑わされることがありました。 大きなプロダクト、把握している範囲が小さい機能に関する調査では特に問題の本質を見失いがちです。 実際に使われているものではなく、自分で小さいサンプルを利用することで問題だけに集中できるほか、何か共通点など新しい発見があるかもしれません。 今回のインターンでは、.unityファイルへの書き込まれ方の調査、ScrollViewのハチナイ独自クラスの挙動確認と開発した機能のデバッグで非常に役に立ちました。

同期コミュニケーション

リアルタイムの会話では情報の取捨選択ができず、長引くほど参加者全員の時間を奪ってしまいます。 インターンではメンターの方と進捗状況の確認や相談のための面談をする機会が多くありました。 最初は「何をしたのか」「その結果どうなったのか」をすぐに答えられないことがありました。 こまめに作業ログをとるようにし、情報伝達が迅速かつ正確になっただけでなく、過去の作業内容を思い出すこともできるようになりました。

プランナーやデザイナーの方とのMTGでは、予め資料や参考画像をまとめ、議題に集中できる準備をしました。 結果としてMTGの参加者全員が、現在の状況と議論すべきことが明確な状態でスムーズに進めることができました。

非同期コミュニケーション

今回のインターンがフルリモートだったこともあり、非同期コミュニケーションはとても大事なものでした。 非同期コミュニケーションの欠点として、「誤解されやすい」「ニュアンスが伝わりにくい」という部分があり、今回のインターンでもそういった問題が発生しました。 違う捉え方ができないか、一番言いたいことが明確になっているか、使用する単語ひとつひとつにも気を配る姿勢が大切だと感じました。 また、「〜ということですか」と自分の解釈を伝えることは認識のズレを減らす手段で、今後も意識して利用していきたいです。

リモートワークだと自分が今何をしているのかメンターの方やチームメンバーに伝わりにくいです。 今回のインターンでは「自分で調べて問題を解決する」ということを重視されていましたが、それでも助言を受けるか判断するのではなく、助言をするか判断してもらうべきでした。 インターン後半では「自分は今〜しています」と意識して報告することで自身の状況を伝えるように心がけました。

最後に

業務としてのゲーム開発をすることが初めてでしたので楽しめるか不安でした。 いざ始まれば、覚えることが多く大変でもありましたが、「楽しい」という感情が一番強かったです。

最後まで楽しく働けたのは、暖かく迎えてくださったチームメンバー・人事・総務の方々、常に的確な指摘をしてくださる一方で私なりの結論が出るまで見守ってくださったメンターの方、そのほか支えてくださった社員のみなさんのおかげです。 この場をお借りして改めてお礼申し上げます。

以上、私のインターン参加報告でした。
最後まで読んでいただきありがとうございます。

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

こんにちは。Nと申します。

この度、1/18 ~ 2/5までの15日間、就業型インターンに参加しました。

 

インターンの概要

私は、『八月のシンデレラナイン』(以下ハチナイ)のサーバーサイドエンジニアのチームに配属され、次のタスクに取り組みました。

 

管理画面でアイテムidを手作業で確認、入力していた部分をプルダウンにすることで対応

開発環境でアイテムを付与することがあります。これまでは、アイテムのidを資料から探してきてそれを手入力する必要がありました。

そこで、私は「手作業でアイテムのidを確認して入力する」こと自体が大変な作業だと考えたため、プルダウンに全てのアイテムを表示するように実装しました。しかしながらアイテムの数は膨大です。この実装はかえって逆効果でした。

そこで、次に個数が多いグループのアイテムをリストから削除する実装にしましたが、今度はそもそも選択できないアイテムが発生するのは良くないということになりました。

最終的な結論として落ち着いたのは、アイテムの所属するグループのプルダウンの値が変更されたタイミングをフックとして関連するアイテムだけを表示するという実装でした。ほぼ理想的な形が実現できたと共通認識が取れたので良かったです。

 

マスターデータのチェッカーの作成

ハチナイにはマスターデータが存在します。マスターデータを簡単に説明すると、ゲームが動いている間は固定値として扱うデータのことです。このデータ群は「正しいデータ」としてプログラムが設計されているので、正しいことが保証されていなければなりませんでした。そこで、今後改修されることで変更されうる値が正しいことを保証するプログラムを追加しました。

 

インターンを通して

フルリモートでの作業の難しさ

今回のインターンではフルリモートによるものでした。ZoomとSlack、GitHubのPRでのやりとりが多かったのですが、

  • 複数人が同時に話すと声が重なってしまい対面でのコミュニケーションよりコストが高い
  • 返信がすぐもらえるとは限らない

 これらが特に難しそうだなと感じました。しかしながら、今回のインターン中では、比較的返信を早くいただけたのでスムーズに作業できました。

 

うまく伝えるにはどうするか

レビュワーの方からインターンを通して「何を伝えたいか」がよく伝わってありがたいという評価をいただきました。うまく伝えるに際して、

  • 「何を伝えたい」かだけでは伝わらない
  • 「自分が持っている情報」と「相手が持っている情報」の差異を意識する

を心がけていました。

その上で、「書き方」も意識するとより伝わりやすいことに気がつきました。具体的には、リスト化して視覚的に見やすくしたり、Markdownの「---」を使って区切りを使ったりすることが有効でした。

また、クライアントサイドエンジニアとサーバーサイドエンジニアでAPIのインターフェースについて議論する際実際にJSONの形式で提示している方がいて伝わりやすいと思いました。

 

意図を持ってコードを書く

きちんと理解した上で話すことを心がけていました。実装の仕様のすり合わせにおいても、「理解しきれなかったのでもう一度この部分の説明をお願いします」などとお願いして「自分が書くコードはこうなるはず」という自分の中での理解をするようにしました。

その結果、「実装方針をこのようにしてはどうか?」という提案をすることができました。それだけでなく、レビューの際、「ここは認識違う」との指摘をいただいても「自分はこう考えてた」と伝えることでどこで食い違いが起こっているのかを特定するのが簡単になりました。成果報告会で、レビュワーの方からも「言語やフレームワークによらないプログラム設計がしっかりしていてロジックレベルでは指摘するところがほとんどない」と褒めていただくことができました。

 

最後に

15日間最初から最後まで楽しく働くことができました。これはメンターの方をはじめとするたくさんの方のサポートに依るところが大きいです。

ゲーム開発は初めてだったので、「Webアプリケーションの開発とはこういうところが違う」など差異を感じることができて有意義なインターンになりました。特にマスターデータの運用を感じることができて良かったです。