gpc-multi-app について
gpc-multi-appは、複数のGoogle PlayアプリをGPCで管理するためのガイドです。複数のAndroidアプリを運用する開発者向けに、プロファイルやプロジェクト設定、バッチスクリプトによる操作方法をまとめています。
主な機能
- 01アプリごとのプロファイルと認証情報
- 02設定済みアプリの状態確認
- 03プロジェクト単位の .gpcrc.json による選択
- 04スクリプトによるコマンドの一括実行
- 05CIマトリックスでのアプリ別デプロイ
- 06複数アプリのストアメタデータ同期
活用シーン
- 01ホワイトラベルアプリやアプリ群の管理
- 02複数アプリへのGPCコマンド反復実行
- 03モノレポ内のモジュールごとのアプリ指定
- 04開発者アカウント別のサービスアカウント設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yasserstudio/ gpc-skills --skill gpc-multi-appインストール後、Claude Code で/gpc-multi-appを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/ci-multi-app.mdprofile-patterns.mdscripts/detect_gpc.mjs詳細
gpc-multi-app
プロフィール、スクリプト、自動化パターンを使って、GPC で複数の Google Play アプリを管理します。
使用する場面
- 複数の Android アプリ(ポートフォリオ、ホワイトラベル、バリアント)の管理
- 複数のアプリに対する同一の GPC コマンドの実行
- アプリごとの設定と認証情報のセットアップ
- 複数の Android モジュールを含むモノレポ
- アプリごとに異なるサービスアカウントを使用する場合
必要な入力
- 認証済みの GPC —
gpc auth statusで有効な認証情報が表示される必要があります - パッケージ名 — 管理対象のすべてのアプリのもの
- サービスアカウントキー — アプリまたはデベロッパーアカウントごとに異なる場合があります
手順
0. アプリの解決方法を確認する
GPC は次の順序で対象アプリを解決します。
--appCLI フラグ(最優先)GPC_APP環境変数- プロジェクトディレクトリ内の
.gpcrc.json - ユーザー設定の
~/.config/gpc/config.json - アクティブなプロファイルによる上書き
1. すべてのアプリの簡易ヘルスチェック
gpc status --all-apps を使うと、設定済みのすべてのアプリのヘルス状態を一度に確認できます。
gpc status --all-apps
プロファイルまたは設定で定義されたすべてのアプリの状態が報告されるため、プロファイルを切り替えたり、アプリごとに --app を指定したりする必要はありません。
2. プロファイルを使ったアプリごとの設定
アプリごとにプロファイルを作成します(GPC v0.9.95 以降。以前のバージョンでは、ここで --profile が無視されていました。その場合は代わりに対話型ウィザードを使用してください)。
gpc auth login --service-account /keys/main-sa.json --profile main
gpc auth login --service-account /keys/main-sa.json --profile lite
gpc auth login --service-account /keys/enterprise-sa.json --profile enterprise
次に、~/.config/gpc/config.json で各プロファイルに app(およびアプリごとの設定)を追加します。後で auth login --profile を再実行しても、更新されるのは認証情報のみで、これらのフィールドは保持されます。
{
"app": "com.example.main",
"profiles": {
"main": {
"app": "com.example.main",
"auth": { "serviceAccount": "/keys/main-sa.json" }
},
"lite": {
"app": "com.example.lite",
"auth": { "serviceAccount": "/keys/main-sa.json" }
},
"enterprise": {
"app": "com.example.enterprise",
"auth": { "serviceAccount": "/keys/enterprise-sa.json" }
}
}
}
コマンドごとにプロファイルを指定します。
gpc releases list --profile main
gpc releases list --profile lite
gpc releases list --profile enterprise
または、環境変数で設定します。
export GPC_PROFILE=enterprise
gpc releases list # uses enterprise profile
高度なプロファイル設定については、references/profile-patterns.md を「参照」してください。
3. プロジェクトレベルの .gpcrc.json
モノレポの場合は、各アプリのディレクトリに .gpcrc.json を配置します。
monorepo/
├── apps/
│ ├── main/
│ │ ├── .gpcrc.json # { "app": "com.example.main" }
│ │ └── build.gradle
│ ├── lite/
│ │ ├── .gpcrc.json # { "app": "com.example.lite" }
│ │ └── build.gradle
│ └── enterprise/
│ ├── .gpcrc.json # { "app": "com.example.enterprise" }
│ └── build.gradle
└── .gpcrc.json # shared defaults
GPC は現在のディレクトリから上位に向かって .gpcrc.json を探すため、各アプリのディレクトリからコマンドを実行すると、適切なパッケージ名が自動的に使用されます。
4. シェルスクリプトによる一括操作
すべてのアプリに対して同じコマンドを実行します。
#!/bin/bash
# deploy-all.sh — upload to internal track for all apps
APPS=(
"com.example.main"
"com.example.lite"
"com.example.enterprise"
)
for app in "${APPS[@]}"; do
echo "Uploading $app..."
gpc releases upload "build/$app/app-release.aab" --track internal --app "$app"
done
5. バイタルの一括チェック
#!/bin/bash
# check-vitals.sh — check crash rate across all apps
APPS=("com.example.main" "com.example.lite" "com.example.enterprise")
THRESHOLD=2.0
FAILED=0
for app in "${APPS[@]}"; do
echo "Checking $app..."
if ! gpc vitals crashes --threshold "$THRESHOLD" --app "$app"; then
echo "FAIL: $app crash rate exceeds ${THRESHOLD}%"
FAILED=1
fi
done
exit $FAILED
6. 複数アプリ向けの CI/CD
CI プラットフォームごとの複数アプリ用ワークフローについては、references/ci-multi-app.md を「参照」してください。
GitHub Actions のマトリックス戦略
name: Deploy All Apps
on:
push:
tags: ['v*']
jobs:
deploy:
runs-on: ubuntu-latest
strategy:
matrix:
app:
- { package: "com.example.main", aab: "main/app-release.aab" }
- { package: "com.example.lite", aab: "lite/app-release.aab" }
- { package: "com.example.enterprise", aab: "enterprise/app-release.aab" }
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Upload to internal
env:
GPC_SERVICE_ACCOUNT: ${{ secrets.PLAY_SA_KEY }}
GPC_APP: ${{ matrix.app.package }}
run: npx @gpc-cli/cli releases upload ${{ matrix.app.aab }} --track internal
7. アプリごとに異なるサービスアカウントを使用する
アプリが異なるデベロッパーアカウントに属している場合:
# Use different env vars per command
GPC_SERVICE_ACCOUNT=$(cat keys/main.json) gpc releases list --app com.example.main
GPC_SERVICE_ACCOUNT=$(cat keys/client.json) gpc releases list --app com.client.app
または、プロファイルを使用します(推奨)。
{
"profiles": {
"main": {
"app": "com.example.main",
"auth": { "serviceAccount": "/keys/main-sa.json" }
},
"client": {
"app": "com.client.app",
"auth": { "serviceAccount": "/keys/client-sa.json" }
}
}
}
8. メタデータの一括同期
共有メタデータ構造から、すべてのアプリのストア掲載情報を同期します。
# metadata/
# ├── com.example.main/
# │ └── en-US/
# ├── com.example.lite/
# │ └── en-US/
for dir in metadata/*/; do
app=$(basename "$dir")
echo "Syncing $app..."
gpc listings push --dir "$dir" --app "$app" --dry-run
done
検証
gpc config list --profile <name>に、プロファイルごとの正しいアプリと認証情報が表示される--appまたは--profileを指定したコマンドが正しいアプリを対象にする- すべてのアプリが成功した場合、一括処理スクリプトが 0 で終了する
- CI のマトリックスで、アプリごとに独立してデプロイが実行される
- サブディレクトリ内の
.gpcrc.jsonがデフォルトのアプリを正しく上書きする
よくある失敗とデバッグ
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
| 対象アプリが違う | --app が設定されておらず、デフォルトが選択されている | 必ず --app を渡すか、明示的にプロファイルを使用します |
あるアプリで API_FORBIDDEN が発生する | サービスアカウントにそのアプリへのアクセス権がない | Play Console でアプリごとの権限を確認します |
| 一括処理スクリプトがエラーを表示せずに失敗する | ループ内のエラー処理がない | set -e を使うか、各コマンドの後に $? を確認します |
| プロファイルが見つからない | プロファイル名の入力ミス | gpc config list で利用可能なプロファイルを確認します |
| CI のマトリックスジョブで一つのアプリが失敗する | 個別の失敗 | マトリックスジョブは独立して実行されます。アプリごとにログを確認してください |
.gpcrc.json が読み込まれない | 間違ったディレクトリから実行している | GPC は cwd から上位に向かって検索します。正しいディレクトリにいることを確認してください |
関連スキル
- gpc-setup — 初期認証とプロファイルの設定
- gpc-ci-integration — 単一アプリ向け CI パイプラインのセットアップ
- gpc-sdk-usage — TypeScript SDK を使ったプログラムによる複数アプリの管理
- gpc-user-management — チームメンバー向けのアプリごとの権限管理