Game Server Services(GS2)のゲームエンジン用SDKと各種言語用SDKの違いを調べてみた
こんにちは、ゲームソリューション部の入井です。
本記事はゲーソル・ギョーソル Advent Calendar 2024の6日目の記事です。
GS2のSDKは、UnityやUnreal Engineなどのゲームエンジンで使うためのSDKと、各種プログラミング言語で使用できるSDKの2種類が提供されています。この2種類のSDKは、単に使用する環境が異なるだけでなく、使用できるメソッド等も大きく異なります。
この記事では、2種類のSDKの具体的な違いについて紹介していきます。
GS2のSDKの一覧
ゲームエンジン用
ゲームエンジン | GitHubリポジトリ | 配布方法 |
---|---|---|
Unity | https://github.com/gs2io/gs2-sdk-for-unity | 公式ヘルプにてunitypackageを配布 |
Unreal Engine | https://github.com/gs2io/gs2-sdk-for-ue5 | GitHubリポジトリにて配布 |
いずれのSDKも、ゲームエンジン内でライブラリやプラグインとしてインストールするための作業が必要になります。
上記の他に、Unity向けにはノーコードでGS2の機能が使えるGS2 UIKit for Unityというものもあります。
各種プログラミング言語用
プログラミング言語 | GitHubリポジトリ | 配布方法 |
---|---|---|
Go | https://github.com/gs2io/gs2-golang-sdk | Go Modulesによる配布 |
PHP | https://github.com/gs2io/gs2-php-sdk | Composerによる配布 |
Java | https://github.com/gs2io/gs2-java-sdk | Mavenによる配布 |
C# | https://docs.gs2.io/ja/get_start/ | NuGetによる配布 |
Typescript | https://github.com/gs2io/gs2-typescript-sdk | npmによる配布 |
Python | https://github.com/gs2io/gs2-python-sdk | PyPIによる配布 |
いずれのSDKも、各言語用のパッケージ管理システムを使うことでコマンド一発で導入することが可能です。
ゲームエンジン用と各種言語用では使用できるメソッドが違う
GS2のドキュメントでは、2つのSDKのリファレンスはそれぞれ個別のページに分けられています。
それぞれのリファレンスを比較すると、2つのSDKでは提供しているモデルやメソッドが異なることが分かります。基本的に、ほとんどのマイクロサービスで以下のような形になっています。
- 各種言語用SDK
- 全てのメソッド・モデルを使用可能
- モデルの中のフィールドは全てアクセス可能
- ゲームエンジンSDK
- 一部のメソッド・モデルを使用可能
- モデルの中のフィールドも各種言語用SDKと比べて少ない
以下、いくつかのマイクロサービスでメソッドに焦点を当てて具体的にどのように違いがあるのかを紹介していきます。
GS2-Lotteryの場合
ガチャなどに使う抽選機能を提供するGS2-Lotteryで使用できるメソッドを見てみます。
以下の表は、各種言語用SDKで使用できるメソッドの内、ゲームエンジンSDKでも使用できるメソッドはどれかを表しています。ゲームエンジン欄が○になっているメソッドが、ゲームエンジンSDKでも使えるメソッドです。
※なお、実際に各SDKで使えるメソッドはもっと多いですが、今回の目的はあくまでゲームエンジンSDKとの比較のため、情報量が多くなりすぎないよう抜粋する形で記載しています。
メソッド名 | 内容 | ゲームエンジン |
---|---|---|
createNamespace | ネームスペースを新規作成 | |
getNamespace | ネームスペースを取得 | |
createLotteryModelMaster | 抽選モデルマスターを新規作成 | |
getLotteryModelMaster | 抽選モデルマスターを取得 | |
createPrizeTableMaster | 排出確率テーブルマスターを新規作成 | |
getPrizeTableMaster | 排出確率テーブルマスターを取得 | |
describeLotteryModels | 抽選モデルの一覧を取得 | ○ |
getLotteryModel | 抽選モデルを取得 | ○ |
getPrizeTable | 排出確率テーブルを取得 | |
drawByUserId | ユーザIDを指定して抽選を実行 | |
prediction | 抽選結果の予測結果を取得 | |
describeProbabilities | 排出確率を取得 | ○ |
describeProbabilitiesByUserId | ユーザIDを指定して排出確率を取得 |
使えるメソッドの違いから、次のような傾向が確認できます。
- ネームスペース・マスターなどの管理系のデータにはゲームエンジンSDKではアクセスできない。
- ゲームクライアントで必要な情報が入っているモデルは、ゲームエンジンSDKでもアクセスできる。
- 抽選モデル
- 景品排出確率
- ユーザーIDを指定して~系のメソッドは、ゲームエンジンSDKではアクセスできない。
なお、GS2-Lotteryは抽選用のマイクロサービスですが、抽選実行メソッドはdrawByUserId
しか用意されておらず、しかもゲームエンジンSDKでは提供されていません。これは、ガチャ実行のようないわゆる入手アクションは、通貨の支払いなどのような消費アクションと同じトランザクション内で実行されるべきというGS2の考え方から来ています。
消費・入手アクションやトランザクションについては以下の記事で詳しく解説しています。
GS2-Friendの場合
続いて、プレイヤー同士の交流機能を提供するGS2-Friendも見てみます。
こちらについても、GS2-Lottery同様一部のメソッドを抜粋しています。以下の表ではフォロー関係のメソッドしか表示していませんが、実際はプロフィールやフレンド機能なども用意されています。
メソッド名 | 内容 | ゲームエンジン |
---|---|---|
createNamespace | ネームスペースを新規作成 | |
getNamespace | ネームスペースを取得 | |
describeFollows | フォローしているユーザーの一覧取得 | ○ |
getFollow | フォローしているユーザーを取得 | ○ |
getFollowByUserId | ユーザーIDを指定してフォローしているユーザーを取得 | |
follow | フォローする | ○ |
followByUserId | ユーザーIDを指定してフォローする | |
unfollow | フォロー解除する | ○ |
unfollowByUserId | ユーザーIDを指定してフォロー解除する |
こちらについても、次のような傾向が確認できます。
- ネームスペース・マスターなどの管理系のデータにはゲームエンジンSDKではアクセスできない。
- フォローユーザー情報のようなゲームクライアントで必要な情報が入っているモデルは、ゲームエンジンSDKでもアクセスできる。
- フォロー・フォロー解除のようなプレイヤーが使用する処理のメソッドもゲームエンジンSDKでアクセスできる。
- ユーザーIDを指定して~系のメソッドは、ゲームエンジンSDKではアクセスできない。
各種言語用SDKでしかアクセスできないマイクロサービスもある
以下のマイクロサービスについては、ゲームエンジンSDKでは丸ごとアクセスできないようになっていました。
マイクロサービス名 | 内容 |
---|---|
GS2-Script | 各マイクロサービスの拡張に使用するLuaスクリプトの管理 |
GS2-Deploy | GS2上のリソース情報を記述するテンプレートファイルの管理・実行など |
GS2-Identifier | APIアクセス用のクレデンシャル情報やセキュリティポリシーの管理など |
GS2-Key | 暗号化処理に使用する暗号鍵の管理 |
それぞれのSDKの使い分け
これまでの内容から、ゲームエンジン向けSDKは以下のような考え方で提供されているのだと思われます。
- プレイヤーとしてゲームクライアントからGS2へアクセスするために使用
- 以下のような情報にプレイヤー個人がアクセスするとセキュリティ的に問題があるため、アクセスするためのメソッドを提供していない
- 各マイクロサービスのマスターデータ
- 他のユーザーとしてアクセスするメソッド
- スクリプトやクレデンシャル情報などの管理上の重要情報
上記のような制限から、ゲームエンジン向けSDKだけでは必要な要件を満たせない場合は、別のサーバー環境等で各種言語用SDKを使用することも検討してみると良いでしょう。
一方で、各種言語用SDKは全てのマイクロサービスやメソッドにアクセスできることから、管理ツール等の開発向けと思われるかもしれませんが、実際はゲームクライアントの開発でも使えます。
GS2-Identifierではクレデンシャルごとに細かくセキュリティポリシーを設定可能であり、セキュリティ的に問題のない機能のみにアクセスできるプレイヤー向けポリシーも最初から用意されています。そのため、適切なポリシーを使用すれば、ゲームエンジン以外の環境で開発されたゲームであっても、安全にGS2のSDKを使うことが可能です。
まとめ
- GS2では、ゲームエンジン用と各言語用の2種類のSDKを提供しており、使用できるモデルやメソッドが異なる。
- ゲームエンジンSDKはゲームクライアントで使用されることを想定しており、管理系へのアクセスは制限されている。
- 各言語用SDKは全ての機能にアクセス可能で、適切なセキュリティポリシーを設定することでゲームクライアントでも利用可能。
- ゲームエンジンSDKで要件を満たせない場合は、各言語用SDKの利用も検討する。
GS2のSDKの違いについて書いてみました。
ゲームエンジン向けSDKをメインで使っていて各種言語用SDKは使っていないという方は、新たなGS2の使い方の発見に繋がるかもしれないので、是非各種言語用SDKも触ってみていただければと思います。