まえがき
お初にお目にかかります。 株式会社アカツキさんで五月十一日〜五月二十二日の約二週間(実質十日間)、サーバーサイドの開発でインターンをいたしました、村上と申します。
本記事では、当該インターンにおける成果報告と感想を述べます。よろしくお願いいたします。
インターンの形態について
時期が時期の中行われたインターンですので、皆様に誤解を与えてしまわないよう、まずは本インターンの形態についてご説明いたします。
ご存知の通り、現在、世界中が感染症対策に追われています。日本も例外ではなく、具体的には、オフィスへの出勤を最小化しなければなりません。 ですので、アカツキさんも全面的にリモートワークを行なっています。そのため、今回のインターンは対面を一切廃したフルリモートで行われました。私は愛知県在住なので、東京とおよそ300kmのソーシャルディスタンスを確保した上での実施となります。
機材は事前に郵送いただき、手続き等も全てリモートで行われました。インターンに際して、感染症対策は徹底されていたという点を明記しておきます。
インターンで行ったこと
本インターンでは、大人気ソーシャルゲーム『八月のシンデレラナイン』、通称ハチナイのサーバーサイドの開発業務に携わりました。なお、サーバーにはRailsが用いられています。
10日間中は様々なタスクがありましたが、その中でもメインで行ったものは以下の三つです。
- APIサーバー開発環境の改善
- 敵チーム調整用管理画面の作成
- デレスト編成中の選手をそのまま移籍・保管庫に移動させられる機能の実装
それぞれについて、詳しく述べていきます。
APIサーバー開発環境の改善
インターンを開始してまず手をつけたのが、この作業です。 当時のAPIサーバーの開発環境には以下の問題があり、環境構築におよそ半日ほどかかってしまっていました。
- 開発用のMac上にそのままRailsやMySQLなどをインストールしていたため、依存するソフトウェアやライブラリのバージョンを適切に揃える必要がある
- 環境についてのドキュメントが不足しており、構築する側がトライアンドエラーを繰り返して設定する必要がある
一度構築してしまえば問題ないとはいえ、今後入ってくる方にも同じ時間を強いてしまうのは勿体ないこと、さらに非サーバーサイド開発でも手軽にローカルで検証環境を立ち上げられるようにしたいということで、この改善に取り組むことにしました。
対応方針としては、DockerとDocker-Composeを用いて数コマンドで環境を立ち上げられるようにして、誰でも簡単に環境を作成・破棄できることを目指しました。 幸い、作りかけでしたが既にdocker-compose.ymlと関連ファイルが作成されたブランチがあったため、出ているエラーの調査(連携するその他のソフトウェアのメンテナの方からの聞き取り等含む)と修正をしたり、一部テストケースの改善をしたり、ドキュメントを整えたりといった細かな作業を行い、実作業二日間、計三日間でApproveをいただけました。
この改善による影響は大きく、半日かかっていた構築作業がおよそ20分で完了するようになりました。また、ゲームのクライアントを担当されている方と一緒に開発をする際、相手側で検証用サーバーを立ち上げてもらって開発を進める、といった手法も気軽にとることができるようになり、開発の体験が向上しました。 実際に「便利になったね!」といったフィードバックをいただけた時は、本当に嬉しかったものです。
敵チーム調整用管理画面の作成
次に対応できそうなタスクを探していると、『敵チームの調整を管理画面から行えるようにする』といったタスクのカードが目に留まりました。 詳しく話を聞いてみると、ゲームの調整を行う方からの運用改善として以下の課題が出ていたことが分かりました。
- 試合の敵チームを作成するにあたって、現状は職人技で行なっているので、属人化してしまっている部分がある
- 敵チーム調整のサイクルが一つの場所で完結しておらず、結果の予測も簡単ではないため、経験が浅いと調整に時間がかかってしまうのが原因
- そのため、管理画面に敵チーム調整用の機能を追加し、管理画面の機能群だけで調整を完結させられないか
お話を伺う限り自分でも対応できそうだったので、そのまま着手することにしました。 具体的には、ActiveAdminで作られていた管理画面に敵チーム調整用のページを新設し、関連するパラメータも調整できるようにしました。
ActiveAdminの挙動で少し詰まったところはありましたが、それ以外はすんなり実装できたと思います。実装後に簡単なドキュメントも書いたのですが、良い勉強になりました。レビュー含め二日間ほどで終わったと思います。
デレスト編成中の選手をそのまま移籍・保管庫に移動させられる機能の実装
こちらは、ゲームのクライアント側でインターンをされていた方との共同作業になります。 ハチナイの試合やデレストにおいて、今までは以下の問題がありました。
- 試合やデレストを進めていて選手所属数上限エラーとなった際、デレスト編成中の選手はそのまま移籍や保管庫に移動させることができず、いちいちデレストの画面から入れ替えを行う手間があった
そのため、サーバー側とクライアント側の両方に変更を加え、デレスト編成中の選手でもそのまま移籍・保管庫への移動を行えるように改善することになりました。 サーバー側の変更量自体はさほどだったのですが、変更の内容と影響範囲を考慮し、テストケースの修正と追加をメインに行いました。実際にテストを増やしてみると、実装中は気がつかなかったケアレスミスが発見できたりして、やはりテストを増やすのは正解だったなと実感しました。こちらもレビュー含め、三日間ほどで完了できました。
また、実装に際して、クライアント側のインターン生の方がとても優秀で頼もしかったです。 リモートで実装に関しての相談や打ち合わせを何度かしたのですが、毎回スッと意を汲んで対応していただけたので感謝しています。 円滑な開発を行う上で、コミュニケーション能力は本当に大事ですね。私も精進します。
学び
実質10日間という短い期間でしたが、インターンを通して学べたことは多くありました。
例として、分かっているはずだったものが、実際に手を動かしてみると頭からすっぽり抜け落ちてしまう、といった問題を認識できたことが挙げられます。 具体的には、実装における設計です。頭の片隅に置いてあったベストプラクティスのはずなのに、作業に集中していると目の前のことで一杯一杯になってしまい、後から改善点を指摘される、といったことがありました。 もちろんインターンというアウェーな環境というのもあるとは思うのですが、それ以上に自分の経験不足を感じたのが大きいです。頭をよく使ってから手を動かす、ということを繰り返すことで、どんな状況でもベストプラクティスが実践できるようにしていきたいものです。
また、これはいろんな場所で何度も言われていることだとは思うのですが、チーム開発においてコミュニケーションは重要だなと思いました。 アカツキさんの方々は皆さんお優しくて、Slack上でもいろいろなトピックで会話が弾んでいます。そのおかげで気軽に質問や発言ができましたし、結果的に円滑な作業に結びついていたと感じました。 これが、仮に最低限の会話しかないような状況だったとしたら、インターンというのも相まって、萎縮や虚無感で効率がガタ落ちだっただろうなと容易に想像できます。 リモート作業ではどうしても人との関係性が希薄になりがちで、恐らくこの状況はこれからもしばらく続くと予想されますが、こうしたコミュニケーションが効率という面を支えているということを忘れないようにしたいところです。
感想
インターンが始まるまでは、寝付けずにうなされるくらい、自分がやっていけるのかどうかが心配で仕方ありませんでした。 しかし、実際にサーバーサイドのチームに入って作業してみると、思っていたよりかはパフォーマンスが出せたので一安心です。とはいえこれで傲慢になるのではなく、学んだ点を糧に引き続き精進していきたいと思います。
また、仕事がとても楽しかったです。毎日十時〜十九時までが勤務時間だったのですが、十九時に業務が終わってすぐに次の日の朝が待ち遠しくなるほどでした。 自分でもこの感情には驚いたのですが、それだけアカツキさんが働きやすい環境だったのかなと思います。まさにハートドリブンですね。
さいごに
大変な情勢の中、就職活動の一環とはいえインターンの受け入れをしてくださり、お世話になったチームの皆さんやアカツキさんには大変感謝しております。 ありがとうございました。