メインコンテンツに移動
デベロッパーのためのクラウド活用方法
AWS for Games logo featuring a white game controller outline with directional pad and buttons, on a purple background.

ゲームクライアントエンジニアでも試せる !?  カスタムゲームバックエンドのご紹介

2025-01-06 | Author : 山本 純也

はじめに

みなさん、こんにちは ! AWS の Game Solutions Architect 山本 純也です。

皆さんはゲーム開発というと何を思い浮かべるでしょうか ? 一般的にゲーム開発というとゲームのクライアント側の開発を思い浮かべる人が多いと思います。いえいえ、ゲーム開発はクライントだけではなく、バックエンドも必要なことを知っていただきたくこの記事を寄稿しました。

では、ゲームのバックエンドは一体何をしているのか、基本的な要素を紹介していきます。また、クライアントエンジニアの方は、バックエンドがどんなことをしているのか体験していただくための、ゲームクライアントのサンプルを含めたガイドを用意しています。皆さんに用意していただくのは AWS アカウントと Unreal Engine や Unity といったゲームエンジンのエディタのみです。では、早速いきましょう !


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。

今すぐ登録 »

AWS for Games

AWS for Games はより早い開発、よりスマートな運営、そしてより楽しいゲームへの成長という BuildRunGrow の 3 つの柱に沿ってサポートします。今回は RUN の柱、 ゲームバックエンドがテーマとなっています。
A Japanese language diagram illustrating the stages of building, running, and growing cloud game backends, featuring icons and text for Cloud Game Development, Game Server, Game Security, Game Database, LiveOps, Game Analytics, and AI & ML.

1. ゲームのバックエンドとは ?

この記事を読まれている方は、 クライアントエンジニアかゲーム開発に興味がある学生さんが多いかもしれません。そもそもゲームにおけるバックエンドはどこで必要なのでしょうか ?

シングルプレイの開発されている方はあまり出番がないかもしれません。しかし、マルチプレイやオンライン機能が当たり前になっている昨今のゲーム体験においてバックエンドの機能は欠かせません。例えば、友達とオンラインを通じてゲームを遊ぶというのは、珍しい体験ではなくなってきました。

では、その友達の情報やご自身のゲーム情報はどこにあるのでしょうか ? もちろんクライアント (スマホや PC 、コンソール) にもデータはありますが、オンライン上もデータが保存されています。データを保存するということは、そのデータが誰のものかというユーザー認証も必要になってきます。誰しもがせっかく育てたキャラクターを他の誰かに取られたくはないですよね。

他にも、多人数同時接続型のゲームでは、ゲームのサーバーに接続してリアルタイムをプレイヤー同士のやり取りする体験をされた方も多いでしょう。これらは専用ゲームサーバー (Dedicated Game Server) と呼ばれ、ゲームのロジックを制御 (リアルタイムでのゲーム状態管理、スコア計算、キャラクター位置追跡など) をリアルタイムでやり取りするためのものです。これらを総称してゲームバックエンドと呼ばれます。

2. ゲームのバックエンドを体験

この記事では、ゲームクライアントからゲームバックエンドに対して、プレイヤーのデータを保存する部分までのガイドを紹介していきます。ゲームクライアント側のサンプルも主要なゲームエンジン毎に用意されているので、使い慣れているゲームエンジンを選択してください。

今回ゲームのバックエンドを AWS 環境にビルドしていきます。ビルドするものは、Github で公開されているゲームのバックエンドに必要なコンポーネントを詰め合わせたものになります。具体的には、ユーザー認証とユーザーのプレイヤーデータを保存する機能です。細かい要素は割愛しますが、ゲームでよくあるゲストユーザーを作成し、作成したゲストユーザーのプレイヤーデータを DB に保存する部分のサンプル実装が組み込まれています。今回利用している ソースコードは Github で公開されています。

Architecture diagram illustrating the AWS Game Backend Framework, a scalable solution for integrating cross-platform games with custom identity and backend components on AWS. The diagram features AWS Lambda, API Gateway, AWS WAF, Amazon S3, Amazon DynamoDB, AWS Secrets Manager, CloudFront, and shows interactions between game clients and backend services. Step-by-step annotations explain identity management, token generation, and backend integration in the AWS cloud environment.

3. やってみよう

もし、 AWS アカウントを持っていない方は、こちらのハンズオン を参考に AWS アカウントを作成してみて下さい。

ここからは AWS 側の作業を進めていきます。マネジメントコンソールにログイン してください。

ログインしましたら、上部のメニューにある検索で、“CloudShell” と入力し、CloudShell をクリックします。

Screenshot of the AWS Management Console CloudShell search interface displayed in Japanese, showing search results for 'cloudshell' including services, blog posts, and documentation.

AWS CloudShell のターミナルでコマンドを実行

ここからは、AWS CloudShell のターミナルでコマンドを実行していきます。

Screenshot of the AWS CloudShell console open in the ap-northeast-1 (Tokyo) region, showing a terminal prompt and the AWS management console interface in Japanese.

スクリプトをコピー

下記、スクリプトをまとめてクリップボードへコピーし、CloudShell のターミナルへ貼り付けます。正確にコピーする必要があるので、コード部分のコピーボタンをお使い下さい。

bash
wget https://ws-assets-prod-iad-r-iad-ed304a55c2ca1aee.s3.us-east-1.amazonaws.com/086bb355-4fdc-4e63-8ca7-af7cfc45d4f2/deployment_pipeline.yml 
aws cloudformation deploy --template-file deployment_pipeline.yml --stack-name AWSGameBackendFrameworkDeploymentPipeline --capabilities CAPABILITY_IAM 
aws codebuild start-build --project-name GameBackendCodeBuildProject > output.json 
echo 'You can now move on to AWS CodeBuild console to review the ongoing deployment...' 

スクリプトを CloudShell のターミナルに貼り付け

では、コピーした上記のスクリプトを CloudShell のターミナルに貼り付けていきましょう。CloudShell のターミナルへ複数行テキストを貼り付ける際は、警告が出ますが、悪意のあるコードはありませんので「貼り付け」をクリックしてください。

Screenshot of the AWS CloudShell interface displaying a multiline text safety warning dialog in Japanese. The dialog cautions users about the potential risks of pasting text copied from external sources and presents a sample deployment command. The interface features AWS services and is presented in dark mode.

コマンドの実行完了

数分待つと、全てのコマンドの実行が完了します。コマンドラインに「You can now move on to AWS CodeBuild console to review the ongoing deployment...」と最後出ていれば完了しています。

Screenshot of the AWS CloudShell interface displaying a multiline text safety warning dialog in Japanese. The dialog cautions users about the potential risks of pasting text copied from external sources and presents a sample deployment command. The interface features AWS services and is presented in dark mode.

CodeBuild を開く

この裏側では、別の Build が動いているので確認しにいきます。AWS のマネジメントコンソール上部のメニューにある検索で、“CodeBuild” と入力し、CodeBuild をクリックしてください。

Screenshot of the AWS Management Console showing a search for 'CodeBuild' in Japanese language and dark mode theme. The image displays search results and navigation options related to AWS CodeBuild.

GameBackendCodeBuildProject のステータス進行を確認

AWS CodeBuild にアクセスすると、GameBackendCodeBuildProject のステータスが進行中になっているのを確認して、ビルドのステータスが完了になるまで待ちます。完了までは約 15 分程度です。

Screenshot of the AWS CodeBuild console displaying the status of a game backend project, with the interface in Japanese. The project is sourced from GitHub and the latest build status is 'In Progress' (進行中).

CodeBuild のステータス完了

CodeBuild のステータスが完了になったら、今回ゲームクライアントから接続するための情報を集めていきます。

Screenshot of the AWS CodeBuild console in Japanese, displaying a list of build projects for a custom game backend. The project 'GameBackendCodeBuild Project' is sourced from GitHub and shows a successful build status.

CloudFormation を開く

上部のメニューにある検索で、“CloudFormation” と入力し、CloudFormation をクリックしてください。

Screenshot of the AWS Management Console showing a search for 'CloudFormation' in the Japanese interface. The search results display CloudFormation services and related features in Japanese.

スタックの作成を確認

AWS CloudFormation にアクセスすると、画面にはスタックが 新しく 4 つ作成されているはずです。

では、ここからバックエンドに必要な 2 つのエンドポイントを集めていきます。

Screenshot of the AWS CloudFormation console in Japanese, displaying a list of stacks including a custom game backend deployment. The interface shows stack names, statuses, and operation buttons, with the UI language set to Japanese.

ログイン用のエンドポイントを保存

1つ目は、ログイン用のエンドポイントです。スタックに「CustomIdentityComponentStack」があるので、クリックし、タブの「出力」をクリックしてください。

すると、いくつかのキーと値が表示されるので、「LoginEndpoint」の値をコピーして、手元のテキストエディタに保存してください。これは、ユーザーのログイン認証に利用します。

Screenshot of the AWS CloudFormation console in Japanese showing the CustomIdentityComponentStack stack outputs, including the LoginEndpoint URL. Key navigation and output details are highlighted and numbered for user guidance.

ユーザーのプレイヤーデータ保存・取得用のエンドポイントを保存

2 つ目は、ユーザーのプレイヤーデータを保存・取得用のエンドポイントです。スタックに「PythonServerlessHttpApiStack」があるのでクリックし、タブの「出力」をクリックしてください。

すると、いくつかのキーと値が表示されるので、「BackendEndpointUrl」の値をコピーして、手元のテキストエディタに保存してください。これは、ユーザーのプレイヤーデータの保存・取得用に利用します。

Screenshot of the AWS CloudFormation console in Japanese showing the output of a Python Serverless HTTP API stack, with the stack status marked as CREATE_COMPLETE and the BackendEndpointUrl output displayed.

4. ゲームクライアントからバックエンドにアクセス

ゲームクライアントのサンプルを使って構築したバックエンドにアクセスしてみましょう。まずは、Github で 公開されている aws-solutions-library-samples/guidance-for-custom-game-backend-hosting-on-aws を ゲームエンジンがインストールされているローカルマシンにダウンロードします。

もし、zip ファイルでダウンロードしていれば、ファイルを解凍しフォルダーにアクセスしてみましょう。

ディレクトリ直下に各ゲームエンジンのサンプルが用意されているので、利用しているゲームエンジンを選択してください。今回は Unity で試してみたいと思います。

UnitySample フォルダーがあるので、UnityHub の「ディスクから加える」でプロジェクトを開きます。Unity の場合は Unity 2021 以上の Version で利用してください。

Unity Editor で UnitySample を開くとこのような画面になるかと思います。

では、早速バックエンドにアクセスするための準備をしていきます。

Project の Assets/Samples/GuestIdentityAndRestApiBackend をクリックしてください。その後、Assets/Samples/GuestIdentityAndRestApiBackend/GuestIdentityAndRestApiBackend.unity をクリックすると Hierarchy が展開されます。

Hierarchy の中にBackendIntegrationTest があるのでクリックすると、Inspector に 「Login Endpoint Url」と「Backend Endpoint Url」 を入力する項目が表示されるので、先ほど保存しておいた、2つのエンドポイントを入力してください。https:// から始まるものです。

その後、Play ボタンをクリックすると....見事バックエンドと通信し、ユーザーのプレイヤー名を書き換えることに成功したメッセージが表示されます。もし、失敗するならエンドポイントの前後に空白がないか確認してみてください。




5. なにが起こっているのか

サンプルコードを動かしただけでは、何が起こったのか分からないかと思うので、シーケンス図を使ってご紹介します。

まず、大きく分けて 2 つの処理が行われています。1 つ目はゲームのゲストユーザーを作成して、そのゲストユーザーのアクセストークンを取得しました。2 つ目に、認証したユーザーからユーザーのプレイヤーデータを書き換え、取得すると言った流れが大きな流れです。

Sequence diagram illustrating the authentication flow for a game backend, showing interactions between client, login service, and backend service during guest user creation, access token retrieval, and token verification using JWKS.

6. リソースの削除

AWS マネージメントコンソールを開き、CloudFormation に移動します。今回デプロイした、4 つのスタックを削除することで、関連するリソースを一括で削除できます。
Screenshot of the AWS CloudFormation web console UI in Japanese, showing the stacks section with completed stack entries for a custom game backend, serverless API, identity component, and AWS CDK deployment. CloudFormation and related AWS service icons are visible at the top.

7. まとめ

今回はゲームのバックエンドでは一体何をしているのか、クライアントエンジニアの方向けにサンプルのコードを使いながら紹介しました。具体的にはゲームクライアントからゲームバックエンドに対して、ユーザー認証とユーザーのプレイヤーデータを保存する機能を実際に動かしてみました。

今回利用したコードは Github で公開 されていますので、動かした部分のコードや AWS のリソースを含めてどう実装しているのか Dive Deep すると多くの学びがあるかと思います。また、今回は取り上げられませんでしたが、専用ゲームサーバー (Dedicated Game Server) やフレンド機能、チャット機能のサンプル実装も組み込まれているので、興味がある方は覗いてみてください。

筆者プロフィール

山本 純也 (@yamjun)
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト

ゲーム業界に特化したソリューションアーキテクトとしてお客様を支援しております。

最近は、自作キーボード沼にどっぷりハマり、新しいキースイッチやキーキャップを物色するのに夢中です。家族からは「またキーボード ?」と冷ややかな目で見られていますが、究極の打鍵感を求める情熱は止められません。はんだごてと共に、静かに進化し続けるマイキーボードが私の癒しです。

A person wearing glasses and a black AWS t-shirt with colorful icons is standing in front of a wall with greenery and a map pattern. The setting appears casual and modern.