【CA Tech JOB】CyberAgentのSGEで長期インターンをしたお話

前置き

自分について

はじめまして、ひいらぎと申します。
今回、CyberAgentさんで1ヶ月間インターンをさせていただきましたので、そこで経験したことや得た知見を書き記します。

普段はバイク乗ったりピアノ弾いたりゲーム作ったりセキュリティしてたりします。

CA Tech JOB

CA Tech JOBとはCyberAgentが実施手している就労型、かつ長期のインターンのことです。
期間、頻度ともに柔軟に対応できて、2週間で週4であるとか、1ヶ月で週2といった出勤も可能です。
実業務を行えますし、ちゃんと対価も出るのでかなりオススメできます!

きっかけ〜受け入れまで

とある先輩のすすめでCA Tech JOBのインターン選考を受けました。
詳細なフローは忘れましたが、 書類→テスト→人事面接→現場面接 のような感じです。
人事面接では、終わった瞬間「ほいじゃぁ合格だから次の連絡待っててね」とかいきなり言われてビックリ、決めるのが早い。ただその後は1ヶ月ほど待ちました。
結果、SGE(ゲーム事業部)が受け入れ先となり、現場面接を実施、通過後に にオルガルやガルフレなどを開発している 株式会社QualiArtsのゲームでサーバサイド開発をすることに確定いたしました!

いざインターン

初日(9/5)

10:00 -

渋谷駅から北に進み、少しセンター街を外れたところに皆さんご存知巨大なAbemaTowersが建っています。 ビル下にある冗長な案内表示を見ながら入館。

f:id:Hiragi-GKUTH:20190927170812j:plainf:id:Hiragi-GKUTH:20190925150946p:plain

入社説明会的に出席。どうやら臨時雇用形態でインターンは雇用されているようでした。
また、インターン以外にも内定者バイト、業務委託の方などもいて、思ったより入社っぽいなと感じました。

主な内容としては書類系の記述・確認、写真撮影、入館証作成、PCの受け取りなどでした。

11:00 -

その後、インターン向けにWelcome会が開かれました、こちらは先程の入社説明会とは打って変わって交流しましょう!感がとても出ていてよかったです。
20人ほどの人数で、(社の)飯を食いながら前で1分自己紹介や、トレーナさんとのアイスブレイクなどなど...
一人ひとり名前がデザインされた風船が用意されていたり、人事さんの努力が見え隠れします。例の風船まだ自分のデスクで浮いています。家に帰ってもどこかに 貼っておきたいクオリティです。

その後、風船を持ったままみんなでオフィスを回りました。まるで遊園地気分です。
オフィスはいろんな目的のために、様々な部屋があって、中には一風変わった空間があるなど、やはり遊園地さながらのオフィスで楽しかったです。
下のツイートはその時に撮った写真。中央やや右側で人ならざる笑みを浮かべているのが自分。

その後

私の所属はQualiArtsなので、そのオフィスがあるAbemaTowersの14階に移動して トレーナーさんとご挨拶、開発メンバーともご挨拶。サーバサイドは自分入れて4人でした。第一印象としては割と少ないなと感じました。
後は入社に関する後処理を行いました。

次の日から最後まで(9/6 - 9/27)

いきなりすっ飛ばしましたが、以下では本インターンの環境面や、インターンを通じて得た経験、知見などを書いています。

職場環境・労働環境など

AbemaTowersすごいとしか言いようがありません。オフィスも広いですし、中にコンビニはあるし、 カフェスペースはあるし、各種必要な機器貸し出しなどもやりやすくなっています。

ただなぜ渋谷に建ててしまったのか......渋谷駅周辺は人が多すぎてあまり近づきたくないです。

他に、QualiArtsでは毎日の朝会で情報の共有、週1であるサーバサイド定例での情報共有など、 必要なことはしています。かと言って余計なMTGなど不必要なこともしておらず、とてもいいバランスを保っています。
また、不定期でも必要とあらば場所を取って少し認識合わせのMTGを行ったりもするなど、スピード感もあります。

インターン生ということもあり、様々な職種の方とランチに行かせていただいたり、またインターン生同士を マッチングしてランチをするシャッフルランチなど、幅広い方たちとお話する機会も用意していただけました。
インターン生でなくても交流を目的としたランチもあるらしく、良い文化だと思います。

開発のために貸し出されるマシンのスペックはMac Book Pro 15 Touch Bar / Core i9 2.3GHz ,DDR4 32GB, 1TB SSD, Radeon Pro 560X GDDR5 4GBとかなりのモリモリスペックです。
インターン開始から終了まで何も不自由することなく開発を続けることができました。

開発環境

ローカル環境構築

ローカル環境の依存系はほぼDockerで動かせるのでgit pullしてdocker-compose up -dで一発です。アプリケーション自体はNodeを入れる必要がありましたが、 brew install nvm nvm installした後にnpm installするだけなので本当に簡単にできるようになっていて、新規参入者に優しいです。
他にゲーム特有の事もする必要はありましたが、それらも数ステップでできるのでほんの2〜3時間程度でテストを通すところまで行けます。素晴らしいです。

dev/stg/prd環境とかの構成

よくある3段構成です。ポチッと押すだけで開発環境に反映されるらしく、本運用のCI/CDを魅せられました。すごい。 主にGCPで構成されています。 その構成にした経緯や、どのような手順で動作しているかを沢山聞けました。 ありきたりといえばそうなのですが、実際に運用されているゲームでの動作は興味深いですし、 インフラにも興味が出てきてしまいました。

開発

インターンではNode.jsを用いたAPIサーバを実装するのが主なお仕事となります。なお開発言語はJavaScript(ES2018) です。
静的型付け言語原理主義者(?)の私からすると懸念点もありましたが、Node.jsでの開発は日頃行っているのでまぁ大丈夫だろうという第一印象でした。
ちなみに最近はTypescript化するという話も出ているらしいです。Typescriptはいいぞ。

コード読み

まずコード読みを行いました。慣れていないからか、やはり型が無いのがつらい...と最初は思っていました。
しかし読み進めると、すごい賢い設計であると気づきました、ゲームならではのロジックや仕組みがあって読めば読むほど美味しいコードです。無限に読めます。
型がないからこその柔軟なデータ構造やデータ操作に関しては見たことがないものでしたので良い知見を得ることができました。

実装したもの

最初のタスクは管理画面でとある機能をつけるものでした。 わからないこともあり過ぎるので都度質問。1聞いたら100返ってくる。すごい。
自分の理解力じゃ追いつけないぐらいの速度で情報がやってくるので大変でしたが、その分勉強になりました。

他にも、今後のアップデートで追加される3つの機能を実装しました。まだリリースされていないので内容は書けませんが、10月末ぐらいにリリースされる予定です。
実際に利用されるものを作ることができてとても嬉しいです。 また、プレイヤーに直接は関係がないですが、デバッガーさんやプランナーさんの助けになる機能も2つほど実装し、最終的に5つの機能を実装することができました。

MTGなど

ある機能を実装する時、その立案者、実装者、利用者で認識を合わせる必要があります。
その認識合わせのために定期的なMTG、またはその都度MTGをして、実装する機能と、元の目的が合っているかを確認しました。
また、QualiArts全体での進捗共有のMTGなどにも出させていただき、いろんな問題と、その解決策の共有などを行いました。

各種勉強・共有会

社内向けの勉強会が数多くありました。セキュリティの勉強会や、新規プロジェクトに関する報告・共有会などにも出させていただき、 様々な勉強をさせていただきました。 そこでの発表が動画になっていたり、スライドが共有されていたり、大きな会社の利点を感じました。

ごはん

上の方にも書きましたが、CA Tech JOBでは、様々な人との交流を目的にお昼ごはんを食べられます。 週2で実施可能で、しかもシャッフルランチという、 別のインターン生や子会社の方との交流会もあり、財布を開いた回数も数えるほどで、本当にありがたいです...

学んだこと

1. ゲーム開発

実際に運用されているゲームの開発をすること自体が初めてで、さらにプランナー、デザイナ、シナリオなどゲームの各構成要素を作っている方々とのやり取りや交流できたことは稀有な経験だと感じています。
私が実装した機能をプランナーさんが設定して、それをクライアントエンジニアが見て...というように、別のことをやっている人たちが、ゲームを構成するために協力するといったことや、そのためにヒアリングを することは初めてでしたので、良い経験になりましたし、このようにしてゲームが作られているのだなと知ることができました。

2. システム設計

型が無いからこその非常に柔軟で賢い設計にはとても驚かされましたし、これは盗んでいきたいと思えました。 またスマートフォンゲームが内部でどのようなデータ構造を持っていて、 どうデータを参照して処理しているのかであるとかもコードベースで見ることができました。特にゲームの端末移行処理がどうなっているのかは気になっていたのでワクワクしながら読んだりしていました。
さらにインフラ関連ではメンテナンスをどう実施するか、サーバサイドのバージョンアップ時に中断されない移行方法など、自分の知らないことばかりで終始驚いていました。すごいとしか言いようがありません。。。

3. CyberAgent

CyberAgentという会社は子会社こそ大量にあるものの、個々の子会社の規模はそれほどではありません。だからこそ子会社単位で大きな裁量を持っています。
親会社は各々の子会社にそれほど干渉せず、ある程度の決まりを推奨しているにとどまっているから子会社はそれぞれ大きく成長できるのだなと学びました。

4. ランチでの会話

様々なエンジニアの方と食事に行く機会に恵まれました。そこで聞ける話はゲーム業界の話からCAの話からちょっと書けないような話まで、 有意義すぎる時間をすごす事ができました。

まとめ

インターン生という立場を使って、トレーナーさんやQualiArtsの社員さん、CyberAgent人事さん、関係者各位に 迷惑を掛けまくって多くのことを学ぶことができました。本当にお世話になりました。

これら経験を今後にも生かしていきたいと思います。

おまけ

期間中に技術書典に行った