---
title: "はじめてのAgones：ゲームサーバーを構築してみよう | grasys blog"
url: "https://blog.grasys.io/post/te-watanabe/agones-gameserver/"
description: "はじめに grasys のワタナベです。今回は、オンラインゲームの案件で利用しているライブラリ、Agones のチュートリアルについてまとめました。 Agonesとは Agones はオンラインマルチプレイに対応したゲームサーバーのホスティング、スケーリングを Kubernetes 上で行うための OSS ライブラリ…"
---

# はじめてのAgones：ゲームサーバーを構築してみよう

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[te.watanabe](/authors/te-watanabe/)
-   公開日：2025年5月28日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Agones](/tags/agones/)

![はじめてのAgones：ゲームサーバーを構築してみよう](/_astro/hero.DH14ZnIF_Z1KuSyd.webp)

## はじめに

grasys のワタナベです。今回は、オンラインゲームの案件で利用しているライブラリ、Agones のチュートリアルについてまとめました。

## Agonesとは

Agones はオンラインマルチプレイに対応したゲームサーバーのホスティング、スケーリングを Kubernetes 上で行うための OSS ライブラリです。

[Agones 公式サイト](https://agones.dev/site/)

今回は GitHub で公開されている[サンプルコード](https://github.com/googleforgames/agones/tree/main/examples)を使って、GKEにゲームサーバーを構築してみましょう。

Agones を利用して作成できる Kubernetes リソースのうち、今回は以下について触れていきます。

-   GameServer: ゲームサーバー単体
    
-   Fleet: 複数のゲームサーバーの集まり。指定した台数のゲームサーバーを起動してくれる。
    
-   FleetAutoScaler: Fleetのスケールを自動で変更する。最低台数、最大台数、バッファなど柔軟な指定が可能。
    

Agones バージョン情報: 1.49.0

## 対象読者

-   Kubernetesに触れたことはあるが、Agonesを初めて触る人
    
-   ゲーム向けサーバーを構築してみたい人
    

## Terraform で GKE Autopilot クラスタを構築する

Agonesを使用するにはKubernetesクラスタが必要です。今回は実案件でも利用している GKE Autopilot クラスタを作成します。

[サンプルコード](https://github.com/googleforgames/agones/tree/main/install/terraform/modules/gke-autopilot)には GKE Autopilot クラスタ構築用の.tfファイルが含まれているため、こちらを使用します。

project , location, subnetwork など、variables.tf の内容は自分の環境に合わせて修正しましょう。

Plain textcontent\_copy

```
  default = {
    "name"                          = "test-cluster"
    "project"                       = "agones"
    "location"                      = "us-west1"
    "network"                       = "default"
    "subnetwork"                    = ""
    "releaseChannel"                = "REGULAR"
    "kubernetesVersion"             = "1.31"
    "deletionProtection"            = true
    "maintenanceExclusionStartTime" = null
    "maintenanceExclusionEndTime"   = null
  }
```

variables.tf を 修正後、`terraform plan` および `terraform apply` を実行し、クラスタを構築します。

クラスタ構築完了後、`gcloud container clusters get-credentials` コマンドを実行しクラスタへ接続します。

## Agones をインストールする

Agones をインストールする方法は複数ありますが、今回はHelm チャートを利用してみましょう。

公式サイトの手順に従ってインストールします。

[Install Agones using Helm（公式サイト）](https://agones.dev/site/docs/installation/install-agones/helm/)

GKE クラスタにインストールする際の注意点として、インストールを実行するユーザが Kubernetes Engine 管理者 のロールを付与されている必要があります

Plain textcontent\_copy

```
helm repo add agones https://agones.dev/chart/stable
helm repo update
helm install my-release --namespace agones-system --create-namespace agones/agones
```

インストール後、以下のコマンドでpodが起動していることを確認します

Plain textcontent\_copy

```
kubectl --namespace agones-system get pods -o wide
```

## Game server をデプロイする

### Game serverのデプロイ

[サンプル](https://github.com/googleforgames/agones/tree/release-1.49.0/examples/simple-game-server)の Game server をデプロイしてみましょう。

Plain textcontent\_copy

```
❯ kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.49.0/examples/simple-game-server/gameserver.yaml

gameserver.agones.dev/simple-game-server-g455v created
```

デプロイしたgameserverは、`kubectl get gameserver` コマンドで確認できます。

Plain textcontent\_copy

```
❯ kubectl get gameserver simple-game-server-g455v
NAME                       STATE   ADDRESS       PORT   NODE                                                  AGE
simple-game-server-g455v   Ready   34.85.73.93   7973   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   2m22s
```

起動した game serverに接続します。

このサーバーは入力されたメッセージをそのまま返すごくシンプルな機能があり、EXITを送信することで終了します

Plain textcontent\_copy

```
nc -u {IP} {PORT}

❯ nc -u 34.85.73.93 7973
Hello World !
ACK: Hello World !
EXIT
ACK: EXIT
```

### Fleetのデプロイ

今度は複数台のgame serverを起動してみましょう。[サンプル](https://github.com/googleforgames/agones/blob/release-1.49.0/examples/simple-game-server/fleet.yaml)コードを使用してFleetを起動します。

Plain textcontent\_copy

```
❯ kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.49.0/examples/simple-game-server/fleet.yaml

fleet.agones.dev/simple-game-server created
```

複数台のgame serverが起動していることが確認できます。

Plain textcontent\_copy

```
❯ kubectl get fleet
NAME                 SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
simple-game-server   Packed       2         2         0           2       50s

❯ kubectl get gameserver
NAME                             STATE   ADDRESS       PORT   NODE                                                  AGE
simple-game-server-9cwdr-8bjdc   Ready   34.85.73.93   7407   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   40s
simple-game-server-9cwdr-9x8qc   Ready   34.85.73.93   7265   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   40s
```

Agones はプレイヤーがゲームセッションに利用するサーバを STATE=Ready なサーバから割り当てします。ゲームセッションに割り当てられた game server は STATE=allocated に変化します。

[サンプル](https://github.com/googleforgames/agones/blob/main/examples/simple-game-server/gameserverallocation.yaml)コードを実行して、 game server の STATE が変化することを確認してみましょう。

Plain textcontent\_copy

```
❯ kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.49.0/examples/simple-game-server/gameserverallocation.yaml -o yaml

❯ kubectl get fleet
NAME                 SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
simple-game-server   Packed       2         2         1           1       4m27s

❯ kubectl get gs
NAME                             STATE       ADDRESS       PORT   NODE                                                  AGE
simple-game-server-9cwdr-8bjdc   Allocated   34.85.73.93   7407   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   4m23s
simple-game-server-9cwdr-9x8qc   Ready       34.85.73.93   7265   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   4m23s
```

game serverのうち1台がセッションに割り当てられ、STATE=Allocated に変化しました。

Fleet で起動する game server の台数は増減させることができますが、台数を0台に指定するとどうなるでしょうか。

Plain textcontent\_copy

```
❯ kubectl scale fleet simple-game-server --replicas=0
fleet.agones.dev/simple-game-server scaled

❯ kubectl get fleet
NAME                 SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
simple-game-server   Packed       0         1         1           0       33m

❯ kubectl get gs
NAME                             STATE       ADDRESS       PORT   NODE                                                  AGE
simple-game-server-9cwdr-8bjdc   Allocated   34.85.73.93   7407   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   33m
```

STATE=Allocated となったgame server は Fleet のサイズを変更してもシャットダウンされません。割り当てられたゲームセッションが終了するまで game server は起動しつづけることになります。

### Fleet autoscalerのデプロイ

Fleet autoscaler をデプロイすることで、Fleetの最小・最大台数や、バッファ台数を柔軟に設定することができます。

[サンプル](https://github.com/googleforgames/agones/blob/main/examples/simple-game-server/fleetautoscaler.yaml)コードをつかって Fleet Autoscalerをデプロイしてみましょう。

Plain textcontent\_copy

```
❯ kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.49.0/examples/simple-game-server/fleetautoscaler.yaml
fleetautoscaler.autoscaling.agones.dev/simple-game-server-autoscaler created

❯ kubectl get fleetautoscaler simple-game-server-autoscaler -o yaml
(省略)
spec:
  fleetName: simple-game-server
  policy:
    buffer:
      bufferSize: 2
      maxReplicas: 10
      minReplicas: 0
    type: Buffer
(省略)

❯ kubectl get fleet
NAME                 SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
simple-game-server   Packed       3         3         1           1       49m

❯ kubectl get gs
NAME                             STATE       ADDRESS        PORT   NODE                                                  AGE
simple-game-server-9cwdr-8bjdc   Allocated   34.85.73.93    7407   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   51m
simple-game-server-9cwdr-c2cgl   Ready       34.85.73.93    7787   gk3-watanabe-test-cluste-nap-tl81v4a7-1bc490a7-v8tf   3m46s
simple-game-server-9cwdr-lzc5n   Ready       34.84.140.96   7678   gk3-watanabe-test-cluste-nap-lp78zrgb-79389980-g9gw   3m46s
```

サンプルのFleetautoscalerはmax10台、min0台、バッファ2台を指定しています。Allocated のgame server が1台あるので、バッファの台数分がReady状態になるように自動でgame serverが起動されました。

注意点として、Fleet autoscaler はminを0台にしても、バッファ台数だけReadyのサーバを起動するように動作します。また、バッファは0より大きい数を指定する必要があるため、Fleet autoscaler をデプロイ済みの場合対象 Fleet を完全停止することが現状はできないようです。

## 終わりに

今回は、Agonesの公式サイトに従ってチュートリアルを実施する流れを解説しました。

具体的なゲームプログラムを使った Agones の使い方をもっと試してみたいと思った方は、googleforgamesのGitHubで公開されている[space-agon](https://github.com/googleforgames/space-agon) を触ってみるのがオススメです。

Agones だけでなく、プレイヤーのマッチング機能を実装するためのフレームワーク Open Match の使い方も合わせて学ぶことができます。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/te-watanabe/)

### [te.watanabe](/authors/te-watanabe/)

te.watanabeのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/te-watanabe/)
