Local Debugging Guide for Extend Override
注釈:本資料はAI技術を用いて翻訳されています。
概要
このガイドでは、ローカルマシンで Extend Override アプリをデバッグする手順を説明します。
すべての Extend アプリタイプに共通するデバッグ概念(環境変数の設定、VS Code デバッグワークフロー、ログの読み方、よくある起動エラー)については、 Extend ローカルデバッグガイドを参照してください。
Extend Override には 9 つのユースケース(matchmaking、cloud-save-validator、lootbox-roll、 profanity-filter、revocation、rotating-shop-items、session-dsm、session-manager、 challenge-assignment)があります。デバッグワークフロー(ポート、認証、実行/アタッチ/テストのパターン、proto の再生成)は、すべてのユースケースで共通です。本ガイドではそれらすべてを扱います。使用している ユースケースに固有のサービスファイルや proto については、各言語のガイドにある参照テーブルを 確認してください。
このガイドでは Visual Studio Code(VS Code) を中心に説明しますが、内容はどのエディタや IDE にも 適用できます。
言語ごとの設定(前提条件、プロジェクト構成、実行コマンド、デバッガー設定)については、 以下から使用する言語のガイドに直接進んでください。
サービスを通じた呼び出しの流れ
すべての Extend Override アプリは、言語やユースケースにかかわらず同じレイヤー構成で構築されています。 この構成を理解することで、問題の発生箇所を特定しやすくなります。
AGS service (intercepts operation)
│ gRPC (with IAM bearer token)
▼
gRPC Server (port 6565) ← your override logic lives here
│
▼
Returns override result to AGS
ポートの概要:
| ポート | 用途 |
|---|---|
6565 | gRPC サーバー — AGS からの呼び出しを受信 |
8080 | Prometheus メトリクスエンドポイント(/metrics) |
問題が発生した場合は、レイヤーごとに順を追って調査してください。
| 症状 | 最も可能性の高いレイヤー | 最初に確認すべき箇所 |
|---|---|---|
| サービスが起動しない | 環境変数 / 認証情報 | .env ファイル、IAM クライアント認証情報 |
| Override がトリガーされない | Admin Portal での登録 | Extend の設定、override のバインディング |
| すべての呼び出しで認証エラーが発生する | PLUGIN_GRPC_SERVER_AUTH_ENABLED | ローカル開発時は .env で false に設定 |
| Override はトリガーされるが結果が誤っている | ビジネスロジック | override メソッドの実装 |
| デバッガーが一度も一時停止しない | ポートの競合またはビルドモード | ポート 6565 で動作中のプロセスを確認 |
| proto の変更が反映されない | 生成コードが古い | protobuf バインディングを再生成 |
環境設定
共通の変数(AB_BASE_URL、AB_CLIENT_ID、AB_CLIENT_SECRET、LOG_LEVEL)と、
.env ファイルの作成・確認方法については、Extend アプリの共通デバッグガイドにある
環境設定を参照してください。
Extend Override 固有の変数: PLUGIN_GRPC_SERVER_AUTH_ENABLED
Extend Event Handler とは異なり、Extend Override はすべての受信 gRPC 呼び出しに対して IAM ベアラートークンを検証します。デフォルトでは、これは有効になっています。
PLUGIN_GRPC_SERVER_AUTH_ENABLED=true
| 変数 | 用途 | ローカルデバッグでの推奨値 |
|---|---|---|
PLUGIN_GRPC_SERVER_AUTH_ENABLED | gRPC 呼び出しに対する IAM トークン検証を有効化する | ローカル開発中は認証をスキップするために false |
PLUGIN_GRPC_SERVER_AUTH_ENABLED=true の場合、grpcurl やテストクライアントからのすべての呼び出しに
有効な IAM ベアラートークンを含める必要があります。認証の動作を特にデバッグしている場合を除き、
ローカルテストを簡略化するために false に設定してください。
BASE_PATH は不要Extend Override では BASE_PATH 変数を使用しません。gRPC-Gateway や HTTP/REST
レイヤーは存在せず、AGS は gRPC サーバーを直接呼び出します。
サービスをローカルで実行する
VS Code のタスクとターミナルでの実行方法については、Extend アプリの共通デバッグガイドにある サービスをローカルで実行するを 参照してください。
gRPC サーバーが起動していることを確認する
サービスが起動すると、以下のようなログが表示されます(正確な形式は言語によって異なります)。
{"level":"INFO","msg":"gRPC server listening","address":"[::]:6565"}
{"level":"INFO","msg":"prometheus metrics served at :8080/metrics"}
gRPC リフレクションが機能していることも確認できます。
grpcurl -plaintext localhost:6565 list
使用している言語での正確なターミナル実行コマンドについては、 言語別ガイドを参照してください。
デバッガーのアタッチ
VS Code でのデバッガーのアタッチ手順については、Extend アプリの共通デバッグガイドにある VS Code でデバッガーをアタッチするを 参照してください。
Override 固有の .vscode/launch.json 設定や、VS Code 以外の環境での設定については、
言語別ガイドを参照してください。
ブレークポイントの設定と状態の確認
ブレークポイントの設定方法、VS Code のデバッグパネルの使用方法、コードのステップ実行、条件付き ブレークポイントの記述方法については、Extend アプリの共通デバッグガイドにある ブレークポイントの設定と状態の確認を 参照してください。
Override サービスファイルで推奨されるブレークポイントの配置場所や、言語ごとの条件付き構文の例については、 言語別ガイドを参照してください。
ログの読み方
構造化された JSON ログ形式、ログレベル、gRPC 呼び出しのペア、jq の使用方法については、
Extend アプリの共通デバッグガイドにある
ログの読み方と理解を参照してください。
言語ごとの jq パイプコマンドについては、言語別ガイドを参照してください。
よくある問題
すべての Extend アプリに共通するよくある問題(認証情報エラー、401 Unauthenticated、ブレークポイントが 一度もヒットしない、など)については、Extend アプリの共通デバッグガイドにある よくある問題を参照してください。
以下の問題は Extend Override に固有のものです。
Override がトリガーされない
症状: gRPC サーバーは正常に動作していますが、ブレークポイントが一度もヒットせず、ログにも受信呼び出しが 表示されません。
原因: override アプリが Admin Portal 上で対象の AGS 機能にバインドされていません。
修正方法:
- Admin Portal に移動します。
- Extend > 該当するユースケース(例: Matchmaking)に移動します。
- アプリがデプロイされ、有効になっており、正しい namespace にバインドされていることを確認します。
- ローカルでテストする場合は、AGS 環境がローカルサービスへの呼び出しをルーティングするように設定されて いることを確認します(トンネルやローカルネットワークルートなど)。
すべての呼び出しで認証エラーが発生する — PLUGIN_GRPC_SERVER_AUTH_ENABLED
症状: 有効な IAM トークンを使用していても、すべての gRPC 呼び出しが unauthenticated または
permission denied を返します。
原因: 認証インターセプターが有効になっていてトークンを拒否している、または .env の IAM
認証情報が間違っています。
修正方法: ローカルデバッグの場合は、.env で PLUGIN_GRPC_SERVER_AUTH_ENABLED=false を設定し、
トークン検証を完全にバイパスします。認証を有効にしたままにする必要がある場合は、.env ファイル内の
AB_CLIENT_ID、AB_CLIENT_SECRET、AB_BASE_URL を確認してください。
proto の変更が反映されない
症状: .proto ファイルを編集しましたが、サービスの動作が変わりません。
原因: 生成されたコードスタブが再生成されていません。
修正方法: 「Proto: Generate」 VS Code タスクを実行します(利用可能な場合)。または、./proto.sh
を直接実行(Go と Python の場合)するか、./gradlew generateProto(Java の場合)を実行するか、
プロジェクトを再ビルド(C# の場合)します。その後、サービスを再起動します。
Override を手動でテストする
Swagger UI や HTTP エンドポイントは存在しません。AGS は gRPC サーバーを直接呼び出します。
override された AGS 機能をトリガーする
最も現実的なテスト方法は、override が登録されている AGS 機能をトリガーすることです。具体的な手順は ユースケースによって異なります。各ユースケースのカスタマイズガイドには、ユースケース固有の呼び出し手順が 記載されています。
- Customize matchmaking
- Customize cloud save validator
- Customize lootbox roll
- Customize profanity filter
- Customize rotating shop items
grpcurl で gRPC サーバーを直接テストする
grpcurl を使ったテストについては、Extend アプリの共通デバッグガイドにある
grpcurl でのテストを参照してください。
gRPC リフレクションを使用して利用可能なサービスを確認します。
grpcurl -plaintext localhost:6565 list
特定のメソッドを呼び出します(matchmaking の例 — 使用しているユースケースに応じてサービス名と メソッド名を調整してください)。
grpcurl -plaintext \
-d '{"rules": {"json": "{}"}}' \
localhost:6565 \
accelbyte.matchmakingv2.matchfunction.MatchFunction/GetStatCodes
PLUGIN_GRPC_SERVER_AUTH_ENABLED=true の場合は、すべての grpcurl 呼び出しに
-H "Authorization: Bearer <your-token>" を追加してください。
AI を活用したデバッグ
チームで AI ツールを使用していない場合、または職場で AI の使用が推奨されていない場合は、このセクションを スキップしてください。このガイドの他のすべてのセクションは完全に自己完結しており、AI アシスタントを 必要としません。
Claude Code、GitHub Copilot などの AI コーディングアシスタントは、デバッグの相棒として、 不慣れなコードの説明、ログの解析、的確な修正の提案などに活用できます。
デバッグスキルの使用
各 Extend Override アプリのテンプレートリポジトリには、.claude/skills/debugging-guide/SKILL.md
にすぐに使えるエージェントスキルが用意されています。スキルとは、AI に対して特定の分野(この場合は
Extend Override アプリのデバッグ)を支援する方法を正確に指示する一連の指示です。
このスキルファイルは、各ユースケースのテンプレートリポジトリで利用できます(全リストは リポジトリを参照してください)。スキルが有効になったら、AI チャットで 以下のいずれかを入力して呼び出します。
| 目的 | 入力内容 |
|---|---|
| 発生している問題をデバッグする | /debugging-guide Go — getting unauthenticated on every call |
| デバッグガイドを作成または更新する | /debugging-guide write Go |
| AI に判断させる | 問題を自然な言葉で説明する — AI が適切なモードを選択します |
エージェントスキルは Claude Code で標準的に動作します。他の AI ツールや IDE 拡張機能を使用する場合は、
Agent Skills オープンスタンダードに対応しているかどうかを確認してください。
使用しているツールがスキルに対応していない場合は、.claude/skills/debugging-guide/SKILL.md の内容を
コピーして、チャットセッションの最初のメッセージ(またはシステムプロンプト)として貼り付けてください。
以下は、独自の Extend Override リポジトリで .claude/skills/debugging-guide/SKILL.md として
調整・保存できる参考用のスキルファイルです。
デバッグスキルの全文を表示(SKILL.md)
---
name: debugging-guide
description: >
Expert guide writer and debugging assistant for AccelByte Extend Override apps.
Use when a developer asks for help debugging their Override service, diagnosing startup or
runtime errors, understanding logs, setting up a debugger, or when writing or updating a
DEBUGGING_GUIDE.md for an Extend Override app. Covers Go but the workflow applies to other
supported languages (Python, C#, Java).
argument-hint: "[language] [brief issue description or 'write guide']"
allowed-tools: Read, Grep, Glob, Bash(go *), Bash(dlv *), Bash(ss *), Bash(grpcurl *), Bash(jq *)
---
# Debugging Guide Skill — Extend Override
You are an expert backend developer and technical writer specializing in AccelByte Gaming
Services (AGS) Extend Override apps. Your two modes of operation are:
1. **Debug Mode** — Help a developer diagnose and fix a real issue in their running service.
2. **Write Mode** — Author or update a `DEBUGGING_GUIDE.md` for an Extend Override repository.
Detect which mode is needed from `$ARGUMENTS`. If the argument mentions a specific error,
log output, or symptom, use Debug Mode. If it mentions "write", "guide", or "document", use
Write Mode. If ambiguous, ask one clarifying question.
---
## Architecture Context
Every Extend Override app shares this architecture:
\`\`\`
AGS service (intercepts operation)
│ gRPC (with IAM bearer token)
▼
gRPC Server (port 6565) ← your override logic lives here
│
▼
Returns override result to AGS
\`\`\`
Key environment variables:
| Variable | Purpose |
|---|---|
| `AB_BASE_URL` | AccelByte environment base URL |
| `AB_CLIENT_ID` / `AB_CLIENT_SECRET` | OAuth client credentials |
| `PLUGIN_GRPC_SERVER_AUTH_ENABLED` | `false` to skip IAM token validation locally |
| `LOG_LEVEL` | `debug` \| `info` \| `warn` \| `error` |
---
## Debug Mode
### Step 1 — Identify the layer where the failure occurs
- Service fails to **start** → environment variables and IAM login.
- All calls return **unauthenticated** → set `PLUGIN_GRPC_SERVER_AUTH_ENABLED=false` locally.
- Override is **never triggered** → check Admin Portal binding.
- Returns **wrong result** → business logic in the service implementation file.
- Debugger **won't pause** → port conflicts or build mode.
- **Proto changes ignored** → regenerate bindings.
### Step 2 — Collect evidence
1. Ask for full log output at `LOG_LEVEL=debug`. Look for `"level":"ERROR"` lines.
2. Read the source files referenced in the error before suggesting a fix.
3. Check environment: `printenv | grep -E 'AB_|PLUGIN_GRPC|LOG_LEVEL'`
4. Check ports: `ss -tlnp | grep -E '6565|8080'`
### Step 3 — Common-issue checklist
| Symptom | Likely cause | Where to look |
|---|---|---|
| `unable to login using clientId and clientSecret` | Wrong credentials or unreachable `AB_BASE_URL` | Entry point → OAuth login |
| All calls return `unauthenticated` | Auth interceptor active with missing token | Set `PLUGIN_GRPC_SERVER_AUTH_ENABLED=false` |
| Override never fires | App not bound in Admin Portal | Admin Portal Extend configuration |
| Override returns wrong result | Business logic error | Service implementation file |
| Breakpoints never hit | Port conflict or auth blocking before breakpoint | Disable auth, check port 6565 |
| Proto changes have no effect | Generated code not regenerated | Run `./proto.sh` or equivalent |
### Step 4 — Suggest a minimal fix
- Explain *why* the fix works.
- Read the file first, then show the exact change.
- Provide a verification step after every fix.
### Step 5 — Verify
\`\`\`bash
# Confirm service starts cleanly
go run main.go 2>&1 | jq 'select(.level == "ERROR")'
# Confirm gRPC layer is reachable
grpcurl -plaintext localhost:6565 list
# Call a specific method (adjust service and method for your use case)
grpcurl -plaintext \
-d '{"rules": {"json": "{}"}}' \
localhost:6565 \
accelbyte.matchmakingv2.matchfunction.MatchFunction/GetStatCodes
\`\`\`
---
## Write Mode
### Audience
Junior developers and game developers with limited backend experience. Avoid assuming knowledge
of gRPC, protobuf, or IAM. Use plain language. VS Code-centric but include notes for other IDEs.
### Required sections
1. Overview + architecture diagram
2. Project structure reference (file-to-responsibility table, port table)
3. Prerequisites (language-specific)
4. Environment setup (.env, key variables, when to disable auth locally)
5. Running the service (terminal + VS Code task)
6. Attaching the debugger (VS Code launch config, other IDEs/headless)
7. Breakpoints and inspection (placement table, stepping shortcuts, conditional breakpoints)
8. Reading logs (format, levels, gRPC pairs, jq)
9. Common issues (symptom / cause / fix per issue)
10. Testing manually (grpcurl, trigger AGS feature, Postman collection)
11. AI-assisted debugging (this skill, MCP servers, prompting tips)
12. Tips and best practices
### Before writing, always read first
1. Existing `DEBUGGING_GUIDE.md` if present — update, do not replace accurate content.
2. `main.go` (or equivalent entry point) for ports, startup sequence, and env vars.
3. Service implementation file to understand the business logic layer.
4. `.vscode/launch.json` for the debug configuration name and settings.
5. The `.proto` file for service method names.
MCP サーバー
アプリテンプレートには、.vscode/mcp.json(存在する場合)に MCP サーバーの設定が含まれています。
これらにより、AI アシスタントは AccelByte 固有の知識に直接アクセスできます。
| サーバー | 提供する内容 |
|---|---|
ags-extend-sdk-mcp-server | AccelByte Extend SDK のシンボル、型、使用パターンに関する知識 |
ags-api-mcp-server | ライブの AGS REST API へのアクセス(環境に AB_BASE_URL が必要) |
Extend アプリのデバッグにおける一般的な AI プロンプトのヒントについては、Extend アプリの共通デバッグ ガイドにあるAI を活用したデバッグを 参照してください。
ヒントとベストプラクティス
ログレベル、認証の無効化、条件付きブレークポイント、VS Code パネル、ポートの確認などの一般的な ヒントについては、Extend アプリの共通デバッグガイドにある ヒントとベストプラクティスを参照してください。
Extend Override 固有のヒント:
-
ローカル開発では認証を無効にする。 ビジネスロジックをデバッグしている間は、
.envでPLUGIN_GRPC_SERVER_AUTH_ENABLED=falseを設定してください。デプロイ前に認証を再度有効にして、 エンドツーエンドで動作を確認してください。 -
.protoを変更するたびに proto バインディングを再生成する。 再生成せずに.protoファイルを 編集することは、わかりにくいコンパイルエラーや実行時エラーの最も一般的な原因の一つです。正確な 再生成コマンドについては、使用している言語のガイドを参照してください。 -
簡単な手動テストには
grpcurlを使用する。 HTTP/REST レイヤーが存在しないため、grpcurlは 完全な AGS フローをトリガーせずに単一の呼び出しを実行して結果を確認する最も速い方法です。
言語別ガイド
上記のセクションでは、すべての言語およびすべての Override ユースケースに共通する概念とワークフローを 説明しています。設定手順、プロジェクト構成、実行コマンド、デバッガー設定、言語固有のトラブルシューティング については、使用している言語専用のガイドを参照してください。