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

マッチメイキングのカスタマイゼーションを開始する

Last updated on February 4, 2026

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

概要

AccelByte Gaming Services (AGS) では、マッチメイキングのカスタムロジックを実装できます。

この記事では、Extend Override アプリテンプレートを例として、シンプルなカスタムマッチメーカーをセットアップするプロセスを説明します。

前提条件

  1. Windows 11 WSL2/Linux Ubuntu 22.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 のドキュメントに従ってください。

      dotnet --version

      8.0.119

    e. Postman

    • Postman から利用可能なバイナリを使用します。

    f. extend-helper-cli

    g. TCP 転送機能を持つローカルトンネルサービス、例えば:

    • Ngrok

      無料プランには登録が必要です。クイックスタートについては ngrok ドキュメント を参照してください。

    • Pinggy

      登録なしで無料で試すことができます。クイックスタートについては pinggy ドキュメント を参照してください。

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

アプリテンプレートのクローン

git clone https://github.com/AccelByte/matchmaking-function-grpc-plugin-server-csharp.git

Extend アプリのセットアップ、実行、テスト

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

Extend アプリのセットアップ

このアプリを実行するには、以下のセットアップ手順に従ってください:

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

    注記

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

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

    AB_BASE_URL=https://test.accelbyte.io     # AGS 環境のベース URL
    AB_CLIENT_ID='xxxxxxxxxx' # 前提条件セクションのクライアント ID
    AB_CLIENT_SECRET='xxxxxxxxxx' # 前提条件セクションのクライアントシークレット
    AB_NAMESPACE='xxxxxxxxxx' # 前提条件セクションのネームスペース ID
    PLUGIN_GRPC_SERVER_AUTH_ENABLED=true # アクセストークン検証の有効化または無効化
    注記

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

Extend アプリのビルド

このアプリをビルドするには、以下のコマンドを実行します:

make build

Extend アプリの実行

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

docker compose up --build

Extend アプリのテスト

Extend アプリはローカル開発環境または AGS でテストできます。

ローカル開発環境でのテスト

important

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

このアプリのカスタム関数は、Postman を使用してローカルでテストできます。Postman を使用して Extend アプリをテストするには、以下の手順に従ってください:

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

    docker compose up --build
  2. Postman で新しい gRPC リクエストを作成し、サーバー URL として localhost:6565 を入力します。詳細については、gRPC サポートに関する Postman のガイドを参照してください。

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

    1. マッチ内のプレイヤー数を指定するパラメータを送信します。以下のサンプル json をコピーします。次に、Send をクリックします。

      {
      "parameters": {
      "rules": {
      "json": "{\"shipCountMin\":1, \"shipCountMax\":2}"
      }
      }
      }
    2. 次に、マッチメイキングを開始するためにマッチチケットを送信します。以下のサンプル json をコピーして Postman メッセージに置き換えます。次に、Send をクリックします。プレイヤー数が満たされてマッチが作成されるまで、この手順を繰り返します。この場合は 2 人のプレイヤーです。

      {
      "ticket": {
      "players": [
      {
      "player_id": "playerA"
      }
      ]
      }
      }
    3. 成功すると、Postman で以下のようなレスポンス(ダウンストリーム)を受信します:

      {
      "match": {
      "tickets": [],
      "teams": [
      {
      "user_ids": [
      "playerA",
      "playerB"
      ]
      }
      ],
      "region_preferences": [ // カスタムマッチメイキングの結果、現在アクティブな AMS (AccelByte Multiplayer Servers) フリートの実際のリージョンである必要があります。
      "us-east-2",
      "us-west-2"
      ],
      "match_attributes": null
      }
      }
  4. BackfillMatches gRPC ストリームメソッドを選択し、Invoke ボタンをクリックします。これにより、gRPC サーバーへのストリーム接続が開始されます。

    1. マッチ内のプレイヤー数を指定するパラメータを送信します。以下のサンプル json をコピーします。次に、Send をクリックします。

      {
      "parameters": {
      "rules": {
      "json": "{\"shipCountMin\":1, \"shipCountMax\":2}"
      }
      }
      }
    2. 次に、バックフィルマッチメイキングを開始するためにマッチチケットを送信します。以下のサンプル json をコピーして Postman メッセージに置き換えます。次に、Send をクリックします。プレイヤー数が満たされてマッチが作成されるまで、この手順を繰り返します。この場合は 2 人のプレイヤーです。

      {
      "ticket": {
      "players": [
      {
      "player_id": "playerA"
      }
      ]
      }
      }
    3. 次に、バックフィルマッチメイキングを開始するためにバックフィルセッションを送信します。以下のサンプル json をコピーして Postman メッセージに置き換えます。次に、Send をクリックします。

      {
      "backfill_ticket": {
      "CreatedAt": {
      "nanos": 701477177,
      "seconds": "884462191"
      },
      "match_pool": "test_pool",
      "match_session_id": "custom_session_id",
      "partial_match": {
      "backfill": true,
      "client_version": "1.2.3",
      "match_attributes": {
      "fields": {
      "bigTeam": {
      "string_value": "A"
      },
      "team_mmr": {
      "number_value": 123
      }
      }
      },
      "region_preferences": ["us-east-1"],
      "server_name": "custom_server_name",
      "teams": [
      {
      "user_ids": ["user1"],
      "parties": [
      {
      "party_id": "teamAlpha",
      "user_ids": [
      "user1"
      ]
      },
      {
      "party_id": "",
      "user_ids": [
      "user2"
      ]
      }
      ],
      "team_id": "team1"
      }
      ],
      "tickets": []
      },
      "ticket_id": "backfill_ticket_id"
      }
      }
    4. 成功すると、Postman で以下のようなレスポンス(ダウンストリーム)を受信します:

      {
      "backfill_proposal": {
      "added_tickets": [
      {
      "players": [
      {
      "player_id": "playerA",
      "attributes": {
      "fields": {}
      }
      }
      ],
      "latencies": {},
      "ticket_id": "",
      "match_pool": "",
      "CreatedAt": {
      "seconds": "0",
      "nanos": 0
      },
      "ticket_attributes": null,
      "party_session_id": "",
      "namespace": ""
      }
      ],
      "proposed_teams": [
      {
      "user_ids": [
      "user1"
      ],
      "parties": [
      {
      "user_ids": [
      "user1"
      ],
      "party_id": "teamAlpha"
      },
      {
      "user_ids": [
      "user2"
      ],
      "party_id": ""
      }
      ],
      "team_id": "team1"
      },
      {
      "user_ids": [
      "playerA"
      ],
      "parties": [
      {
      "user_ids": [
      "playerA"
      ],
      "party_id": ""
      }
      ],
      "team_id": "536aa1d855734bc191831158e8a4aa33"
      }
      ],
      "backfill_ticket_id": "backfill_ticket_id",
      "CreatedAt": {
      "seconds": "-62135596800",
      "nanos": 0
      },
      "proposal_id": "",
      "match_pool": "test_pool",
      "match_session_id": "custom_session_id"
      }
      }

Make Matches の高度な設定と結果

より複雑なマッチメイキングシナリオでは、高度なチケット属性とプレイヤー属性を使用できます。このセクションでは、包括的なチケット設定の作成方法と、期待できる詳細なマッチ結果について説明します。

高度なチケット設定

高度なチケット設定では、豊富なメタデータ、プレイヤー属性、マッチ固有の情報を含めることができます:

{
"ticket": {
"CreatedAt": {
"nanos": 446183572,
"seconds": "3"
},
"latencies": {
"us-east-2": 50,
"us-east-1": 10
},
"match_pool": "test_pool",
"namespace": "laboris",
"party_session_id": "party_id",
"players": [
{
"player_id": "playerA",
"attributes": {
"fields": {
"weapon": {
"string_value": "sword"
},
"armor": {
"string_value": "steel"
},
"mmr": {
"number_value": 111
}
}
}
}
],
"ticket_attributes": {
"fields": {
"bigTeam": {
"string_value": "A"
},
"team_mmr": {
"number_value": 123
}
}
},
"ticket_id": "ticket_id_1234"
}
}

この高度な設定には以下が含まれます:

  • プレイヤー属性: 武器、防具、MMR (マッチメイキングレーティング) などのプレイヤー固有のカスタムデータ
  • チケット属性: チーム割り当てやチーム MMR などのマッチレベルの属性
  • レイテンシ情報: 最適なサーバー選択のためのリージョナルレイテンシデータ
  • メタデータ: 作成タイムスタンプ、ネームスペース、パーティーセッション情報

高度なマッチ結果

高度なチケット設定を使用すると、包括的なチケット情報、チーム割り当て、マッチ属性を含む、より詳細なマッチ結果を受け取ります:

{
"match": {
"tickets": [
{
"players": [
{
"player_id": "playerA",
"attributes": {
"fields": {
"mmr": {
"number_value": 111
},
"weapon": {
"string_value": "sword"
},
"armor": {
"string_value": "steel"
}
}
}
}
],
"latencies": {
"us-east-2": "50",
"us-east-1": "10"
},
"ticket_id": "ticket_id_1234",
"match_pool": "test_pool",
"CreatedAt": {
"seconds": "3",
"nanos": 446183572
},
"ticket_attributes": {
"fields": {
"bigTeam": {
"string_value": "A"
},
"team_mmr": {
"number_value": 123
}
}
},
"party_session_id": "party_id",
"namespace": "laboris"
},
{
"players": [
{
"player_id": "playerA",
"attributes": {
"fields": {
"armor": {
"string_value": "steel"
},
"mmr": {
"number_value": 111
},
"weapon": {
"string_value": "sword"
}
}
}
}
],
"latencies": {
"us-east-2": "50",
"us-east-1": "10"
},
"ticket_id": "ticket_id_1234",
"match_pool": "test_pool",
"CreatedAt": {
"seconds": "3",
"nanos": 446183572
},
"ticket_attributes": {
"fields": {
"bigTeam": {
"string_value": "A"
},
"team_mmr": {
"number_value": 123
}
}
},
"party_session_id": "party_id",
"namespace": "laboris"
}
],
"teams": [
{
"user_ids": [
"playerA",
"playerA"
],
"parties": [],
"team_id": "e54edf33fa174ccc8a1162510087197c"
}
],
"region_preferences": [
"us-east-2",
"us-west-2"
],
"match_attributes": {
"fields": {
"assignment": {
"struct_value": {
"fields": {
"small-team-1": {
"list_value": {
"values": [
{
"string_value": "e54edf33fa174ccc8a1162510087197c"
}
]
}
}
}
}
}
}
},
"backfill": false,
"server_name": "",
"client_version": "",
"server_pool": {
"claim_keys": [],
"server_provider": "",
"deployment": ""
}
}
}

この高度なマッチ結果には以下が含まれます:

  • 詳細なチケット: すべてのプレイヤー属性、レイテンシ、メタデータを含む完全なチケット情報
  • チーム割り当て: チーム ID とパーティーの詳細を含む構造化されたチーム情報
  • マッチ属性: チーム割り当てや設定などのカスタムマッチレベルデータ
  • サーバー情報: サーバープールの詳細、バックフィルステータス、デプロイメント情報

Backfill Matches の高度な設定と結果

より複雑なマッチメイキングシナリオでは、高度なチケット属性と高度なセッション属性を使用できます。このセクションでは、包括的なチケット設定の作成方法と、期待できる詳細なバックフィルマッチ結果について説明します。

高度なチケット設定

高度なチケット設定では、豊富なメタデータ、プレイヤー属性、マッチ固有の情報を含めることができます:

{
"ticket": {
"CreatedAt": {
"nanos": 446183572,
"seconds": "3"
},
"latencies": {
"us-east-2": 50,
"us-east-1": 10
},
"match_pool": "test_pool",
"namespace": "laboris",
"party_session_id": "party_id",
"players": [
{
"player_id": "playerA",
"attributes": {
"fields": {
"weapon": {
"string_value": "sword"
},
"armor": {
"string_value": "steel"
},
"mmr": {
"number_value": 111
}
}
}
}
],
"ticket_attributes": {
"fields": {
"bigTeam": {
"string_value": "A"
},
"team_mmr": {
"number_value": 123
}
}
},
"ticket_id": "ticket_id_1234"
}
}

この高度な設定には以下が含まれます:

  • プレイヤー属性: 武器、防具、MMR (マッチメイキングレーティング) などのプレイヤー固有のカスタムデータ
  • チケット属性: チーム割り当てやチーム MMR などのマッチレベルの属性
  • レイテンシ情報: 最適なサーバー選択のためのリージョナルレイテンシデータ
  • メタデータ: 作成タイムスタンプ、ネームスペース、パーティーセッション情報

高度なバックフィルセッション

高度なバックフィルセッション設定では、豊富な既存のセッションメタデータ、属性、マッチ固有の情報を含めることができます:

{
"backfill_ticket": {
"CreatedAt": {
"nanos": 701477177,
"seconds": "884462191"
},
"match_pool": "test_pool",
"match_session_id": "custom_session_id",
"partial_match": {
"backfill": true,
"client_version": "1.2.3",
"match_attributes": {
"fields": {
"bigTeam": {
"string_value": "A"
},
"team_mmr": {
"number_value": 123
}
}
},
"region_preferences": ["us-east-1"],
"server_name": "custom_server_name",
"teams": [
{
"user_ids": ["user1"],
"parties": [
{
"party_id": "teamAlpha",
"user_ids": [
"user1"
]
},
{
"party_id": "",
"user_ids": [
"user2"
]
}
],
"team_id": "team1"
}
],
"tickets": []
},
"ticket_id": "backfill_ticket_id"
}
}

この高度なバックフィルセッション設定には、以下のフィールドが含まれます:

  • backfill_ticket: バックフィルセッションを表すメインオブジェクト。
    • CreatedAt: バックフィルチケットが作成されたときのタイムスタンプ。
    • match_pool: マッチプール名。
    • match_session_id: マッチセッション識別子。
    • partial_match: 現在の部分的なマッチ/セッションの詳細。以下を含みます:
      • backfill: これがバックフィルセッションであるかを示すブール値。
      • client_version: クライアントのバージョン。
      • match_attributes: マッチのカスタム属性 (例: bigTeam、team_mmr)。
      • region_preferences: マッチの優先リージョンの配列。
      • server_name: セッションを処理するサーバーの名前。
      • teams: チームオブジェクトの配列。各チームには以下が含まれます:
        • user_ids: チーム内のユーザー ID の配列。
        • parties: パーティーオブジェクトの配列。各パーティーには以下が含まれます:
          • party_id: パーティー識別子 (空の場合があります)。
          • user_ids: パーティー内のユーザー ID。
        • team_id: チームの一意の識別子。
      • tickets: セッション内の現在のチケットの配列 (空の場合があります)。
    • ticket_id: バックフィルチケットの一意の識別子。

このスキーマにより、高度なバックフィルシナリオのための詳細なセッション、チーム、マッチ属性を指定できます。

高度なバックフィルプロポーザル結果

高度なチケットとバックフィルセッション設定を使用すると、詳細なバックフィルプロポーザル結果を受け取ります。 この結果は、追加されたチケット、チーム割り当て、および高度なバックフィルシナリオのすべての関連メタデータの包括的なビューを提供します。

{
"backfill_proposal": {
"added_tickets": [
{
"players": [
{
"player_id": "playerA",
"attributes": {
"fields": {
"mmr": {
"number_value": 111
},
"weapon": {
"string_value": "sword"
},
"armor": {
"string_value": "steel"
}
}
}
}
],
"latencies": {
"us-east-1": "10",
"us-east-2": "50"
},
"ticket_id": "ticket_id_1234",
"match_pool": "test_pool",
"CreatedAt": {
"seconds": "3",
"nanos": 446183572
},
"ticket_attributes": {
"fields": {
"team_mmr": {
"number_value": 123
},
"bigTeam": {
"string_value": "A"
}
}
},
"party_session_id": "party_id",
"namespace": "laboris"
}
],
"proposed_teams": [
{
"user_ids": [
"user1"
],
"parties": [
{
"user_ids": [
"user1"
],
"party_id": "teamAlpha"
},
{
"user_ids": [
"user2"
],
"party_id": ""
}
],
"team_id": "team1"
},
{
"user_ids": [
"playerA"
],
"parties": [
{
"user_ids": [
"playerA"
],
"party_id": ""
}
],
"team_id": "3fb8e77febb84b66a79050e588cf8af7"
}
],
"backfill_ticket_id": "backfill_ticket_id",
"CreatedAt": {
"seconds": "-62135596800",
"nanos": 0
},
"proposal_id": "8e8418a2c08d4107b0df2f93414d5197",
"match_pool": "test_pool",
"match_session_id": "custom_session_id",
"attributes": {
"fields": {
"bigTeam": {
"string_value": "A"
},
"team_mmr": {
"number_value": 123
},
"generatedID": {
"string_value": "1b0e5580b3c3479fa8e270019bd5a345"
}
}
}
}
}

この高度なバックフィルプロポーザルマッチ結果には以下が含まれます:

  • backfill_proposal: プロポーザルの詳細を含むメインオブジェクト。
    • added_tickets: セッションに追加されたチケットのリスト。各チケットには以下が含まれます:
      • players: プレイヤーオブジェクトの配列。各プレイヤーには以下が含まれます:
        • player_id: プレイヤーの一意の識別子。
        • attributes: カスタムプレイヤー属性 (例: mmr、weapon、armor)。
      • latencies: チケットのリージョナルレイテンシ情報。
      • ticket_id: チケットの一意の識別子。
      • match_pool: マッチプール名。
      • CreatedAt: チケットが作成されたときのタイムスタンプ。
      • ticket_attributes: チケットのカスタム属性 (例: team_mmr、bigTeam)。
      • party_session_id: パーティーセッション識別子。
      • namespace: チケットのネームスペース。
    • proposed_teams: バックフィルで提案されたチームのリスト。各チームには以下が含まれます:
      • user_ids: チーム内のユーザー ID の配列。
      • parties: パーティーオブジェクトの配列。各パーティーには以下が含まれます:
        • user_ids: パーティー内のユーザー ID。
        • party_id: パーティー識別子 (空の場合があります)。
      • team_id: チームの一意の識別子。
    • backfill_ticket_id: バックフィルチケットの一意の識別子。
    • CreatedAt: プロポーザルが作成されたときのタイムスタンプ。
    • proposal_id: プロポーザルの一意の識別子。
    • match_pool: マッチプール名。
    • match_session_id: マッチセッション識別子。
    • attributes: プロポーザルの追加のカスタム属性 (例: bigTeam、team_mmr、generatedID)。

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:xxxxx または tcp://xxxxx-xxx-xxx-xxx-xxx.a.free.pinggy.link:xxxxx

    備考

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

  3. Admin Portal で、設定の正しい namespace に移動し、以下を実行します:

    1. サイドバーメニューで、Multiplayer > Matchmaking > Customization に移動します。
    2. Register Function ボタンをクリックします。
    3. 表示されるポップアップウィンドウで、関数の名前を入力します。次に、Locally hosted for testing purpose オプションを選択し、ステップ 3 のローカルトンネル転送 URL を提供します。
    4. Create をクリックします。
    5. Multiplayer > Matchmaking > Matchmaking Configuration に移動し、Match Pools タブを選択します。既存のマッチプール設定を作成または編集します。Customization セクションで、カスタマイゼーション関数を有効にし、ドロップダウンメニューから登録された Match Function アプリを選択します。
    備考

    各マッチメイキング関数 (Stat codes、Enrichment、Validation、Backfill Matches、Make Matches) に対して複数の Extend Override を登録できます。デフォルトのカスタム関数と特定のカスタム関数が同じマッチプールに登録されている場合、特定のカスタム関数がデフォルトのカスタム関数よりも優先されます。

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

    • AGS Private Cloud のお客様の場合:
      • NAMESPACE:{namespace}:MATCHMAKING:RULES [CREATE,READ,UPDATE,DELETE]
      • NAMESPACE:{namespace}:MATCHMAKING:FUNCTIONS [CREATE,READ,UPDATE,DELETE]
      • NAMESPACE:{namespace}:MATCHMAKING:POOL [CREATE,READ,UPDATE,DELETE]
      • NAMESPACE:{namespace}:MATCHMAKING:TICKET [CREATE,READ,UPDATE,DELETE]
      • ADMIN:NAMESPACE:{namespace}:INFORMATION:USER:* [CREATE,READ,UPDATE,DELETE]
      • ADMIN:NAMESPACE:{namespace}:SESSION:CONFIGURATION:* [CREATE,READ,UPDATE,DELETE]
    • AGS Shared Cloud のお客様の場合:
      • Matchmaking > Rule Sets (Read, Create, Update, Delete)
      • Matchmaking > Match Functions (Read, Create, Update, Delete)
      • Matchmaking > Match Pools (Read, Create, Update, Delete)
      • Matchmaking > Match Tickets (Read, Create, Update, Delete)
      • IAM > Users (Read, Create, Update, Delete)
      • Session > Configuration Template (Read, Create, Update, Delete)
    important
    • Client IDClient Secret のコピーを保管してください。
    • このステップで作成された OAuth クライアントは、前提条件セクションで言及されたものとは異なります。次のステップの CLI デモアプリに必要です。
  5. demo フォルダ内の Postman コレクションを Postman にインポートして、マッチメイキングフローをシミュレートします。前のステップのクライアント ID とクライアントシークレットを使用して、Postman コレクションの概要の指示に従って環境をセットアップします。マッチメイキングフローの実行中に Extend アプリのコンソールログを監視します。マッチチケットの作成時に gRPC サーバーメソッドがトリガーされ、プレイヤーがペアでグループ化されるはずです。

AGS へのデプロイ

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

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

Extend アプリの作成

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

Extend アプリのアップロード

  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 Shared 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 クライアントのクライアント ID (ステップ 1 から)
    export AB_CLIENT_ID='xxxxxxxxxx'
    # extend-helper-cli 用の OAuth クライアントのクライアントシークレット (ステップ 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
    important
    • 上記のコマンドは、Extend アプリプロジェクトとは異なる作業ディレクトリから別のターミナルで実行することをお勧めします。これにより、extend-helper-cli が Extend アプリ用の環境変数を誤って使用するのを防ぐことができます。
    • 以下のエラーが発生した場合は、解決手順についてトラブルシューティング: 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

Extend アプリの設定

アップロードした 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 が追加されていました。

Extend アプリのデプロイ

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

Extend アプリを使用するように AGS を設定

AGS Admin Portal に移動し、カスタム関数を作成する際に使用したい namespace を使用します。左側のペインで、Game ManagementNew MatchmakingCustom Function の順にクリックします。次に、Register Function ボタンをクリックして AccelByte Hosted を選択します。作成した Extend App 名を選択し、Save をクリックします。

AccelByte-hosted custom configuration

次に、使用したいマッチプール設定にマッチ関数を設定します。これを行うには、Game ManagementNew MatchmakingMatchmaking Configurations の順にクリックします。Match Pools タブをクリックし、マッチプールを作成するか既存のものを編集します。下部近くまでスクロールし、ドロップダウンメニューから Custom Function を選択します。

set custom function

次のステップ

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