メインコンテンツまでスキップ

セッションマネージャーのカスタマイズ

Last updated on July 15, 2026

注釈:本資料はAI技術を用いて翻訳されています。

Overview

AccelByte Gaming Services (AGS) では、カスタムロジックを実装して、セッション管理の方式を独自に調整できます。これにより、ゲームセッションおよびパーティーセッションに対する柔軟性と制御力が向上します。この機能を使用すると、セッションの作成、更新、削除に関する特定の動作を定義できるため、既存のセッションサービス機能とのシームレスな連携を維持しながら、独自の要件を満たすことができます。

この記事では、Extend Override アプリのテンプレートを例として使用し、以下のイベントでセッションデータを管理するためのカスタムセッションオーバーライドを設定する手順を説明します。

  • OnSessionCreated: ゲームセッションが最初に作成されるときの操作。
  • OnSessionUpdated: ゲームセッションに更新または変更があるときの操作。
  • OnSessionDeleted: ゲームセッションが削除済みとしてマークされるときの操作。
  • OnPartyCreated: パーティーセッションが最初に作成されるときの操作。
  • OnPartyUpdated: パーティーセッションに更新または変更があるときの操作。
  • OnPartyDeleted: パーティーセッションが削除済みとしてマークされるときの操作。

Prerequisites

  1. Windows 11 WSL2/Linux Ubuntu 24.04 または macOS 14+ で、以下のツールがインストールされていること。

    a. Bash

    • Windows WSL2 または Linux Ubuntu の場合:

      bash --version

      GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
      ...
    • macOS の場合:

      bash --version

      GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
      ...

    b. Make

    • Windows WSL2 または Linux Ubuntu の場合:

      Ubuntu リポジトリからインストールするには、sudo apt update && sudo apt install make を実行します。

      make --version

      GNU Make 4.3
      ...
    • macOS の場合:

      make --version

      GNU Make 3.81
      ...

    c. Docker (Docker Desktop 4.30+/Docker Engine v23.0+)

    • Linux Ubuntu の場合:

      1. Ubuntu リポジトリからインストールするには、sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2 を実行します。
      2. ユーザーを docker グループに追加します: sudo usermod -aG docker $USER
      3. 変更を反映させるためにログアウトしてから再度ログインします。
    • Windows または macOS の場合:

      Windows または macOS 向けの Docker Desktop のインストールについては、Docker のドキュメントを参照してください。

      docker version

      ...
      Server: Docker Desktop
      Engine:
      Version: 24.0.5
      ...

    d. .NET 8 SDK

    • Linux Ubuntu の場合:

      Ubuntu リポジトリからインストールするには、sudo apt-get update && sudo apt-get install -y dotnet-sdk-8.0 を実行します。

    • Windows または macOS の場合:

      Windows または macOS への .NET のインストールについては、Microsoft のドキュメントを参照してください。

      dotnet --version

      8.0.104

    e. Postman

    • Postman から利用可能なバイナリを使用してください。

    f. extend-helper-cli

    g. TCP フォワーディング機能を備えたローカルトンネルサービス。例:

  1. AGS Admin Portal 環境へのアクセス。
    • ベース URL: <お使いの環境のドメイン URL>
      • AGS Public Cloud のお客様の例: https://spaceshooter.prod.gamingservices.accelbyte.io
      • AGS Private Cloud のお客様の例: https://dev.customer.accelbyte.io
    • まだ持っていない場合は、ゲームネームスペースを作成します。ネームスペース ID を控えておいてください。
    • confidential クライアントタイプで OAuth クライアントを作成します。Client IDClient Secret を保管してください。

Clone the app template

git clone https://github.com/AccelByte/session-manager-grpc-plugin-server-csharp.git

Set up, run, and test an Extend app

このセクションでは、Extend アプリのセットアップ、ビルド、実行、およびテストの方法について説明します。

Set up the Extend app

Extend アプリのサンプルカスタム機能を実行するには、以下の手順に従います。

  1. .env.template ファイルの内容をコピーして、docker compose の .env ファイルを作成します。

    注記

    ホスト OS の環境変数は .env ファイルの変数よりも優先度が高くなります.env ファイル内の変数が正しく反映されない場合は、同じ名前のホスト OS 環境変数が存在していないか確認してください。詳細については、docker compose の環境変数の優先順位に関する Docker のドキュメントを参照してください。

  2. 以下に示すように、.env ファイルに必要な環境変数を入力します。

    AB_BASE_URL=https://test.accelbyte.io     # AccelByte Gaming Services 環境のベース URL
    AB_CLIENT_ID='xxxxxxxxxx' # Prerequisites セクションの Client ID
    AB_CLIENT_SECRET='xxxxxxxxxx' # Prerequisites セクションの Client Secret
    AB_NAMESPACE='xxxxxxxxxx' # Prerequisites セクションの Namespace ID
    PLUGIN_GRPC_SERVER_AUTH_ENABLED=false # アクセストークン検証の有効化/無効化
    注記

    このアプリテンプレートでは、PLUGIN_GRPC_SERVER_AUTH_ENABLED はデフォルトで true になっています。これを false に設定すると、AccelByte Gaming Services のアクセストークンなしで gRPC server を呼び出せるようになります。このオプションは開発目的のためだけに提供されています。本番環境では gRPC server のアクセストークン検証を有効にすることを推奨します。

Build the Extend app

このアプリテンプレートをビルドするには、以下のコマンドを実行します。

make build

Run the Extend app

このアプリテンプレートをコンテナ内で(ビルドして)実行するには、以下のコマンドを実行します。

docker compose up --build

docker アプリが実行されている場合、docker-compose ファイルで設定されたポートを使用してアクセスできます。例えば、サンプルの gRPC サーバーアプリの場合:

...
services:
app:
build: .
ports:
- "8080:8080"
- "6565:6565"
...

2つのポートが公開されており、そのフォーマットは host_port:container_port です。

  • "8080:8080": ホストマシンのポート 8080 をコンテナ内のポート 8080 にマッピングします。これにより、ホストで http://localhost:8080 にアクセスすると、トラフィックが app コンテナ内のポート 8080 にルーティングされます。
  • "6565:6565": ホストのポート 6565 をコンテナ内のポート 6565 にマッピングし、コンテナ内のそのポートで実行されているサービスへのアクセスを可能にします。

Test the Extend app

ローカル開発環境またはAGSを使用して、Extend アプリをテストできます。

Test in a local development environment

important

テストする前に、PLUGIN_GRPC_SERVER_AUTH_ENABLEDfalse に設定されていることを確認してください。そうでない場合、gRPC リクエストは gRPC server によって拒否されます。

このアプリテンプレートのカスタム機能は、Postman を使用してローカルでテストできます。Postman を使用して Extend アプリをテストするには、以下の手順に従います。

  1. grpc-plugin-dependencies リポジトリの README.md に従って dependency services を実行します。

    warning

    現時点では mTLS を無効にして依存サービスを起動するようにしてください。mTLS は現在 AGS ではサポートされていませんが、セキュリティを向上させるために近日中にサポートが追加される予定です。mTLS が有効になっている場合、mTLS を使用しない gRPC クライアント呼び出しは拒否されます。

  2. 次のコマンドを使用して、この gRPC server アプリテンプレートを実行します。

    docker compose up --build
  3. Postman で新しい gRPC request を作成し、サーバー URL として localhost:10000 を入力します。この設定では、実質的に dependency services 内の Envoy プロキシを介して gRPC server にアクセスします。詳細については、gRPC リクエストの作成に関する Postman のドキュメントを参照してください。

  4. Postman で、OnSessionCreated の gRPC 呼び出しメソッドを選択し、Invoke ボタンをクリックします。これにより、gRPC サーバーへのストリーム接続が開始されます。

  5. 続けて Postman で、以下のサンプル JSON をコピーして Send をクリックし、マッチ内のプレイヤー数を指定するパラメーターを送信します。

    {
    "session": {
    "session": {
    "id": "sessionid",
    "is_active": true,
    "namespace": "namespace",
    "created_by": "created_by"
    }
    }
    }

    成功した場合に期待されるレスポンスは、セッションが返される際に以下のような属性フィールドが追加されたものです。

    {
    "session": {
    "session": {
    "id": "sessionid",
    "is_active": true,
    "namespace": "namespace",
    "created_by": "created_by",
    "attributes": {
    "SAMPLE": "value from GRPC server"
    }
    }
    }
    }

Test with AGS

AGS を使用してローカルで実行されているアプリをテストするには、gRPC server をインターネットに接続する必要があります。パブリック IP を必要とせずにこれを行うには、ローカルトンネルサービスを使用できます。

  1. 以下のコマンドを使用してこのアプリを実行します。

    docker compose up --build
  2. ローカル開発環境の gRPC server の TCP ポート 6565 をインターネットに公開します。最も簡単な方法は、ローカルトンネルサービスプロバイダーを使用することです。

    • ngrok にサインインし、ngrok ダッシュボードから authtoken を取得してローカル環境に設定します。 そして、gRPC server を公開するには以下のコマンドを使用します。

      ngrok tcp 6565
    • または、代わりに pinggy を使用し、ssh コマンドラインのみで簡単なトンネルを設定することもできます。 その場合、gRPC server を公開するには以下のコマンドを使用します。

      ssh -p 443 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -R0:127.0.0.1:6565 tcp@a.pinggy.io

    トンネルのフォワーディング URL(例: http://0.tcp.ap.ngrok.io:xxxxxtcp://xxxxx-xxx-xxx-xxx-xxx.a.free.pinggy.link:xxxxx など)を控えておいてください。

    備考

    gRPC サーバーのポート(TCP)をインターネットに公開するために、他のローカルトンネルサービスや別の方法を使用することもできます。

  3. Admin Portal で、Extend アプリが存在するネームスペースに移動し、セッションテンプレートを作成します。

    1. サイドバーメニューで、Multiplayer > Matchmaking > Session Configuration に移動します。
    2. Add Session Template ボタンをクリックします。必要な情報を入力します。詳細については、セッションテンプレートの作成と設定を参照してください。
    3. Use Custom Session Function オプションを有効にし、セッションテンプレートのアクションとして OnSessionCreated を選択してください。
    4. Custom URL オプションを選択し、手順3のトンネルフォワーディング URL を使用します。
    5. セッションテンプレートの作成を完了するか、次の手順に従ってフローをシミュレートします。

    Session Template Override

  4. 以下の権限を含む confidential クライアントタイプの OAuth クライアントを作成します。

    • AGS Private Cloud のお客様の場合:

      • ADMIN:NAMESPACE:{namespace}:SESSION:CONFIGURATION [CREATE,READ,UPDATE,DELETE]
      • ADMIN:NAMESPACE:{namespace}:INFORMATION:USER:* [DELETE]
    • AGS Public Cloud のお客様の場合:

      • Session -> Custom Configuration (Read, Create, Update, Delete)
      • IAM -> Users (Delete)
    important
    • IAM クライアントの作成を完了した後は Client Secret にアクセスできなくなるため、必ず保存してください。
    • この手順で作成した OAuth クライアントは、Prerequisites セクションで説明したものとは異なります。これは、次の手順で gRPC Server の URL を登録し、テストユーザーの作成と削除を行うために Postman コレクションで必要になります。
  5. 前の手順で取得した Client IDClient Secret を使用して環境を設定するために、Postman コレクション(demo/session-manager-demo.postman_collection.json)の概要にある手順に従います。Extend アプリのフローが実行されている際、このアプリのコンソールログに注意してください。コレクション内のすべてのリクエストを実行すると、少なくとも1つの gRPC Server メソッドが呼び出されるはずです。

Deploy in AGS

AGS で Extend アプリをデプロイするには、Admin Portal で以下の手順を実行します。

  1. Extend アプリを作成する
  2. Extend アプリをアップロードする
  3. Extend アプリを設定する
  4. Extend アプリをデプロイする
  5. AGS に Extend アプリを使用させる

Create the Extend app

  1. AGS Admin Portal で、Extend Override アプリを作成したいネームスペースに移動します。
  2. サイドバーメニューの ADD-ONS で、Extend > Override に移動します。
  3. Overridable Features ページで、+ Create New ボタンをクリックします。
  4. Create App フォームで、Extend アプリの名前と説明(オプション)を入力します。
  5. Create をクリックします。新しい Extend アプリが Overridable Features アプリリストに追加されます。

Upload the Extend app

  1. extend-helper-cli 用の IAM クライアントを設定します。クライアントタイプ confidentialIAM クライアントを作成し、以下に記載されている必要な権限を割り当てます。Client IDClient Secret のコピーを保管してください。

    • AGS Private Cloud のお客様の場合:
      • ADMIN:NAMESPACE:{namespace}:EXTEND:REPOCREDENTIALS [READ]
      • ADMIN:NAMESPACE:{namespace}:EXTEND:APP [READ]
    • AGS Public Cloud のお客様の場合:
      • Extend > Extend app image repository access (Read)
      • Extend > App (Read)
  2. 必要な環境変数をエクスポートし、extend-helper-cli を使用して Extend アプリのコンテナイメージをビルドして AGS にアップロードします。

    • <project-dir> が Extend アプリのプロジェクトディレクトリを指していることを確認してください
    • <namespace><app-name> の値は、Extend アプリの App Detail ページで確認できます
    • v0.0.1 のような適切なイメージタグを使用してください
    # AGS 環境のベース URL。例: https://spaceshooter.prod.gamingservices.accelbyte.io、https://dev.accelbyte.io など
    export AB_BASE_URL='https://xxxxxxxxxx'
    # extend-helper-cli 用の OAuth クライアントの Client ID(手順1より)
    export AB_CLIENT_ID='xxxxxxxxxx'
    # extend-helper-cli 用の OAuth クライアントの Client Secret(手順1より)
    export AB_CLIENT_SECRET='xxxxxxxxxx'

    ./extend-helper-cli-linux_amd64 image-upload --login --work-dir <project-dir> --namespace <namespace> --app <app-name> --image-tag v0.0.1

    :::

    • 上記のコマンドは、Extend アプリのプロジェクトとは別のターミナルおよび別の作業ディレクトリで実行することを推奨します。これにより、extend-helper-cli が Extend アプリ用の環境変数を誤って使用することを防げます。
    • fork/exec ...: not a directory というエラーが発生した場合は、Docker ディレクトリを調整する必要があるかもしれません
      DOCKER=<path-to-actual-docker-binary> ./extend-helper-cli-linux_amd64 image-upload --login --work-dir <project-dir> --namespace <namespace> --app <app-name> --image-tag v0.0.1
    • 以下のエラーが発生した場合は、解決手順についてトラブルシューティング: Docker のログインに失敗するを参照してください。
      Error saving credentials: error storing credentials - err: exit status 1, out: `error storing credentials - err: exit status 1, out: `The stub received bad data.`

    :::

    イメージのアップロードが成功すると、Image Version History ページに v0.0.1 バージョンのイメージが表示されます。

    image history in AGS Admin Portal

Configure the Extend app

アップロードした Extend アプリをデプロイする前に、Extend アプリが必要とする環境変数を設定する必要があります。アプリの詳細ページで、ローカルで Extend アプリを実行してテストする際に使用したものと同じ値で、以下の環境変数を設定します。

  • AB_CLIENT_ID
  • AB_CLIENT_SECRET
warning

Extend Override アプリがリリース v2024.02.13 より前のアプリテンプレートに基づいている場合は、必ず PLUGIN_GRPC_SERVER_AUTH_ENABLED 環境変数を true に設定してください。そうしない場合、Extend アプリ内のアクセストークン検証が無効になり、有効なアクセストークンなしで Extend アプリにアクセスされる可能性があります。

リリース v2024.02.13 以降、Extend Override アプリテンプレートの PLUGIN_GRPC_SERVER_AUTH_ENABLED はデフォルトで true に設定されています。アクセストークン検証は、PLUGIN_GRPC_SERVER_AUTH_ENABLED が明示的に false に設定されている場合にのみ無効にできます。これに合わせて、Admin Portal を通じて作成される新しい Extend アプリには、デフォルトで PLUGIN_GRPC_SERVER_AUTH_ENABLED 環境変数が設定されなくなりました。以前は、Admin Portal を通じて作成されたすべての新しい Extend アプリに PLUGIN_GRPC_SERVER_AUTH_ENABLED=false が追加されていました。

Deploy the Extend app

Extend アプリをデプロイするには、Deploy Latest Image をクリックします。アプリのステータスが RUNNING に更新されるまで待ちます。これにより、Extend アプリが正常にデプロイされたことを示します。

Set AGS to use the Extend app

AGS Admin Portal で、カスタム機能を作成したいネームスペースに移動します。Admin Portal のサイドバーで、Multiplayer > Matchmaking > Session Configuration をクリックします。Session Configurations ページで、Add Session Template ボタンをクリックします。セッションテンプレートを作成する際は、必ず**「Use Custom Session Function」**の選択にチェックを入れてください。AccelByte Hosted オプションを選択し、作成した Extend App の名前を選択します。次に、Save をクリックして新しいセッションテンプレートを作成します。

Session template override with extend app

Next step

Extend Override アプリテンプレートを変更して、独自のカスタムロジックを実装してください。詳細については、こちらを参照してください。