gpc-troubleshooting について
GPCのコマンド失敗、終了コード、設定、認証、API、ネットワークの問題を診断するスキルです。迅速な確認手順とエラー別の説明・対処法をまとめ、CIの事例も扱います。
主な機能
- 01ヘルス状態とバージョンの確認
- 02終了コードの解釈
- 03認証と設定の診断
- 04APIおよびネットワークエラーの案内
- 05アップロードとリリースのトラブル対応
- 06CIのしきい値失敗の説明
活用シーン
- 01失敗したGPCコマンドの調査
- 02CIで失敗したGPC手順の診断
- 03認証または設定エラーの解消
- 04API、アップロード、しきい値の終了コード解釈
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yasserstudio/ gpc-skills --skill gpc-troubleshootingインストール後、Claude Code で/gpc-troubleshootingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/error-catalog.mdexit-codes.mdscripts/detect_gpc.mjs詳細
gpc-troubleshooting
すべての GPC エラー、終了コード、一般的な問題に対応する統合デバッグガイドです。
使用する場面
- GPC コマンドがエラーコードを返して失敗した場合
gpc doctorで問題が報告された場合- CI パイプラインの GPC ステップが失敗した場合
- 想定外の動作や出力が発生した場合
- 終了コードの意味を確認したい場合
- 詳細/デバッグ出力を有効にしたい場合
必要な入力
- エラーメッセージまたは終了コード — GPC が報告した内容
- 失敗したコマンド — 実行したコマンド全体
- 環境 — ローカルか CI か、OS、Node.js のバージョン
手順
0. クイック診断
# Check GPC health
gpc doctor
# Get version info
gpc --version
# Run failing command with verbose output
GPC_DEBUG=1 gpc <failing-command>
# Get error as JSON for parsing (also: --output csv, --output tsv since v0.9.68)
gpc <failing-command> --json
Read: references/exit-codes.md で終了コードの全リファレンスを確認してください。
1. 終了コード
| コード | カテゴリ | 意味 |
|---|---|---|
| 0 | 成功 | コマンドが正常に完了しました |
| 1 | 設定 | 設定エラー(.gpcrc.json がない、フィールドが無効など) |
| 2 | 使用方法 | 引数またはフラグが無効です |
| 3 | 認証 | 認証に失敗しました(トークンの期限切れ、キーが無効、認証情報がないなど) |
| 4 | API | Google Play API エラー(403、404、408、409、レート制限) |
| 5 | ネットワーク | 接続エラー、DNS エラー、タイムアウト |
| 6 | しきい値 | バイタルのしきい値を超過した、または比較する値が返されなかった(CI のゲート処理で使用) |
| 10 | プラグイン | プラグイン権限の検証エラー |
v1.0.0-rc.1 で変更されました。 不明なオプションや引数の不足など、使用方法の誤りは、この表に以前から記載されていたとおり、終了コード 2 を返すようになりました。以前は 1 を返していました。バイタルまたは異常の 403 は、「データなし」と表示して 0 で終了するのではなく、4 を返すようになりました。ターミナルがない状態で --yes を指定せずに返金または取り消しを行うと、CONFIRMATION_REQUIRED とともに 2 を返すようになりました。特定のコードに基づいて分岐する CI ジョブを確認してください。
| コード | 終了コード | 発生条件 | 対処方法 |
|---|---|---|---|
CONFIRMATION_REQUIRED | 2 | purchases orders refund / orders review-refund / purchases subscription revoke / external-transactions refund を、--yes を指定せずに非対話型で実行した(CI、パイプ入力、--no-interactive) | 内容を確認したうえで --yes を追加するか、--dry-run でプレビューしてください。プレビューでは --yes は不要です |
IMAGE_SYNC_DIR_UNREADABLE | 1 | listings images sync がローカルの画像ディレクトリを読み取れなかった | 権限(CI ではボリュームの所有権も)を修正してください。Google Play 上のデータは変更されていません |
THRESHOLD_NO_DATA | 6 | vitals ... --threshold にメトリック値が返されなかった(--app の指定誤り、データの遅延、トラフィックがないなど) | --app を確認し、--days の範囲を広げるか、その実行では --threshold を外してください |
THRESHOLD_INVALID | 2 | レートのしきい値が 1 以上(v1.0.0-rc.2 以降)。レートは小数で指定します | --threshold 0.02 は 2% を意味します。vitals.thresholds.* も修正してください |
TRAIN_GATE_NO_DATA | 6 | gpc train advance にゲートデータがなく、現在のステージに留まった(v1.0.0-rc.2 以降) | バイタルの反映には 2~4 日かかります。後でもう一度実行してください |
API_METRIC_GAMES_ONLY | 4 | ゲーム以外のアプリで vitals rendering を実行した(v1.0.0-rc.2 以降) | 想定どおりの動作です。レンダリングの低速に関する指標はゲームのみが対象です。認証情報の問題ではありません |
INVALID_PACKAGE_NAME | 2 | --app / GPC_APP の形式が正しくない(v1.0.0-rc.2 以降) | --app com.example.app または -a com.example.app を指定してください |
2. 認証エラー(終了コード 3)
Read: references/error-catalog.md でエラーカタログの全内容を確認してください。
| エラー | 原因 | 対処方法 |
|---|---|---|
AUTH_FAILED | 認証情報が無効または破損しています | gpc auth login --service-account <key.json> を再実行してください |
AUTH_EXPIRED | トークンの期限が切れ、更新にも失敗しました | 再認証し、ネットワーク/プロキシを確認してください |
AUTH_NO_CREDENTIALS | 認証が設定されていません | gpc auth login を実行するか、GPC_SERVICE_ACCOUNT を設定してください |
AUTH_INVALID_KEY | サービスアカウントの JSON 形式が正しくありません | Google Cloud Console からキーを再ダウンロードしてください |
AUTH_KEYCHAIN_ERROR | OS のキーチェーンへのアクセスが拒否されました | キーチェーンへのアクセスを許可するか、環境変数による認証を使用してください |
# Check current auth status
gpc auth status
# Re-authenticate
gpc auth login --service-account ~/path/to/key.json
# Bypass keychain with env var
export GPC_SERVICE_ACCOUNT=$(cat ~/path/to/key.json)
3. API エラー(終了コード 4)
| エラー | HTTP | 原因 | 対処方法 |
|---|---|---|---|
API_FORBIDDEN | 403 | 権限が不足しています | Play Console で必要なロールを付与してください |
API_NOT_FOUND | 404 | アプリ、トラック、またはリソースが存在しません | パッケージ名、トラック名、またはリソース ID を確認してください |
API_CONFLICT | 409 | すでに編集中です | 待ってから再試行してください。別の編集が開いている可能性があります |
API_RATE_LIMITED | 429 | リクエストが多すぎます | GPC は自動的に再試行します。GPC_BASE_DELAY を増やしてください |
API_REQUEST_TIMEOUT | 408 | リクエストがタイムアウトしました | GPC は指数バックオフを使用して自動的に再試行します |
API_SERVER_ERROR | 5xx | Google のサーバーで問題が発生しています | 後でもう一度お試しください。Google のステータスダッシュボードを確認してください |
EDIT_CONFLICT | 409 | 別のツールまたはユーザーによる同時編集です | 編集は一度に 1 つだけ行えます。Fastlane または Play Console で編集中になっていないか確認してください |
API_DUPLICATE_VERSION_CODE | 409 | このバージョンコードはすでにアップロードされています | build.gradle の versionCode を増やして、再ビルドしてください |
API_VERSION_CODE_TOO_LOW | 400 | バージョンコードが現在の値より小さいです | トラックごとにバージョンコードを増やす必要があります |
API_PACKAGE_NAME_MISMATCH | 400 | applicationId が対象アプリと一致しません | applicationId が対象アプリと一致することを確認してください |
API_APP_NOT_FOUND | 404 | デベロッパーアカウントにアプリがありません | パッケージ名とデベロッパーアカウントを確認してください |
API_INSUFFICIENT_PERMISSIONS | 403 | サービスアカウントに必要な権限がありません | Play Console → 設定 → API アクセスで必要なロールを付与してください |
API_DECLARATION_REQUIRED | 403 | Play Console の「アプリのコンテンツ」の申告が完了していません | ポリシー > アプリのコンテンツで完了してください。権限の問題ではないため、ロールを変更しても解決しません |
API_ALREADY_EXISTS | 409 | 作成しようとしたリソースはすでに存在します | create ではなく、対応する update コマンドを使用してください(例:gpc otp offers update) |
API_ENDPOINT_RETIRED | 404 | Google が公開 API からエンドポイントを削除しました | CLI では解決できません。Play Console で作業してください。現在は gpc games ... set-icon に影響します |
API_CHANGES_NOT_SENT_FOR_REVIEW | 400/403 | アプリの更新が却下されており、審査フラグが必要です | コマンドに --changes-not-sent-for-review フラグを追加してください |
API_CHANGES_ALREADY_IN_REVIEW | 400 | 変更はすでに審査中であり、新しいコミットを行うと通知なしに審査がキャンセルされます | 通知なしのキャンセルを防ぐには --error-if-in-review を使用してください |
API_EDIT_EXPIRED | 410 | 開いている編集セッションの有効期限が切れています(編集セッションは約 30 分間操作がないと期限切れになります) | GPC は、コマンドを再試行するよう提案する明確な API_EDIT_EXPIRED メッセージを表示するようになりました。再試行すると、コマンドによって新しい編集セッションが自動的に作成されます。 |
API_ROLLOUT_DECREASE_FORBIDDEN | 400 | 段階的ロールアウトの割合は増やすことはできますが、減らすことはできません | ロールアウトを停止するには、gpc releases rollout halt --track production を使用してください。続行するには、より高い割合を指定して gpc releases rollout increase を使用してください。 |
# Check if an edit is stuck
gpc apps list --json
# API errors include suggestion field
gpc releases upload app.aab --track beta --json 2>&1 | jq '.error'
4. ネットワークエラー(終了コード 5)
| エラー | 原因 | 対処方法 |
|---|---|---|
NETWORK_ERROR | 接続に失敗しました | インターネット接続とプロキシ設定を確認してください |
NETWORK_TIMEOUT | リクエストがタイムアウトしました | GPC_TIMEOUT を増やしてください(デフォルトは 30000ms) |
NETWORK_DNS | DNS の名前解決に失敗しました | DNS 設定を確認してください。Google DNS(8.8.8.8)をお試しください |
NETWORK_SSL | SSL/TLS ハンドシェイクに失敗しました | カスタム CA を使用する場合は GPC_CA_CERT を設定してください。プロキシも確認してください |
# Increase timeout for large uploads
export GPC_TIMEOUT=120000
# Configure retry behavior
export GPC_MAX_RETRIES=5
export GPC_BASE_DELAY=2000
export GPC_MAX_DELAY=30000
# Corporate proxy
export HTTPS_PROXY=http://proxy.corp:8080
# Custom CA certificate
export GPC_CA_CERT=/path/to/ca-cert.pem
5. 設定エラー(終了コード 1)
| エラー | 原因 | 対処法 |
|---|---|---|
CONFIG_MISSING | .gpcrc.json または環境変数がありません | gpc setup(v0.9.68+)または gpc config init を実行します |
CONFIG_INVALID | .gpcrc.json の形式が正しくありません | JSON の構文を検証します |
CONFIG_INVALID_JSON | 設定ファイルに構文エラーがあります(v0.9.80+) | cat <file> | python3 -m json.tool を実行してエラーを特定します |
CONFIG_INVALID_KEY | キーが空、不正な形式、または予約名です(v0.9.80+) | 有効な英数字のプロファイル名/キー名を使用します |
CONFIG_APP_MISSING | アプリが指定されていません | gpc config set app または --app フラグで設定します |
設定の優先順位に関する修正(v0.9.81+): v0.9.81 より前は、アクティブなプロファイルが GPC_SERVICE_ACCOUNT/GPC_APP 環境変数や --service-account/--app フラグよりも暗黙に優先されていました。これは不具合でした。v0.9.81 以降は、文書化された優先順位が適用されます。フラグが環境変数より優先され、環境変数がアクティブなプロファイルより優先され、アクティブなプロファイルがデフォルト値より優先されます。環境変数が無視されているように見える場合は、gpc config list でアクティブなプロファイルが設定されているか確認し、更新するか無効にしてください。
# Initialize config
gpc config init
# Set required values
gpc config set app com.example.app
# Check current config
gpc config list
6. アップロードとリリースのエラー
| エラー | 原因 | 対処法 |
|---|---|---|
INVALID_BUNDLE | AAB が破損しているか、形式が正しくありません | AAB を再ビルドし、先に gpc validate を実行します |
VERSION_CODE_CONFLICT | バージョンコードがすでに使用されています | build.gradle の versionCode を増やします |
RELEASE_NOT_FOUND | 指定されたトラックにリリースがありません | トラック名を確認し、gpc releases list --track <track> を使用します |
RELEASES_USAGE_ERROR / PUBLISH_USAGE_ERROR(終了コード 2) | ロールアウトの値が 1~100 の範囲外です | --rollout と --to はパーセンテージです。--rollout 0.1 ではなく --rollout 10 を指定します |
PROMOTE_NO_SOURCE | 移行元トラックに昇格できるリリースがありません | 先に移行元トラックへアップロードします |
UPLOAD_CHUNK_FAILED | 再試行後もチャンクを送信できませんでした | ネットワークを確認し、GPC_MAX_RETRIES または GPC_UPLOAD_TIMEOUT を増やします |
UPLOAD_NO_COMPLETION | すべてのバイトを送信しましたが、完了応答がありません | アップロードを再試行し、GPC_UPLOAD_TIMEOUT を確認します |
UPLOAD_INITIATE_FAILED | セッションの開始に失敗しました | 認証と権限を確認し、再試行します |
UPLOAD_NO_SESSION_URI | 開始応答に Location ヘッダーがありません | API エラーです。再試行するか、サービスアカウントの権限を確認します |
UPLOAD_SESSION_NOT_FOUND | セッションの有効期限が切れました(404) | 新しいアップロードセッションを開始します |
UPLOAD_SESSION_EXPIRED | セッションが失効しました(410) | 新しいアップロードセッションを開始します |
UPLOAD_INVALID_CHUNK_SIZE | チャンクサイズが 256 KB の倍数ではありません | GPC_UPLOAD_CHUNK_SIZE に 262144(256 KB)の倍数を設定します |
EDIT_VALIDATE_FAILED | アップロード後の検証/コミット中に一時的な失敗が発生しました | v0.9.77 以降、複数回の再試行ガード(15 秒、30 秒、45 秒)付きで自動再試行されます。解消しない場合は、バンドルのステータスを確認します |
REVIEW_SKIPPED | 内部トラックのコミットが完了し、Google の審査キューに入りませんでした | 想定された動作です。internal トラックでは審査は不要です。GPC は構造化 JSON 出力に reviewSkipped: true(v0.9.79+)を設定し、コミットが直ちに完了したことを示します |
# Validate before uploading
gpc validate app.aab
# Check existing releases
gpc releases list --track internal
gpc releases list --track beta
# Preview upload
gpc releases upload app.aab --track beta --dry-run
コミットの拒否:reviewPending の構造化出力(v0.9.79+)
Google が審査を要求したため edits.commit が拒否された場合、--json 出力には単純なエラーではなく、構造化された結果が含まれます。
{
"reviewPending": true,
"nextStep": "Your changes are under Google review. Check Play Console for status or use --changes-not-sent-for-review to bypass review for non-reviewed tracks."
}
CI パイプラインでは reviewPending === true を条件にして、待機、通知、終了のいずれを行うか判断できます。nextStep フィールドには、次に何をすべきかを示す、人が読める説明が常に含まれます。
7. Vitals のしきい値超過(終了コード 6)
終了コード 6 はエラーではありません。Vitals のメトリクスがしきい値を超えたことを示す、意図的なシグナルです。CI のゲートとして使用されます。
# This exits 6 if crash rate > 2.0%
gpc vitals crashes --threshold 0.02
# Check the actual value
gpc vitals crashes --json | jq '.crashRate'
# In CI, use exit code to gate promotion
gpc vitals crashes --threshold 0.015 && gpc releases promote --from beta --to production
7a. 注文の返金レビューエラー(終了コード 2、v0.9.96+)
| コード | 意味 | 修正方法 |
|---|---|---|
ORDER_REVIEW_REFUND_INVALID | gpc purchases orders review-refund に無効な入力が渡されました。--sample-content-provided に回答していない、--consumption-percent が 0~100 の範囲外、または --usage-events-file がオブジェクトの JSON 配列ではない場合に発生します | --sample-content-provided / --no-sample-content-provided のいずれか一方だけを指定し、--consumption-percent 45.2 のような単純な小数を使い、ファイルを [{ "consumptionTime": "2026-08-30T10:15:00Z" }] のような配列にしてください |
何かが送信される前にローカルで拒否されるため、コマンドに不備があっても Google の24時間の応答期間が一部消費されることはありません。空、または空白のみの --consumption-percent は、0%ではなく未指定として扱われます。
8. プラグインエラー(終了コード 10)
| エラー | 原因 | 修正方法 |
|---|---|---|
PLUGIN_INVALID_PERMISSION | サードパーティ製プラグインが不明な権限を宣言しています | plugin-sdk のドキュメントで有効な権限を確認してください |
PLUGIN_PERMISSIONS_REQUIRED | サードパーティ製プラグインが gpc.permissions を宣言していません(v0.9.94+) | 作成者に使用するフックを宣言するよう依頼し、その後、再度承認してください |
PLUGIN_IDENTITY_MISMATCH | 指定子はファーストパーティパッケージを示していますが、別の場所に解決されます(v0.9.94+) | @gpc-cli/plugin-ci の npm エイリアスまたはローカル置換を削除してください |
| プラグインが読み込まれない | 設定にない、または承認されていません | .gpcrc.json の plugins と approvedPlugins に追加してください |
| フック内のプラグインエラー | プラグインハンドラーのバグです | プラグインのログを確認してください。onError / API フックはエラーを握りつぶします |
変更履歴の生成エラー(v0.9.61+)
| コード | 意味 | 修正方法 |
|---|---|---|
CHANGELOG_NO_TAG | v* の Git タグが見つからず、--from も渡されていません | タグを作成する(git tag v0.0.1)か、--from <ref> を渡してください |
CHANGELOG_BAD_REF | --from または --to の ref が存在しません | git rev-parse --verify <ref> を実行して確認してください |
CHANGELOG_LOCALES_REQUIRED | --target play-store が --locales なしで渡されました(v0.9.62+) | --locales en-US,fr-FR または --locales auto を渡してください |
CHANGELOG_LOCALES_INVALID | 1つ以上の --locales が有効な BCP 47 ではありません(v0.9.62+) | en-US、fr-FR、de-DE など、Play Store 対応のコードを使ってください |
CHANGELOG_LOCALES_AUTO_NO_APP | 認証済みのクライアントとアプリがない状態で --locales auto が指定されました(v0.9.62+) | --app <package> を渡すか、config.app を設定し、認証情報を確認してください |
CHANGELOG_FETCH_FAILED | GitHub API に接続できないか、エラーが返されました(v0.9.80+) | ネットワークを確認してください。変更履歴はドキュメントサイトで確認できます |
CHANGELOG_VERSION_NOT_FOUND | GitHub リリースに要求されたバージョンが見つかりません(v0.9.80+) | gpc changelog --limit 10 を実行して、利用可能なバージョンを確認してください |
WATCH_WEBHOOK_FAILED | Webhook エンドポイントが 2xx 以外を返しました(v0.9.80+) | Webhook URL とサーバーの状態を確認してください |
CHANGELOG_LOCALES_EMPTY | --locales auto の結果、ロケールが0件でした(v0.9.62+) | Play Store の掲載情報を少なくとも1つ作成するか、明示的に --locales を渡してください |
RELEASE_NO_DRAFT | --apply の実行時に、対象トラックにドラフトリリースが見つかりませんでした(v0.9.64+) | 先にドラフトリリースを作成してください(gpc releases upload --status draft) |
BUNDLE_PROCESSING_TIMEOUT | AAB のアップロードは完了しましたが、約86秒以内にバンドルが処理されませんでした(v0.9.64+、v0.9.77 で延長) | アップロードを再試行するか、--status draft を使って後でコミットしてください。問題が続く場合は、バンドルのサイズと Google のサーバーの状態を確認してください |
一括レポートのエラー(v0.9.93以降)
gpc reports list と gpc reports download stats|financial は、デベロッパーアカウントにリンクされた Cloud Storage バケット(pubsite_prod_<developerId>)から、Play の月次一括レポート CSV を読み取ります。v0.9.93 より前は、これらのコマンドは案内を表示するだけでしたが、現在は実際にネットワーク処理を行い、専用のエラーコードを返します。
| コード | 終了コード | 意味 | 対処方法 |
|---|---|---|---|
REPORT_ACCESS_DENIED | 4 | 認証情報は有効ですが、レポートバケットの読み取りが許可されていません | Play Console -> ユーザーと権限 -> サービスアカウント -> アカウントの権限 -> 「アプリ情報の表示と一括レポートのダウンロード(読み取り専用)」を有効にして、数分待ってから再試行してください |
REPORT_AUTH_REJECTED | 3 | Google がトークン自体を拒否しました(HTTP 401) | gpc auth status でキーを確認し、システム時計を検証してから、gpc auth clear-cache を実行して再試行してください |
REPORT_BUCKET_UNKNOWN | 2 | バケットが設定されておらず、バケット名を導出するデベロッパー ID もありません | developerId / GPC_DEVELOPER_ID を設定するか、--bucket / GPC_REPORTS_BUCKET / reports.bucket を指定してください |
REPORT_BUCKET_INVALID | 2 | 設定されたバケット名が有効な GCS バケット名ではありません | Play Console -> レポートのダウンロードから Cloud Storage URI を正確にコピーしてください(gs:// URI も指定でき、バケット名に変換されます) |
REPORT_BUCKET_NOT_FOUND | 4 | バケットが存在しないか、このアカウントから見えません | 名前を確認してください。デフォルトは pubsite_prod_<developerId> です |
REPORT_OBJECT_NOT_FOUND | 4 | 指定した種類/月/ディメンションに一致するオブジェクトがありません | エラーに利用可能なディメンションまたは月が表示されます。月次レポートは、その月が終わった後にのみ公開されます |
REPORT_LIST_FAILED | 4 | バケット一覧の取得に失敗しました | 再試行し、ネットワークと gpc doctor を確認してください |
REPORT_DOWNLOAD_FAILED | 4 | オブジェクトの取得に失敗しました | 再試行し、ネットワークを確認してください |
REPORT_DECODE_FAILED | 4 | オブジェクトを gunzip できないか、UTF-16 からデコードできませんでした | ダウンロードを再試行してください。解決しない場合は、--output-file で生のオブジェクトを保存して報告してください |
REPORT_ARCHIVE_UNREADABLE | 4 | 財務 ZIP アーカイブを読み取れませんでした | --output-file report.zip で生のアーカイブを保存し、ローカルで開いてください |
REPORT_MULTIPLE_ENTRIES | 2 | 財務アーカイブに複数の CSV が含まれているため、単一の項目として出力できません | --output-file report.zip でアーカイブを保存するか、--json ですべての項目をインライン出力してください |
INVALID_REPORT_DIMENSION | 2 | --dimension がサポートされている値のいずれでもありません | overview、country、language、os_version、device、app_version、carrier、traffic_source のいずれかを使用してください(レビューのレポートにはディメンションがありません) |
MISSING_REQUIRED_OPTION | 2 | --month や --type などの必須フラグが省略されています | 概要を確認してください。統計のダウンロードには --month と --type が必要です |
INVALID_LIMIT | 2 | --limit が正の整数ではありません | 正の整数を指定してください |
gpc doctor には reports-bucket プローブが含まれています。権限付与が不足している場合(403/401)やバケット名が間違っている場合(404)に警告するため、コマンドのデバッグ前に設定を確認する最も手早い方法です。
9. デバッグモード
任意のコマンドで詳細出力を有効にします。
# Debug environment variable
GPC_DEBUG=1 gpc releases upload app.aab --track beta
# JSON output for machine parsing
gpc releases upload app.aab --track beta --json
# Combine for maximum detail
GPC_DEBUG=1 gpc releases upload app.aab --track beta --json 2>debug.log
10. 再試行可能な HTTP ステータスコード
GPC は、以下の HTTP ステータスコードに対して指数バックオフで自動的に再試行します。
- 408 — リクエストタイムアウト
- 429 — リクエストが多すぎます(レート制限)
- 5xx — サーバーエラー(500、502、503 など)
再試行の動作を設定します。
export GPC_MAX_RETRIES=5 # Default: 5
export GPC_BASE_DELAY=1000 # Initial delay in ms
export GPC_MAX_DELAY=15000 # Max delay in ms
export GPC_UPLOAD_TIMEOUT=300000 # Upload timeout in ms (5 min)
検証
gpc doctorですべてのチェックに合格する- 失敗していたコマンドが成功するか、明確で対処可能なエラーを表示する
- 終了コードが想定されるカテゴリと一致する
--jsonの出力にerror.code、error.message、error.suggestionが含まれる
障害モード/デバッグ
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
gpc doctor が認証で失敗する | 認証情報が設定されていない | gpc setup(v0.9.68+)または gpc auth login を実行します |
gpc doctor が API で失敗する | サービスアカウントに API アクセス権がない | GCP で Google Play Developer API を有効にします |
gpc doctor がクォータの警告を表示する | 1 日または 1 分あたりの API クォータを 80% 超使用している | リクエスト頻度を下げるか、Google にクォータの引き上げを依頼します(v0.9.71+) |
gpc doctor がプラグインエラーを表示する | 設定済みのプラグインの読み込みに失敗している | プラグインパッケージのバージョンを確認し、再インストールするか、設定から削除します(v0.9.71+) |
gpc doctor --verify で不一致が発生する | ローカルのキーストアが Play の署名証明書と異なる | ローカルキーを Play Console に登録するか、Play App Signing を使用します(v0.9.75+) |
| すべてのコマンドがタイムアウトする | ネットワーク/プロキシの問題 | HTTPS_PROXY、GPC_CA_CERT、GPC_TIMEOUT を確認します |
NETWORK_ERROR: "A proxy is configured ... could not route requests through it" | HTTPS_PROXY/HTTP_PROXY の形式が正しくない(v0.9.98+ では直接接続せず、エラーになります) | URL を修正する(例:http://proxy.example.com:8080)か、変数の設定を解除します。プロキシを経由しないホストには NO_PROXY を使用します |
users list/users get: "Pagination is not currently available" | Google がページネーション付きのユーザーリクエストを拒否するようになった(v0.9.98 より前の GPC) | v0.9.98+ にアップグレードします |
gpc doctor が "Unknown config keys: legacyApprovedPlugins, pluginApprovalPolicyVersion"(または vitals/games/reports)という警告を表示する | 既知のキー一覧が古い(v0.9.98 より前)。これらのキーは有効です | v0.9.98+ にアップグレードします。設定を変更する必要はありません |
| ローカルではコマンドが動作するが、CI では失敗する | CI に環境変数が設定されていない | CI のシークレットに GPC_SERVICE_ACCOUNT と GPC_APP を設定し、gpc setup --auto を実行します(v0.9.68+) |
環境変数 GPC_SERVICE_ACCOUNT/GPC_APP が無視されているように見える | アクティブなプロファイルが環境変数を上書きしている(v0.9.81 より前のバグ) | v0.9.81+ にアップグレードします。gpc config list でアクティブなプロファイルを確認します。環境変数とフラグがプロファイルより正しく優先されるようになりました。 |
npm install -g @gpc-cli/cli が EUNSUPPORTEDPROTOCOL で失敗する | workspace:* 指定子が公開済みマニフェストに混入していた(v0.9.77-v0.9.83) | v0.9.84+ または v0.9.85+ で再インストールします:npm install -g @gpc-cli/cli@latest。v0.9.84 で修正され(cli+core)、v0.9.85 で完全に解決しました(api パッケージを再公開)。 |
gpc doctor が reports-bucket について警告する | サービスアカウントに一括レポートの権限がない、またはバケット名が正しくない | Play Console で「アプリ情報の表示と一括レポートのダウンロード(読み取り専用)」を有効にするか、--bucket/GPC_REPORTS_BUCKET で正確なバケットを設定します(v0.9.93+) |
| 権限を付与した直後もレポートへのアクセスが拒否される | 権限付与が反映されていないか、キャッシュされたトークンが権限付与前に発行された | 数分待ってから gpc auth clear-cache を実行し、再試行します(v0.9.93+) |
JSON 出力に suggestion がない | 想定外のエラータイプ | バグを報告してください。すべてのエラーに提案が表示されるべきです |
関連スキル
- gpc-setup — 初期認証と設定
- gpc-ci-integration — CI 固有のトラブルシューティング
- gpc-vitals-monitoring — 閾値超過の理解
- gpc-plugin-development — プラグインの問題のデバッグ