こんにちは!バックエンドエンジニアの阿部です。
2024年8月5日〜7日にマルチプレイゲームのリアルタイム技術について知ろう!というタイトルでサーバーサイドエンジニア3daysインターンシップを開催しました。
実施内容
さて、皆様は複数人が参加する形式のゲームで遊んだことはあるでしょうか?
昨今のビデオゲームでは、シューティングゲームやスポーツゲーム、ボードゲームまで様々な形式のゲームがオンラインでリアルタイムに遊ぶことができます。
今回のインターンシップでは、そのようなゲームを遊ぶ上で重要な専用ゲームサーバーについて、その役割の1つである「同期」をテーマにTPS用専用ゲームサーバーの設計から実装までを3日間で行いました。
「同期」と一言で表すと簡単そうに思えます。しかし実際に作ってみると思わぬ落とし穴があったり、普段の REST API 開発とは勝手が違う部分があるために思った以上に苦戦することが多いです。「ステートフルなサーバーならではの双方向の通信」、また、「同期をとるために必要なデータの選定方法」などを課題を通して体験できる形式を採りました。
参加者の方には2人1組のチームで課題に取り組んでいただきました。
講義編:マルチプレイヤーゲームの仕組みとコロプラの専用ゲームサーバー
初日の午前中は課題に取り組む上で必要になる知識を得てもらうため座学を行いました。
オンラインで複数のデバイスが接続して遊ぶゲームは1人向けのゲームとは異なり、それぞれのデバイスが状態を持つためその同期が重要になります。その同期をとるためになぜRESTではなく専用ゲームサーバーなのか、RESTとの役割の違いについて、また、コロプラがこれまで開発してきたマルチプレイヤーゲームを例に、実際にどのような技術を用いてマルチプレイヤーゲームが開発されてきたか、そのときどきでなぜその技術を選択してきたかについても紹介しました。
設計編:リアルタイム通信の設計とクライアントサーバー間のプロトコルの工夫
オンラインゲームを開発していく上で、そのクライアントと専用ゲームサーバーがどのように情報をやりとりするか、受け取った情報をどのように処理するかを設計しておくことは非常に重要です。これにより、実装の分担や手戻りの防止ができ、工数の削減につながります。
ゲームを開始する際に発生するクライアントそれぞれが動作する環境によるズレの待ち合わせや、ゲーム中に発生する様々なイベントについてのアプリケーションプロトコルを設計する課題に取り組み、発表しました。
お題としては正常系を想定して出題しましたが、取り組みの中で途中で切断した場合などの異常系を考慮してくれる方もいて素晴らしいと感じました。
実装編:専用ゲームサーバーの構築とリアルタイム処理の実装体験
2日目の午後からは実装に移りました。
設計編で解答例として用意したアプリケーションプロトコルを元に実装済みのクライアントと連携する専用ゲームサーバーの実装をしました。内製サーバーエンジン”prizm”(COLOPL Tech 勉強会 「ゲーム開発におけるリアルタイム通信基盤とKubernetes/Agones」を実施しました!)を用いて実装し、実装をテストやクライアントアプリから確認することで、参加、開始、インゲーム処理、アイテム処理、と課題を追う毎にゲームが完成していくのを体験していただきました。
専用ゲームサーバーはステートフルなのでRESTとは違った特性に初めは戸惑う場面もありましたが、段々とコツを掴んで取り組まれていました。
チャレンジ編:運用に向けた課題への取り組み
3日目の午後には実装編の延長や、クラウド上で展開する際の課題、チート対策についての考察など、各チームで好きな課題に挑戦しました。
どの課題も限られた時間の中で取り組むのは難しいものでしたが、実際に扱われている仕組みに近い部分まで考察されていたり、UXまで考えて実装されていたり、予想を上回る成果物が上げられていて驚かされました。
参加した学生からの感想紹介
「第一にすごく楽しかったです!Go言語の経験が少ないので、最初は非常に不安でしたが、そのような状態からでもかけるように準備されていました。実際に全てのチームがアプリ完成まで終わって、追加の実装まで進んでいました。今回のインターンでは、APIサーバとゲームサーバの違いや、ゲームサーバを使ったバックエンドの実装を理解することが出来ました。」
「リアルタイム通信という自分がこれまでに触れたことの無い技術での開発経験を積むことができ、自身の成長に繋がったと感じました。」
「リアルタイムゲームサーバーの設計と実装を経験できました。様々な方法で機能を設計することができると知り、チームによって色が出たと思います。」
「サーバーサイドのゲームの開発について実際体験することが出来てよかったです!」
最後に
これまでバックエンドのインターンで扱ってきた課題は「RESTやDBを用いて大規模・高負荷なアクセスを如何に捌くか」を体験するようなものでしたが、今回は「ユーザーさまに対してリアルタイムで快適なマルチプレイを届けるために必要な技術」にフォーカスしたものになりました。
このようにコロプラでは様々な技術を駆使してユーザーさまに新しい体験を届けたいと考えています。同じ思いの方がいらっしゃいましたらぜひ一緒に働けたらと思います。ご応募お待ちしております。
ColoplTechについて
コロプラでは、勉強会やブログを通じてエンジニアの方々に役立つ技術や取り組みを幅広く発信していきます。
connpassおよびXで情報発信していますので、是非メンバー登録とフォローをよろしくお願いいたします。
また、コロプラではゲームや基盤開発のバックエンド・インフラエンジニアを積極採用中です!
興味を持っていただいた方はぜひお気軽にご連絡ください。