3月24日に開催された、株式会社バンダイナムコスタジオさん(以下、BNS)のサーバエンジニア職を対象とした1dayワークショップに参加しました。この記事では、そのワークショップで行った内容の概要と、自分が感じたことなどを残しておきたいと思います。
参加の動機
私は小学生の頃からゲームが好きで、特に複数人で通信してマルチプレイをするのが大好きです。将来は私自身がそのゲームの楽しみを届ける側になりたいという想いでゲーム業界のエンジニアとしての就職という選択肢も考えています。その中でも大好きなマルチプレイを支えるサーバサイド、インフラ関係の仕事に興味がありました。その分野でインターンやセミナーの情報を探していた時にBNSのワークショップのことを知り、参加の申し込みをさせていただきました。
ワークショップの内容
ワークショップでは、ブラウザゲームのスコア管理やランキング管理を行うAPIサーバを開発するというものです。サーバサイドの言語としてGo言語を使用しました。ワークショップでは、0からサーバサイドのプログラムを書くのではなく、認証やDB接続など最小限の機能が実装されたプログラムに、APIサーバとしての機能を追加していくという形でした。
実装した機能は次のようなものです。
- プレイ結果をDBに保存するAPI
- DBのプレイ履歴を用いてランキングを取得するAPI
- アチーブメントの機能
- 管理ツール向けのAPI
これに加えて、発展課題として「テストの実装」「静的解析の実行」「ログの出力」「プレイ履歴機能」「管理ツールの改善」等が与えられていましたが、私は時間が足りずそこまでは取り組めませんでした。
ワークショップ中は学生3人で1グループになり、Gatherというコミュニケーションツールを繋ぎながら作業をしていました。また、分からないことがあった時には、Slackで質問をしてBNSの社員の方にスグに反応頂いて、サポートしていただくことができました。
ワークショップ終了後の懇親会では、BNSの社員の方々とGather上でお話をすることができ、BNSのことから就活全般に関することまで様々なお話をお聞きすることができました。
学んだこと
Go言語のバックエンドプログラム
今回のワークショップに参加した段階では、Go言語でしっかりとしたAPIサーバを実装したことはありませんでした。そんな中で、Go言語で最小限の機能が実装されたプログラムを参考にすることができ、Go言語のバックエンドプログラムをどのように書けばよいのかの指針を得ることができたのが非常に大きかったです。例えばリクエストの扱い方や、セッションの管理、DBの処理、エラーハンドリングなど、今後別の機会でGoのサーバプログラムを書こうと思った時でも参考にできる内容が多く、とても心強い経験になったと思っています。
しっかり動くサービスを作るということ
普段、自身で制作をするときは"作りたいもの取り敢えず動けば良いので作る"というような製作が多かったのですが、このワークショップでサービスとして提供するための堅実な制作とでも呼べるようなものを知ることができました。例えば、プレイ結果を保存するAPIでは、クライアントとサーバの間でデータに不整合が起きないように工夫された処理を紹介していただきました。他にも、アチーブメントの機能では、DBへの問い合わせを減らせるようにクエリを工夫したり、ランキングの機能ではRDBではなくRedisを用いる方が良いという紹介があったりして、より良いパフォーマンスで、より良いサービスを作るという考え方を肌で感じることができました。
管理ツールの必要性
また、サービスとして良いモノにするだけでなく、サービスを維持・運用していくために、管理者ツールや管理用API、ログなどを作るという工夫も見ることができました。普段の制作ではサービスを作ることで精いっぱいでそこまで考えられていなかったので、とても新鮮な内容でした。今回のワークショップの中で、実際に管理用APIを実装してデータを可視化してみると、別で実装していたゲーム用APIの不具合に気が付くということがあり、このような管理ツールの必要性・ありがたみを身にしみて感じました。
ゲーム業界の解像度が上がった
これは特にワークショップの後の座談会でBNSの社員の方々とお話をしていく中で、BNSやゲーム業界とはどんなものなのか、自分が何をやりたいのか何ができるのか、といったことの解像度が上げることができました。具体的には、少しワークショップ本編の内容とはズレますが、MMORPGのようなリアルタイム通信が私のやりたいことではないかという認識を明確にすることができました。これは、座談会でBNSの社員の方にゲームのリアルタイム通信のお話をお聞きして、BNS内やゲーム業界全体におけるリアルタイム通信の動向を教えていただけたおかげです。こうして実際にお仕事をされている方の生の声を聞けたのが非常に貴重な経験になりました。
感想
このワークショップで特に嬉しかったのは、学んだことにも書いた、Go言語でのバックエンドの実装を知ることができたことと、リアルタイム通信というやりたいことを明確に再認識することができたことです。
普段、制作などでサーバサイドのプログラムを書くときはPythonのFlaskを使うことが多いのですが、Go言語が最近バックエンドでホットだという話は時々目にしていました。なので、いつかGoも勉強してみたいなと思っていた折にこのワークショップに参加することができてとても良かったです。今後、個人で制作をするときにも、Go言語のバックエンドというのを選択肢として大事にしていきたいです。
やりたいことが明確になったという点では、前々からリアルタイム通信が気になるなぁと言う淡い想いはありました。ただ、ゲームのリアルタイム通信といってもあまりメジャーではなくネットで得られる情報も少ないという状態で、考える材料が少なく困っていました。座談会でお話した社員の方はこうしたリアルタイム通信を担当されている方ではありませんでしたが、この部署でこんなことをしている人たちが居る、というような具体的なお話を聞くことができて本当に良かったです。
全体を通して振り返ると、私は普段からハッカソンに参加するなどモノづくりが好きなので、ゲームのAPIサーバを作ってみるという経験ができたのがとっても楽しかったです!学生のサポートや、運営をしてくださり、本当にありがとうございました!