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

ショップアイテムの回転カスタマイズ

Last updated on July 15, 2026

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

Overview

AccelByte Gaming Services (AGS) では、ショップアイテムのローテーションとショップセクションアイテムのバックフィルに関するカスタムロジックを実装できます。

この記事では、Extend Override アプリテンプレートを例として、ショップアイテムのローテーションとショップセクションアイテムのバックフィルに関するカスタムロジックを設定する手順を説明します。

Prerequisites

  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 への .NET のインストールについては、Microsoft のドキュメントを参照してください。

      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 Public 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/rotating-shop-items-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' # Prerequisites セクションの Client ID
    AB_CLIENT_SECRET='xxxxxxxxxx' # Prerequisites セクションの Client Secret
    AB_NAMESPACE='xxxxxxxxxx' # Prerequisites セクションの Namespace 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. 続けて Section/GetRotationItems メソッドを選択し、以下のサンプルメッセージを使用して呼び出します:

    {
    "namespace": "accelbyte",
    "userId": "c6354ec948604a1c9f5c026795e420d9",
    "sectionObject": {
    "items": [
    {
    "itemId": "7fcad276c5df4128b3f38564abd012c4",
    "itemSku": "S1"
    },
    {
    "itemId": "59ab1f45979e460295178deb609ec5d6",
    "itemSku": "S2"
    },
    {
    "itemId": "e51ae70222af4fba96ba8d7f631b8407",
    "itemSku": "S3"
    },
    {
    "itemId": "f790c28a58734212b594b0a161ffb297",
    "itemSku": "S4"
    },
    {
    "itemId": "f0f745e8dac14614a0c30470438ecfed",
    "itemSku": "S5"
    },
    {
    "itemId": "365ef7d7624b4f23b5d815ad1fd2f7cc",
    "itemSku": "S6"
    },
    {
    "itemId": "ce6d664c2c7f4c0fb488663814a33176",
    "itemSku": "S7"
    },
    {
    "itemId": "37eb332bf8e748f2a12f6ba19b4018df",
    "itemSku": "S8"
    }
    ],
    "sectionId": "c4d737f6f42c423e8690ff705ab75d9f",
    "sectionName": "example",
    "startDate": "1672519500",
    "endDate": "1675197900"
    }
    }

    成功すると、以下のようなレスポンスを受け取ります:

    {
    "items": [
    {
    "itemId": "59ab1f45979e460295178deb609ec5d6",
    "itemSku": "S2"
    }
    ]
    }
  4. postman に戻り、続けて Section/Backfill メソッドを選択し、以下のサンプルメッセージを使用して呼び出します:

    {
    "userId": "c6354ec948604a1c9f5c026795e420d9",
    "namespace": "accelbyte",
    "items": [
    {
    "itemId": "7fcad276c5df4128b3f38564abd012c4",
    "itemSku": "S1",
    "owned": true,
    "index": 1
    },
    {
    "itemId": "59ab1f45979e460295178deb609ec5d6",
    "itemSku": "S2",
    "owned": false,
    "index": 2
    },
    {
    "itemId": "e51ae70222af4fba96ba8d7f631b8407",
    "itemSku": "S3",
    "owned": false,
    "index": 3
    }
    ],
    "sectionName": "example",
    "sectionId": "9f5c026795e420d9c6354ec948604a1c"
    }

    成功すると、以下のようなレスポンスを受け取ります(itemId はそれに応じて変わります):

    {
    "backfilledItems": [
    {
    "itemId": "687d110a30dc401ea5f76cd8fafff8e5",
    "itemSku": "",
    "index": 1
    }
    ]
    }

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 で、この設定に対応する適切なネームスペースに移動し、以下を行います:

    1. サイドバーメニューで、Online > Store & Catalog > Customization > Item Rotation に移動します。

    2. まだ設定を追加していない場合は、Add Configuration をクリックします。

      新しいアイテムローテーション設定を追加するためにクリックする

    3. Locally hosted (for testing purpose) オプションを選択します。前の手順のトンネルフォワーディング URL を入力し、Create をクリックします。

      トンネルフォワーディング URL を入力して作成をクリックする

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

    • AGS Private Cloud のお客様の場合:
      • ADMIN:NAMESPACE:{namespace}:CONFIG:SERVICEPLUGIN [READ,UPDATE,DELETE]
      • ADMIN:NAMESPACE:{namespace}:STORE [READ,CREATE,UPDATE,DELETE]
      • ADMIN:NAMESPACE:{namespace}:CATEGORY [CREATE]
      • ADMIN:NAMESPACE:{namespace}:CURRENCY [READ,CREATE,DELETE]
      • ADMIN:NAMESPACE:{namespace}:ITEM [READ,CREATE,DELETE]
      • NAMESPACE:{namespace}:USER:{userId}:STORE [READ]
    • AGS Public Cloud のお客様の場合:
      • Platform Store -> Service Plugin Config (Read, Update, Delete)
      • Platform Store -> Store (Read, Create, Update, Delete)
      • Platform Store -> Category (Create)
      • Platform Store -> Currency (Read, Create, Delete)
      • Platform Store -> Item (Read, Create, Delete)
    important
    • Client IDClient Secret のコピーを保管しておいてください。
    • この手順で作成した OAuth クライアントは、Prerequisites セクションで説明したものとは異なります。これは次の手順で gRPC Server の URL を登録し、テストユーザーを作成・削除するために、Postman コレクションで必要になります。
  5. 前の手順で取得した Client IDClient Secret を使用して、Postman コレクション(demo/rotating-shop-items-demo.postman_collection.json)の概要にある手順に従って環境を設定します。Extend アプリのフローが実行されている間は、このアプリのコンソールログに注意してください。コレクション内のすべてのリクエストを実行すると、gRPC Server のメソッドのうち少なくとも1つが呼び出されるはずです。

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 Features ページで、+ Create New ボタンをクリックします。
  4. Create App フォームで、Extend アプリの名前と説明(オプション)を入力します。
  5. Create をクリックします。新しい Extend アプリが Overridable Features アプリリストに追加されます。

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 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
    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 のイメージが表示されます。

    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 を設定する

Admin Portal で、Online > Store & Catalog > Customization > Item Rotation に移動します。Overridden by セクションの編集(鉛筆)ボタンをクリックして、既存の設定を編集します。

overridden by セクションの編集アイコンをクリックする

AccelByte hosted オプションを選択し、Extend アプリのいずれかを選択します。Save をクリックして完了します。

extend アプリを選択して保存する

次のステップ

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