Modular Extend SDK を始める
注釈:本資料はAI技術を用いて翻訳されています。
概要
この記事では、複数のサポート対象プログラミング言語で Modular Extend SDK(モノリシックな Extend SDK の後継)を使用してプロジェクトを作成する基本を説明します。
Modular Extend SDK では、プロジェクトが実際に必要とする AGS サービスパッケージのみを含めることができ、依存関係の肥大化を軽減できます。モノリシック SDK から段階的に移行できるように、互換レイヤーも用意されています。
目的
このガイドでは、以下を行います。
- アプリケーションプロジェクトを作成する。
- Modular Extend SDK パッケージをプロジェクトの依存関係として追加する。
- Modular Extend SDK を使用して AGS エンドポイントを呼び出す。
- アプリケーションを実行する。
前提条件
このガイドを開始するには、以下が必要です。
- C#
- Go
- Python
- AccelByte Gaming Services (AGS)(デモ環境)へのアクセス。
AB_BASE_URL環境変数には<環境のドメイン URL>を使用します。- AGS Public Cloud のお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloud のお客様の例:
https://dev.customer.accelbyte.io
- AGS Public Cloud のお客様の例:
- クライアントタイプ Confidential で OAuth Client を作成します。
- Client ID の値を
AB_CLIENT_ID環境変数に使用します。 - Client Secret の値を
AB_CLIENT_SECRET環境変数に使用します。
- Client ID の値を
- AccelByte C# Modular Extend SDK
- 以下のツールへのアクセス。
- Git
- .NET 8.0 SDK
- C# IDE
- AccelByte Gaming Services (AGS)(デモ環境)へのアクセス。
AB_BASE_URL環境変数には<環境のドメイン URL>を使用します。- AGS Public Cloud のお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloud のお客様の例:
https://dev.customer.accelbyte.io
- AGS Public Cloud のお客様の例:
- クライアントタイプ Confidential で OAuth Client を作成します。
- Client ID の値を
AB_CLIENT_ID環境変数に使用します。 - Client Secret の値を
AB_CLIENT_SECRET環境変数に使用します。
- Client ID の値を
- AccelByte Go Modular Extend SDK
- 以下のツールへのアクセス。
- Git
- Go 1.23 以降
- Go IDE
- AccelByte Gaming Services (AGS)(デモ環境)へのアクセス。
AB_BASE_URL環境変数には<環境のドメイン URL>を使用します。- AGS Public Cloud のお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloud のお客様の例:
https://dev.customer.accelbyte.io
- AGS Public Cloud のお客様の例:
- クライアントタイプ Confidential で OAuth Client を作成します。
- Client ID の値を
AB_CLIENT_ID環境変数に使用します。 - Client Secret の値を
AB_CLIENT_SECRET環境変数に使用します。
- Client ID の値を
- AccelByte Python Modular Extend SDK
- 以下のツールへのアクセス。
- Git
- Python 3.9 以降
- Python IDE
プロジェクトを作成する
- C#
- Go
- Python
dotnet CLI を使用して、新しいソリューションとソリューション内の新しいコンソールプロジェクトを作成します。
$ mkdir -p /path/to/mysolution
$ cd /path/to/mysolution
$ dotnet new sln --name mysolution # 新しいソリューションを作成: mysolution
$ dotnet new console -o myproject # 新しいコンソールプロジェクトを作成: myproject
$ dotnet sln add myproject/myproject.csproj # myproject を mysolution に追加
フォルダを作成し、go mod init を使用して新しい Go アプリケーションプロジェクトを作成します。
$ mkdir getting-started
$ cd getting-started/
$ go mod init golang-application
フォルダを作成し、venv を使用して Python 仮想環境を作成します。
macOS または Linux(Bash)の場合:
$ mkdir myproject
$ cd myproject/
$ python -m venv venv
$ source venv/bin/activate
$ python -c "import sys; print(sys.executable)" # 現在使用中の Python 実行ファイルを確認
Windows(PowerShell)の場合:
C:\> mkdir myproject
C:\> cd myproject/
C:\> python -m venv venv
C:\> venv\Scripts\Activate.ps1
C:\> python -c "import sys; print(sys.executable)" # 現在使用中の Python 実行ファイルを確認
プロジェクトの依存関係に追加する
- C#
- Go
- Python
Modular C# Extend SDK は個々の NuGet パッケージとして配布されます。常に必要となるコアパッケージをインストールし、その後プロジェクトが必要とする AGS サービスパッケージのみを追加します。
$ cd /path/to/mysolution/myproject
# 常に必要
$ dotnet add package AccelByte.Sdk.Abstractions
$ dotnet add package AccelByte.Sdk.Core
# 認証とトークン検証に必要
$ dotnet add package AccelByte.Sdk.Authentication
# オプションの機能パッケージ
$ dotnet add package AccelByte.Sdk.Feature.AutoRefreshToken
$ dotnet add package AccelByte.Sdk.Feature.LocalTokenValidation
# AGS サービスパッケージ — 必要なものだけを追加
$ dotnet add package AccelByte.Sdk.Api.Basic
$ dotnet add package AccelByte.Sdk.Api.Iam
# $ dotnet add package AccelByte.Sdk.Api.<ApiName> # 必要に応じて追加
利用可能な API パッケージの一覧は apis/ ディレクトリを参照してください。
使用している AGS のバージョンに一致する Modular C# Extend SDK のバージョンを使用することを推奨します。
Modular Go Extend SDK は、AGS サービスごとに個別の Go モジュールとして配布されます。go.mod ファイルを編集して、プロジェクトが必要とするサービスのみをインポートします。
{VERSION} は特定のリリースバージョンタグに置き換えてください。
module golang-application
go 1.23
require (
github.com/AccelByte/accelbyte-go-modular-sdk/services-api {VERSION}
github.com/AccelByte/accelbyte-go-modular-sdk/iam-sdk {VERSION}
github.com/AccelByte/accelbyte-go-modular-sdk/basic-sdk {VERSION}
// 必要に応じて他のサービス SDK を追加
)
次に、以下を実行します。
$ go mod tidy
利用可能な Go モジュールの一覧は Published Go Modules を参照してください。
使用している AGS のバージョンに一致する Modular Go Extend SDK のバージョンを使用することを推奨します。
Modular Python Extend SDK は個別の pip パッケージとして配布されます。コアパッケージをインストールし、その後プロジェクトが必要とする AGS サービスパッケージのみを追加します。
# 常に必要
$ pip install accelbyte-py-sdk-core
# AGS サービスパッケージ — 必要なものだけをインストール
$ pip install accelbyte-py-sdk-service-iam
$ pip install accelbyte-py-sdk-service-basic
# pip install accelbyte-py-sdk-service-<name> # 必要に応じて追加
# オプションの機能パッケージ
$ pip install accelbyte-py-sdk-feat-auth
$ pip install accelbyte-py-sdk-feat-token-validation
# または、すべてを一度にインストール
# $ pip install accelbyte-py-sdk-all
使用している AGS のバージョンに一致する Modular Python Extend SDK のバージョンを使用することを推奨します。
コードで使用する
- C#
- Go
- Python
Program.csで SDK インスタンスを作成し、クライアントクレデンシャルでログインして AGS API を呼び出します。DefaultConfigRepositoryは、環境変数からAB_BASE_URL、AB_CLIENT_ID、AB_CLIENT_SECRETを読み取ります。
// Program.cs
using AccelByte.Sdk.Core;
using AccelByte.Sdk.Core.Net.Http;
using AccelByte.Sdk.Core.Repository;
using AccelByte.Sdk.Api;
using AccelByte.Sdk.Api.Basic.Model;
// SDK インスタンスを構築
IAccelByteSdk sdk = AccelByteSdk.Builder
.UseDefaultHttpClient()
.UseDefaultConfigRepository() // 環境変数から AB_BASE_URL、AB_CLIENT_ID、AB_CLIENT_SECRET を読み取る
.UseDefaultTokenRepository()
.Build();
// クライアントクレデンシャルでログイン
bool login = sdk.LoginClient();
if (!login)
{
Console.WriteLine("Login failed");
return 1;
}
// AGS エンドポイントを呼び出す — 例: Basic サービスの getMyProfileInfo
var response = sdk.GetBasicApi().UserProfile.GetMyProfileInfoOp.Execute(sdk.Namespace);
if (response.IsSuccess && response.Data != null)
{
UserProfilePrivateInfo profileData = response.Data;
Console.WriteLine($"User ID: {profileData.UserId}");
}
else
{
Console.WriteLine($"Error: {response.Error?.Message}");
return 2;
}
// ログアウト
bool logout = sdk.Logout();
if (!logout)
{
Console.WriteLine("Logout failed");
return 1;
}
return 0;
main.goで SDK インスタンスを作成し、クライアントクレデンシャルでログインして AGS API を呼び出します。DefaultConfigRepositoryImplは、環境変数からAB_BASE_URL、AB_CLIENT_ID、AB_CLIENT_SECRETを読み取ります。
// main.go
package main
import (
"github.com/AccelByte/accelbyte-go-modular-sdk/services-api/pkg/factory"
"github.com/AccelByte/accelbyte-go-modular-sdk/services-api/pkg/service/iam"
"github.com/AccelByte/accelbyte-go-modular-sdk/services-api/pkg/utils/auth"
"github.com/AccelByte/accelbyte-go-modular-sdk/iam-sdk/pkg/iamclient/o_auth2_0_extension"
"github.com/sirupsen/logrus"
)
var (
// デフォルトの Go Modular Extend SDK の config と token repository の実装を使用
configRepo = *auth.DefaultConfigRepositoryImpl()
tokenRepo = *auth.DefaultTokenRepositoryImpl()
)
func main() {
// IAM OAuth サービスを準備
oAuth20Service := &iam.OAuth20Service{
Client: factory.NewIamClient(&configRepo),
ConfigRepository: &configRepo,
TokenRepository: &tokenRepo,
}
clientId := oAuth20Service.ConfigRepository.GetClientId()
clientSecret := oAuth20Service.ConfigRepository.GetClientSecret()
// OAuth クライアントクレデンシャルでログイン
err := oAuth20Service.LoginClient(&clientId, &clientSecret)
if err != nil {
logrus.Fatalf("Login failed: %v", err)
}
logrus.Info("Login successful")
// AGS エンドポイントを呼び出す — 例: IAM サービスの GetCountryLocationV3
oAuth20ExtensionService := &iam.OAuth20ExtensionService{
Client: factory.NewIamClient(&configRepo),
TokenRepository: &tokenRepo,
}
input := &o_auth2_0_extension.GetCountryLocationV3Params{}
ok, errLoc := oAuth20ExtensionService.GetCountryLocationV3Short(input)
if errLoc != nil {
logrus.Errorf("Request failed: %v", errLoc)
return
}
logrus.Infof("Country: %s", *ok.CountryName)
}
app.pyで SDK インスタンスを作成し、クライアントクレデンシャルでログインして AGS API を呼び出します。EnvironmentConfigRepositoryは、環境変数からAB_BASE_URL、AB_CLIENT_ID、AB_CLIENT_SECRET、AB_NAMESPACEを読み取ります。
# app.py
import accelbyte_py_sdk
from accelbyte_py_sdk.core import (
EnvironmentConfigRepository,
InMemoryTokenRepository,
RequestsHttpClient,
)
from accelbyte_py_sdk.services.auth.v2 import login_client
import accelbyte_py_sdk.api.iam as iam_service
def main():
# SDK を初期化
accelbyte_py_sdk.initialize(
options={
"config": EnvironmentConfigRepository(), # AB_BASE_URL、AB_CLIENT_ID などを読み取る
"token": InMemoryTokenRepository(),
"http": RequestsHttpClient(),
}
)
# クライアントクレデンシャルでログイン
_, error = login_client()
if error:
print(f"Login failed: {error}")
exit(1)
# AGS エンドポイントを呼び出す — 例: IAM サービスの get_country_location_v3
response, error = iam_service.get_country_location_v3()
if error:
print(f"Request failed: {error}")
exit(1)
print(f"Country: {response.country_name}")
if __name__ == "__main__":
main()
コードを実行する
- C#
- Go
- Python
必要な環境変数を設定し、dotnet run を使用してコードを実行します。
$ export AB_BASE_URL="<環境のドメイン URL>" # AGS Base URL
$ export AB_CLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth Client ID
$ export AB_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth Client Secret
$ export AB_NAMESPACE="<自分のネームスペース>" # AGS Namespace
$ cd /path/to/mysolution/myproject
$ dotnet run
必要な環境変数を設定し、go run main.go を使用してアプリケーションを実行します。
$ export AB_BASE_URL="<環境のドメイン URL>" # AGS Base URL
$ export AB_CLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth Client ID
$ export AB_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth Client Secret
$ go run main.go
必要な環境変数を設定し、Python インタープリタを使用してコードを実行します。
$ export AB_BASE_URL="<環境のドメイン URL>" # AGS Base URL
$ export AB_CLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth Client ID
$ export AB_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth Client Secret
$ export AB_NAMESPACE="<自分のネームスペース>" # AGS Namespace
$ python app.py
モノリシック SDK から移行する
このセクションでは、モノリシックな Extend SDK を使用している既存のプロジェクトを Modular Extend SDK へ移行する方法を説明します。
Modular Extend SDK には 互換レイヤー が用意されており、段階的な移行が可能です。サービスごとに更新していく間も、既存のコードはコンパイルされ続けます。
- C#
- Go
- Python
ステップ 1: 廃止されたコンポーネントを整理する
移行する前に、最新のモノリシック SDK バージョンにアップグレードし、非推奨または廃止されたクラス、メソッド、プロパティの使用箇所をすべて削除します。Modular SDK にはこれらは含まれていません。
ステップ 2: プロジェクトの依存関係を置き換える
モノリシック SDK のプロジェクト参照を削除し、代わりに Modular SDK の NuGet パッケージをインストールします。
# コアパッケージ(常に必要)
$ dotnet add package AccelByte.Sdk.Abstractions
$ dotnet add package AccelByte.Sdk.Core
$ dotnet add package AccelByte.Sdk.Authentication
# 使用する AGS サービスパッケージのみを追加
$ dotnet add package AccelByte.Sdk.Api.Iam
$ dotnet add package AccelByte.Sdk.Api.Basic
# dotnet add package AccelByte.Sdk.Api.<ApiName>
# 既存コードのコンパイルを維持するために互換レイヤーを追加
$ dotnet add package AccelByte.Sdk.Api.Compat
ステップ 3: 名前空間とクラス名の変更に対応する
モノリシック SDK と Modular SDK の間の主な破壊的変更を以下に示します。
SDK クラスとビルダー:
| モノリシック | Modular | |
|---|---|---|
| SDK クラス | AccelByteSDK | AccelByteSdk(IAccelByteSdk を実装) |
| SDK ビルダー | AccelByteSdkBuilder | AccelByteSdkBuilder<T>(IAccelByteSdkBuilder<T> を実装) |
名前空間:
| コンポーネント | モノリシック | Modular |
|---|---|---|
| HTTP クライアント | AccelByte.Sdk.Core.Client | AccelByte.Sdk.Core.Net.Http |
| HTTP ロガー | AccelByte.Sdk.Core.Logging | AccelByte.Sdk.Core.Net.Logging |
| ユーティリティ | AccelByte.Sdk.Core.Util | 削除 — AccelByte.Sdk.Core の拡張メソッドに移動 |
| セキュリティ | (クラスファイル内) | AccelByte.Sdk.Core.Security |
フルーエント API アクセス:
// モノリシック
sdk.Legal.Agreement.RetrieveAgreementsPublicOp.Execute();
// Modular
sdk.GetLegalApi().Agreement.RetrieveAgreementsPublicOp.Execute();
SDK の初期化 — 各デフォルト実装は、それぞれ独自の名前空間が必要になりました。
// モノリシック — 単一の名前空間がすべてをカバー
using AccelByte.Sdk.Core;
// Modular — コンポーネントごとに名前空間をインクルード
using AccelByte.Sdk.Core;
using AccelByte.Sdk.Core.Repository; // デフォルトリポジトリ用
using AccelByte.Sdk.Core.Net.Http; // HTTP クライアント用
ステップ 4: 呼び出しレスポンスの処理を更新する
各操作呼び出しは、データを直接返す代わりにレスポンスオブジェクトを返すようになりました。古い動作と同等の簡易表記として EnsureSuccess() を使用できます。
// モノリシック
List<RetrieveAcceptedAgreementResponse>? response = sdk.GetLegalApi().Agreement
.RetrieveAgreementsPublicOp.Execute();
// Modular — レスポンスオブジェクトパターン
var response = sdk.GetLegalApi().Agreement.RetrieveAgreementsPublicOp.Execute();
if (response.IsSuccess)
{
List<RetrieveAcceptedAgreementResponse> data = response.Data;
}
// Modular — モノリシックと同等の簡易表記(失敗時に ApiResponseException をスロー)
List<RetrieveAcceptedAgreementResponse> data = sdk.GetLegalApi().Agreement
.RetrieveAgreementsPublicOp.Execute().EnsureSuccess();
注: 例外の型が HttpResponseException から ApiResponseException に変更されました。
ステップ 5: 互換レイヤーを使用する(オプション)
段階的に移行している間、Modular SDK をモノリシック SDK のように動作させたい場合は、AccelByte.Sdk.Api.Compat パッケージが以下を行うアダプタークラスを提供します。
- 元の
AccelByteSDKクラス名とフルーエントインターフェース(sdk.Legal、sdk.Basicなど)を公開する。 - 既存のエラーハンドリングを維持するため、
HttpResponseException(ApiResponseExceptionから変換)を再スローする。 AccelByte.Sdk.Core.UtilのHelperクラスを拡張メソッドにマッピングして提供する。
互換パッケージを追加すると、既存のコードは変更なしでコンパイルできるはずです。その後、互換依存関係を取り除きながらサービスごとに移行できます。
互換ライブラリは、オンデマンドトークンリフレッシュのデフォルトの動作を変更しません。
ステップ 1: go.mod のインポートを更新する
モノリシック SDK モジュールを、プロジェクトが使用する AGS サービスの個別の Modular サービスモジュールに置き換えます。
// 変更前(モノリシック)
require (
github.com/AccelByte/accelbyte-go-sdk {VERSION}
)
// 変更後(Modular) — 必要なサービスのみをインポート
require (
github.com/AccelByte/accelbyte-go-modular-sdk/services-api {VERSION}
github.com/AccelByte/accelbyte-go-modular-sdk/iam-sdk {VERSION}
github.com/AccelByte/accelbyte-go-modular-sdk/basic-sdk {VERSION}
// 必要に応じて他のサービス SDK を追加
)
次に、以下を実行します。
$ go mod tidy
ステップ 2: 互換レイヤーを使用してビルドする
go.mod を更新した後、compat ビルドタグを使用してプロジェクトをビルドします。これにより、モノリシック SDK のインターフェースを Modular SDK にマッピングする互換レイヤーが有効になり、既存のコードを変更なしでコンパイルできます。
$ go build -tags compat ./...
ステップ 3: 段階的に移行する
互換レイヤーを導入した状態で、サービスごとにコードを移行します。
-
一度に 1 つのサービスのインポートパスを更新します。
accelbyte-go-sdk/<service>-sdk/...のインポートをaccelbyte-go-modular-sdk/<service>-sdk/...に置き換えます。 -
サービスのインスタンス化を、Modular の構造体パターンを使用する形に更新します。
// モノリシックのインポートパス
import "github.com/AccelByte/accelbyte-go-sdk/iam-sdk/pkg/iamclient/o_auth2_0_extension"
// Modular のインポートパス
import "github.com/AccelByte/accelbyte-go-modular-sdk/iam-sdk/pkg/iamclient/o_auth2_0_extension" -
すべてのサービスの移行が完了したら、ビルドコマンドから
-tags compatフラグを削除します。
ステップ 1: SDK パッケージを置き換える
モノリシック SDK をアンインストールし、必要な Modular SDK パッケージをインストールします。
# モノリシック SDK を削除
$ pip uninstall accelbyte-py-sdk
# Modular SDK のコアをインストール
$ pip install accelbyte-py-sdk-core
# 使用するサービスパッケージをインストール
$ pip install accelbyte-py-sdk-service-iam
$ pip install accelbyte-py-sdk-service-basic
# pip install accelbyte-py-sdk-service-<name>
# または、すべてを一度にインストール
# $ pip install accelbyte-py-sdk-all
ステップ 2: インポートパスを更新する
Modular SDK は異なるパッケージ構造を使用します。インポートを適宜更新してください。
# モノリシック
from accelbyte_py_sdk.api.iam import get_country_location_v3
from accelbyte_py_sdk.services.auth import login_client
# Modular — サービスラッパーは accelbyte_py_sdk.api.<service> 配下
from accelbyte_py_sdk.api.iam import get_country_location_v3
from accelbyte_py_sdk.services.auth.v2 import login_client
ステップ 3: 初期化を更新する
Modular SDK の initialize() 関数は、モノリシック SDK と同じオプションを受け付けます。主な変更点は、ログイン関数に v2 の auth サービスを使用することです。
# モノリシック
import accelbyte_py_sdk
from accelbyte_py_sdk.services.auth import login_client, logout
accelbyte_py_sdk.initialize()
_, error = login_client()
# Modular — 更新されたログインヘルパーには auth.v2 を使用
import accelbyte_py_sdk
from accelbyte_py_sdk.services.auth.v2 import login_client, logout
accelbyte_py_sdk.initialize()
_, error = login_client()
ステップ 4: ApiResponse 戻り値型を採用する(オプション)
ags/v3.80.0 以降、すべてのラッパー関数は単純な (result, error) タプルの代わりに ApiResponse サブクラスを返します。ApiResponse オブジェクトは、後方互換性のためタプルのアンパックも引き続きサポートしています。
# Modular SDK ではどちらの記法も使用可能
result, error = get_country_location_v3() # 既存のタプルアンパック方式も動作する
response = get_country_location_v3() # 新しい ApiResponse 方式
result, error = response
response.ok() # 成功していない場合は Exception をスロー
追加リソース
- C#
- Go
- Python
- C# Modular Extend SDK README — セットアップと使用方法
- C# Modular Extend SDK API packages — 利用可能なサービスパッケージの一覧
- C# Modular Extend SDK sample projects — Modular Extend SDK を使用したサンプルプロジェクト
- C# Modular Extend SDK operations reference — サポートされているすべての操作のコード例
- C# Modular Extend SDK migration guide — モノリシック SDK からの移行方法
- Go Modular Extend SDK README — セットアップと使用方法
- Go Modular Extend SDK published modules — 利用可能なサービスモジュールの全一覧
- Go Modular Extend SDK sample projects — Modular Extend SDK を使用したサンプルプロジェクト
- Go Modular Extend SDK operations reference — サポートされているすべての操作のコード例
- Python Modular Extend SDK README — セットアップと使用方法
- Python Modular Extend SDK sample projects — Modular Extend SDK を使用したサンプルプロジェクト
- Python Modular Extend SDK operations reference — サポートされているすべての操作のコード例