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環境変数には<your environment's domain URL>を使用します。- AGS Shared Cloud のお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloud のお客様の例:
https://dev.customer.accelbyte.io
- AGS Shared Cloud のお客様の例:
- クライアントタイプ Confidential の OAuth クライアントを作成します。
AB_CLIENT_ID環境変数には Client ID の値を使用します。AB_CLIENT_SECRET環境変数には Client Secret の値を使用します。
- AccelByte C# Modular Extend SDK
- 以下のツールへのアクセス:
- Git
- .NET 8.0 SDK
- C# IDE
- AccelByte Gaming Services (AGS) へのアクセス(デモ環境):
AB_BASE_URL環境変数には<your environment's domain URL>を使用します。- AGS Shared Cloud のお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloud のお客様の例:
https://dev.customer.accelbyte.io
- AGS Shared Cloud のお客様の例:
- クライアントタイプ Confidential の OAuth クライアントを作成します。
AB_CLIENT_ID環境変数には Client ID の値を使用します。AB_CLIENT_SECRET環境変数には Client Secret の値を使用します。
- AccelByte Go Modular Extend SDK
- 以下のツールへのアクセス:
- Git
- Go 1.23 以降
- Go IDE
- AccelByte Gaming Services (AGS) へのアクセス(デモ環境):
AB_BASE_URL環境変数には<your environment's domain URL>を使用します。- AGS Shared Cloud のお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloud のお客様の例:
https://dev.customer.accelbyte.io
- AGS Shared Cloud のお客様の例:
- クライアントタイプ Confidential の OAuth クライアントを作成します。
AB_CLIENT_ID環境変数には Client ID の値を使用します。AB_CLIENT_SECRET環境変数には Client Secret の値を使用します。
- 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> # 必要に応じて追加
# オプション: モノリシック SDK からの移行用互換性レイヤー
# $ dotnet add package AccelByte.Sdk.Api.Compat
利用可能な 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 の設定とトークンリポジトリの実装を使用
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="<your environment's domain URL>" # AGS ベース URL
$ export AB_CLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth クライアント ID
$ export AB_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth クライアントシークレット
$ export AB_NAMESPACE="<your namespace>" # AGS Namespace
$ cd /path/to/mysolution/myproject
$ dotnet run
必要な環境変数を設定し、go run main.go を使用してアプリケーションを実行します。
$ export AB_BASE_URL="<your environment's domain URL>" # AGS ベース URL
$ export AB_CLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth クライアント ID
$ export AB_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth クライアントシークレット
$ go run main.go
必要な環境変数を設定し、Python インタープリターを使用してコードを実行します。
$ export AB_BASE_URL="<your environment's domain URL>" # AGS ベース URL
$ export AB_CLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth クライアント ID
$ export AB_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # AGS OAuth クライアントシークレット
$ export AB_NAMESPACE="<your 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 とモジュラー SDK の主な変更点を以下に示します。
SDK クラスとビルダー:
| モノリシック | モジュラー | |
|---|---|---|
| SDK クラス | AccelByteSDK | AccelByteSdk(IAccelByteSdk を実装) |
| SDK ビルダー | AccelByteSdkBuilder | AccelByteSdkBuilder<T>(IAccelByteSdkBuilder<T> を実装) |
名前空間:
| コンポーネント | モノリシック | モジュラー |
|---|---|---|
| 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();
// モジュラー
sdk.GetLegalApi().Agreement.RetrieveAgreementsPublicOp.Execute();
SDK の初期化 — 各デフォルト実装に独自の名前空間が必要になりました:
// モノリシック — 1 つの名前空間ですべてをカバー
using AccelByte.Sdk.Core;
// モジュラー — コンポーネントごとに名前空間を含める
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();
// モジュラー — レスポンスオブジェクトパターン
var response = sdk.GetLegalApi().Agreement.RetrieveAgreementsPublicOp.Execute();
if (response.IsSuccess)
{
List<RetrieveAcceptedAgreementResponse> data = response.Data;
}
// モジュラー — モノリシックと同等のショートハンド(失敗時に ApiResponseException をスロー)
List<RetrieveAcceptedAgreementResponse> data = sdk.GetLegalApi().Agreement
.RetrieveAgreementsPublicOp.Execute().EnsureSuccess();
注意: 例外の型が HttpResponseException から ApiResponseException に変更されました。
ステップ 5: 互換性レイヤーを使用する(オプション)
段階的に移行しながらモジュラー SDK をモノリシック SDK と同様に動作させたい場合、AccelByte.Sdk.Api.Compat パッケージは以下のアダプタークラスを提供します。
- 元の
AccelByteSDKクラス名とフルエントインターフェース(sdk.Legal、sdk.Basicなど)を公開。 - 既存のエラーハンドリングを維持するために
HttpResponseExceptionを再スロー(ApiResponseExceptionから変換)。 AccelByte.Sdk.Core.UtilのHelperクラスを拡張メソッドにマッピング。
compat パッケージを追加すると、既存のコードは変更なしにコンパイルできるようになります。その後、サービスごとに移行を進め、compat の依存関係を順次削除できます。
互換性ライブラリはオンデマンドトークンリフレッシュのデフォルト動作を変更しません。
ステップ 1: go.mod のインポートを更新する
モノリシック SDK モジュールを、プロジェクトが使用する AGS サービスの個別モジュラーサービスモジュールに置き換えます。
// 変更前(モノリシック)
require (
github.com/AccelByte/accelbyte-go-sdk {VERSION}
)
// 変更後(モジュラー)— 必要なサービスのみをインポート
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 のインターフェースをモジュラー SDK にマッピングする互換性レイヤーが有効になり、既存のコードが変更なしにコンパイルできるようになります。
$ go build -tags compat ./...
ステップ 3: 段階的に移行する
互換性レイヤーを利用しながら、サービスごとにコードを移行します。
-
一度に 1 つのサービスのインポートパスを更新します —
accelbyte-go-sdk/<service>-sdk/...インポートをaccelbyte-go-modular-sdk/<service>-sdk/...に置き換えます。 -
モジュラーの構造体パターンを使用するようにサービスのインスタンス化を更新します。
// モノリシックのインポートパス
import "github.com/AccelByte/accelbyte-go-sdk/iam-sdk/pkg/iamclient/o_auth2_0_extension"
// モジュラーのインポートパス
import "github.com/AccelByte/accelbyte-go-modular-sdk/iam-sdk/pkg/iamclient/o_auth2_0_extension" -
すべてのサービスを移行したら、ビルドコマンドから
-tags compatフラグを削除します。
ステップ 1: SDK パッケージを置き換える
モノリシック SDK をアンインストールし、必要なモジュラー SDK パッケージをインストールします。
# モノリシック SDK を削除
$ pip uninstall accelbyte-py-sdk
# モジュラー 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: インポートパスを更新する
モジュラー SDK は異なるパッケージ構造を使用します。それに応じてインポートを更新します。
# モノリシック
from accelbyte_py_sdk.api.iam import get_country_location_v3
from accelbyte_py_sdk.services.auth import login_client
# モジュラー — サービスラッパーは 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: 初期化を更新する
モジュラー SDK の initialize() 関数はモノリシック SDK と同じオプションを受け付けます。主な変更点は、ログイン関数に v2 認証サービスを使用することです。
# モノリシック
import accelbyte_py_sdk
from accelbyte_py_sdk.services.auth import login_client, logout
accelbyte_py_sdk.initialize()
_, error = login_client()
# モジュラー — 更新されたログインヘルパーには 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 オブジェクトは後方互換性のためにタプルのアンパックをサポートしています。
# モジュラー SDK では両方のスタイルが機能する
result, error = get_country_location_v3() # 既存のタプルアンパックスタイルも機能
response = get_country_location_v3() # 新しい ApiResponse スタイル
result, error = response
response.ok() # 成功しない場合は例外をスロー
追加リソース
- C#
- Go
- Python
- C# Modular Extend SDK README — セットアップと使用方法
- C# Modular Extend SDK API パッケージ — 利用可能なサービスパッケージの一覧
- C# Modular Extend SDK サンプルプロジェクト — Modular Extend SDK を使用したサンプルプロジェクト
- C# Modular Extend SDK 操作リファレンス — サポートされるすべての操作のコード例
- C# Modular Extend SDK 移行ガイド — モノリシック SDK からの移行方法
- Go Modular Extend SDK README — セットアップと使用方法
- Go Modular Extend SDK 公開モジュール — 利用可能なサービスモジュールの完全なリスト
- Go Modular Extend SDK サンプルプロジェクト — Modular Extend SDK を使用したサンプルプロジェクト
- Go Modular Extend SDK 操作リファレンス — サポートされるすべての操作のコード例
- Python Modular Extend SDK README — セットアップと使用方法
- Python Modular Extend SDK サンプルプロジェクト — Modular Extend SDK を使用したサンプルプロジェクト
- Python Modular Extend SDK 操作リファレンス — サポートされるすべての操作のコード例