こんにちは!アカツキの就業型サマーインターンに参加させていただいたyutaroです。
当インターンでは15日間にわたり、サーバーサイドエンジニアとしてお邪魔させていただきました。
ここでは、その参加報告をさせていただきます。
実際に開発に携わったプロダクトは「八月のシンデレラナイン」です。担当することが決まってから初めてプレイしましたが、登場人物がカワイイですね!
初めて触れるジャンルでしたので、とても刺激的でした。
自己紹介
ざっくりまとめるとこんな人です↓
- 大学では雑多な学問を学ぶ(情報系は独学)
- 3年次からサーバーサイドの言語を学び始める
- 2年次までは夜な夜な遊び散らかしていた
同じ時期に来ていたインターン生と比べると、エンジニアとしての経歴は浅い方ですね。
他の方は、かなり前からコードを書いていたようなので、ずっとビビっておりました。笑
今までに触れた技術
深掘りはせず、気になったものばかり学んでいたので、全てにおいて広く浅いです。
- Web系の高級言語(PHP、Ruby、Python)及びその主要FW(Django、Rails)
- Webフロントエンド及びその主要FW(React、Vue)
- インフラ(AWS、GCP、Heroku)
- iOSアプリ(Swift)
- その他(Docker、CircleCI)
参加までの経緯
他社さんの逆求人イベントで、初めてアカツキさんとコンタクトを取りました。
志望後に面接 → コーディングテスト → 合否連絡 といった流れです。
参加前に面談が組まれ、そこで「どういった業務を行いたいか」の話し合いを行います。「インターン生がやりたいこと」を重視してくれるので、すごく嬉しかったのを覚えています。
他にも行ってみたい企業は複数あったのですが、以下のような理由で志望を決めました。
ゲーム業界の特徴的な実装をみてみたい
サマーインターンに参加する以前から、長期のインターンとしてサーバーサイドエンジニアの経験を積んでいました。
ただ、今までの経験で触れた分野は「メディア」のみです。Web業界の王道(?)分野ですね。
ゲーム業界はユーザー関連の情報がかなり多く、またトラフィックの変化も激しいので、また一味違う経験が積めるだろうと思っていました。
なので、「これを機にゲーム業界を経験したい」という思いで志望しました。
お賃金が高い
これは僕の主観ですが、他のインターン生にも少なからずある下心だと思います。笑
高い給与を提示している企業で、「僕自身が通用するのか」試してみたいチャレンジマインドが奮い立たせられました。
相当レベルの高い学生しか志望しないと思っていたので、「選考が通ればラッキーだな」ぐらいの感覚でしたね。受かってよかった...
何をやったのか
大きく分けて3つのタスクを行いました。
- ランキングマッチ上位者の詳細なポイント取得履歴を出力するRake Taskの追加
- 管理者画面にOne Loginでログインできるようにする
- 消費元気n倍で試合をし、報酬をn倍にする機能の追加
以降は、これらをそれぞれ具体的に記述していきたいと思います。
ランキングマッチ上位者の詳細なポイント取得履歴を出力するRake Taskの追加
長期のインターンで入社時に毎回行なっているのは「簡単なタスクを片付けてみる」です。
理由としては↓
- 入社した直後はあまりコードに慣れておらず、大きなタスクをこなすのは非常にストレスを感じる行為だと考えている
- メンターが僕自身の実力をまだ把握できていない
なので今回も例外なく、単純なタスクを行いました。
ハチナイの試合形式として「ランキングマッチ」というものがあります。
これは、全国のユーザー同士が一定期間内に試合を行い、順位を競い合う形式となっているのですが、ランキング上位者には特別な報酬が与えられます。
現状の方法として、ランキング上位者を算出するために、エンジニアの方が毎回手動でスクリプトを書いています。しかし↓
- 毎回スクリプトを書くのがめんどくさいので、楽にできないか
- 詳細なポイント取得履歴も同時にみて、より妥当性を検証できるようにしたい
このような要望があったので、双方を満たすようなスクリプトを追加しました。
着手するまでRailsのRake
の存在すら知らなかった僕ですが、すでに手打ちで書かれたコードが存在していたので、すんなり実装できました。
One Login機能の追加
着手前の段階で、「次のタスクは何をやるか」を決めるミーティングが開かれました。
というのも、具体的なタスクは入社後に決める方針だったからです。
僕はせっかくなので、「難しそうなやつをやってみたいっす!!」と申し出たところ、要望通りのモノが来ました。笑
ハチナイ(サーバーサイド)の管理画面へのアクセスはIP制限をかけてはいますが、ログイン手法はかなり単純で「これってセキュリティ的にあまり良くないよね??」という話は前々からあったようです。
ただ、みんなやりたがらない領域だったので、僕に白羽の矢が立った(というか、僕が立たせた)。といった経緯です。
アカツキでは全社的にOne Loginを利用しています。One Loginについてざっくり説明すると↓
- SSO(シングルサインオン)用のサービス
- One Loginにログインするだけで、他のサービスへのログインが不要になる
こんなところです。
つまり今回のタスクは「管理画面へのログインにOne Loginの機構を取り入れる」というものになります。
ひたすらインプット
着手時点で、「そもそもOne Loginってなんですか??」という状態だったので、最初のうちはとにかく調べまくりました。
認証方式の実体はSAMLだったことや、実際に組み込んだ際の認証フロー、One Login側の操作方法等、調べていくうちに実装のイメージが明確となっていきました。
幸いにもOne Loginの方々が、Rails向けのライブラリをすでに実装してくださっていたので、比較的ラクに実装できたと思います。
既存のライブラリとうまく組み合わせる
一番ツラかったのが、この部分ですね。
管理画面にはActive Admin、ユーザー管理にはdeviseというライブラリを用いていたのですが、既存の実装への影響を最小限にするためには、これらのライブラリとOne Login用のライブラリをうまく組み合わせる必要があります。
ライブラリ同士の組み合わせで情報を探そうとすると、そもそも全体数が少なく、情報が古かったりして、トライ&エラーの繰り返し...
根気よく粘りつつ、なんとか実装することができました。
消費元気n倍で試合をし、報酬をn倍にする機能のプロトタイプ作成
次は「ゲーム会社ならではのタスクを行ってみたい!!」と申し出ました。
前回行ったタスク(One Login機能)は、他の業界でも行うことができるものだったからです。
「自分で課題を見つけて、それを解決する機能を実装してみて」と言われたので、ハチナイで利用される元気を数倍にし、報酬をその倍数分増加させる機能をサーバー側で実装してみました。
※プロトタイプですので、リリースされるかは未定です
イベント等で同じステージを周回するのに、毎回同じ操作を行うのはUX的な観点でツラいだろうと思い、それを解決する機能となります。
どの要素に対してn倍を適応するのか、逐一メンターの方に相談しつつ、実装を進めました。
ハチナイの中でそこそこコアな部分の実装に触れることができ、非常に楽しかったです。
学べたこと
ゲーム開発(サーバーサイド)の実情
ソーシャルゲーム特有なのかもしれませんが、仕様の微妙な変更が多いだろうなと感じました。
仕様からみたら微妙な変更でも、実装から見ると大きな変更を伴うケースはあるはずです。
実装中、聞いた方が確実に早いときはメンターの方に聞くのですが、現在利用されていないコードもいくつかあるそうで...
そういったところから、ゲーム開発のツラそうな一面を垣間見ることができました。
フラットなチーム
所属するチームや担当するプロダクトによって異なるかもしれませんが、どの方もアグレッシブに働いている印象を受けました。
僕自身、エンジニアを目指していない時から4社ほど長期インターンを経験していますが、このような組織は初めてです。
すごく記憶に残っている一面は、僕のタスクの仕様を決めるために、メンターや他の社員とお話をしている時ですね。雑談ライクに1~2人の方とお話をしていたのですが、次々といろんな方が加わってきて、「もはや会議室とかで行った方が良いのでは...??」と思える人数となってしまいました。
どの方もすごく楽しそうに話されていて、良い人ばかりでした。
飲み会にも参加させていただいたのですが、終始笑いが絶えず。「あ、とてもいいチームなんだな」と思いました。
また、このようなチームを将来作れる人になりたいとも思えました。これは未来の宿題ですね。
感想
就業型の短期インターンシップは初めてで、アルバイトと同じものだと考えていましたが、それにとどまらない体験をさせていただけたと思います。
また、貢献度としてはまだまだ低い結果だと思うので、短期間でも成果を出せるよう、これからも精進していきたいと思います。