Game Server Services(GS2)のゲームエンジン用SDKと各種言語用SDKの違いを調べてみた

Game Server Services(GS2)のゲームエンジン用SDKと各種言語用SDKの違いを調べてみた

Clock Icon2024.12.06

こんにちは、ゲームソリューション部の入井です。

本記事はゲーソル・ギョーソル Advent Calendar 2024の6日目の記事です。

https://dev.classmethod.jp/referencecat/gamesol-businesssol-advent-calendar-2024/

https://qiita.com/advent-calendar/2024/gamesol-businesssol

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で使用できるメソッドを見てみます。

https://docs.gs2.io/ja/api_reference/lottery/game_engine/

https://docs.gs2.io/ja/api_reference/lottery/sdk/

以下の表は、各種言語用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の考え方から来ています。
消費・入手アクションやトランザクションについては以下の記事で詳しく解説しています。

https://dev.classmethod.jp/articles/gs2-buy-item-transaction/

GS2-Friendの場合

続いて、プレイヤー同士の交流機能を提供するGS2-Friendも見てみます。

https://docs.gs2.io/ja/api_reference/friend/game_engine/

https://docs.gs2.io/ja/api_reference/friend/sdk/

こちらについても、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も触ってみていただければと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.