ローカルデバッグガイド — C#
注釈:本資料はAI技術を用いて翻訳されています。
このガイドでは、C# で書かれた Extend Service Extension アプリのデバッグに特化した内容を説明します。環境セットアップ、VS Code デバッグワークフロー、ログの読み方、一般的な問題など、共通のデバッグ概念については以下を参照してください。
- Extend ローカルデバッグガイド — すべての Extend アプリタイプに共通の概念
- C# 言語セットアップガイド — .NET の前提条件、アタッチモード、jq、C# 固有のトラブルシューティング
プロジェクト構成
src/
└── AccelByte.Extend.ServiceExtension.Server/
├── AccelByte.Extend.ServiceExtension.Server.csproj
├── Program.cs # Entry point
├── Classes/
│ ├── AuthorizationInterceptor.cs # IAM token and permission validation
│ └── ...
├── Protos/
│ ├── service.proto # gRPC API definition
│ └── ...
└── Services/
└── MyService.cs # Your business logic
| ファイル | 役割 |
|---|---|
Program.cs | エントリーポイント — gRPC サーバー、gRPC-Gateway、メトリクス、認証を接続する。 |
Services/MyService.cs | ビジネスロジック — gRPC サービスメソッドを実装する。 |
Classes/AuthorizationInterceptor.cs | 受信するすべてのリクエストの IAM トークンと権限を検証する。 |
Protos/service.proto | gRPC API を定義する — エンドポイント、リクエスト/レスポンスの構造、必要な権限。 |
ポート番号:
| ポート | 用途 |
|---|---|
6565 | gRPC サーバー(内部用 — gRPC-Gateway が使用) |
8000 | gRPC-Gateway HTTP/REST — ブラウザ、Postman、curl から呼び出す |
8080 | Prometheus メトリクスエンドポイント(/metrics) |
サービスをローカルで実行する
ターミナルから
# .env ファイルからすべての変数をエクスポートする
export $(grep -v '^#' .env | xargs)
dotnet run --project src/AccelByte.Extend.ServiceExtension.Server
VS Code から
Terminal → Run Task → "Run: Service" を使用します。
このタスクは .vscode/tasks.json で定義されており、.env ファイルを自動的に読み込みます。
サービスが起動していることを確認する
次のようなログが表示されるはずです。
{"time":"...","level":"INFO","msg":"app server started","service":"extend-app-service-extension"}
{"time":"...","level":"INFO","msg":"starting gRPC-Gateway HTTP server","port":8000}
{"time":"...","level":"INFO","msg":"serving prometheus metrics","port":8080,"endpoint":"/metrics"}
ブラウザで http://localhost:8000<BASE_PATH>/apidocs/ を開き、Swagger UI が動作していることを確認します。
デバッガーをアタッチする
VS Code(推奨)
このリポジトリには、.vscode/launch.json にすぐに使える起動設定が用意されています。
{
"name": "Debug: Service",
"type": "coreclr",
"request": "launch",
"program": "${workspaceFolder}/src/AccelByte.Extend.ServiceExtension.Server/bin/Debug/net8.0/AccelByte.Extend.ServiceExtension.Server.dll",
"envFile": "${workspaceFolder}/.env",
"cwd": "${workspaceFolder}",
"console": "integratedTerminal"
}
共通ガイドのデバッガーのアタッチ の手順に従い、ドロップダウンから "Debug: Service" を選択します。
その他の IDE
診断機能を有効にしてアプリを起動し、「Attach to process」を使って IDE をアタッチします。
export $(grep -v '^#' .env | xargs)
DOTNET_EnableDiagnostics=1 dotnet run --project src/AccelByte.Extend.ServiceExtension.Server
ほとんどの IDE(JetBrains Rider、Visual Studio)は、Run → Attach to process で実行中の .NET プロセスへのアタッチをサポートしています。
ブレークポイントを設置する場所
| 調査したいこと | ファイルと場所 |
|---|---|
| 呼び出されている特定の REST エンドポイント | Services/MyService.cs — 該当メソッドの先頭 |
| 認証・トークン検証の失敗 | Classes/AuthorizationInterceptor.cs の Intercept メソッド |
| データの保存・読み込みが正しく行われない | サービスで使用しているストレージ/リポジトリクラス |
| サービスがまったく起動しない | Program.cs の起動時初期化ブロック |
条件付きブレークポイントの構文については、 C# 言語ガイドを参照してください。
ログを読む
jq によるログフィルタリングについては、
C# 言語ガイドを参照してください。
エンドポイントを手動でテストする
curl と grpcurl の使い方については、共通ガイドの
grpcurl でのテストを参照してください。
Swagger UI でのテスト(SE 固有)については、SE メインガイドの エンドポイントを手動でテストするを参照してください。
C# 固有のトラブルシューティング
Proto の変更が反映されない
症状: Protos/service.proto を編集したが、実行時に何も変わらない。
原因: 生成された gRPC スタブが再ビルドされていません。
対処法: クリーンビルドを実行します。
dotnet build src/AccelByte.Extend.ServiceExtension.Server
.csproj ファイルには <Protobuf> 項目が含まれており、ビルド時に自動的にコード生成が実行されます。
それでも古い動作が続く場合は、以下を実行してください。
dotnet clean && dotnet build src/AccelByte.Extend.ServiceExtension.Server
DOTNET_ENVIRONMENT と設定ソース
アプリは appsettings.json や環境固有のバリアント(appsettings.Development.json)から
追加の設定を読み込むことがあります。開発モードの設定を有効にするには、.env に
DOTNET_ENVIRONMENT=Development を設定してください。
ポートの競合を確認する
C# 言語ガイドのポートの競合を確認する を参照してください。
AI 支援
アプリテンプレートには、
.claude/skills/debugging-guide/SKILL.md
にある Claude エージェントスキルが同梱されています。
AI プロンプトのヒントと MCP サーバーの詳細については、共通ガイドの AI 支援によるデバッグを参照してください。