gplay-signing-setup について
Google Play 向け Android アプリの署名設定と管理を支援する開発者向けガイドスキルです。キーストア作成、Gradle と CI/CD の設定、Play App Signing、証明書確認、バックアップ、トラブルシューティングを扱います。
主な機能
- 01キーストアの作成と検証
- 02Gradle 署名設定
- 03Play App Signing の設定と移行
- 04CI/CD 署名のガイド
- 05鍵の保護とバックアップ
- 06署名トラブルの対処
活用シーン
- 01Android アプリの Play Console アップロード準備
- 02CI/CD での署名付きビルド設定
- 03手動署名から Play App Signing への移行
- 04アップロード鍵紛失への対応
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tamtom/ gplay-cli-skills --skill gplay-signing-setupインストール後、Claude Code で/gplay-signing-setupを入力して読み込まれたか確認します。
詳細
Android アプリの署名設定
Google Play 用のアプリ署名を設定または管理する必要がある場合に、このスキルを使用します。
Android アプリの署名について
Android アプリは、アップロードする前に証明書で署名する必要があります。署名方法は次の 2 つです。
- Google Play アプリ署名(推奨)- Google が署名鍵を管理します
- 手動署名(従来方式)- 自分で署名鍵を管理します
新しいキーストアを作成する
キーストアを生成する
keytool -genkey -v \
-keystore release.keystore \
-alias my-app-key \
-keyalg RSA \
-keysize 2048 \
-validity 10000
次の入力を求められます:
- キーストアのパスワード(安全に保管してください!)
- 鍵のパスワード(キーストアのパスワードと同じものを使用できます)
- 氏名/組織の詳細
キーストアファイルの保存場所
- 開発:ローカルに保管し、git には絶対にコミットしないでください
- 本番環境:安全な場所(パスワードマネージャー、シークレット保管庫)に保存してください
- CI/CD:暗号化されたシークレットを使用してください
Gradle の署名を設定する
gradle.properties(gitignore 対象)
KEYSTORE_FILE=/path/to/release.keystore
KEYSTORE_PASSWORD=your_keystore_password
KEY_ALIAS=my-app-key
KEY_PASSWORD=your_key_password
app/build.gradle
android {
signingConfigs {
release {
storeFile file(project.property('KEYSTORE_FILE'))
storePassword project.property('KEYSTORE_PASSWORD')
keyAlias project.property('KEY_ALIAS')
keyPassword project.property('KEY_PASSWORD')
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
環境変数を使用する場合(CI/CD)
android {
signingConfigs {
release {
storeFile file(System.getenv("KEYSTORE_FILE") ?: "release.keystore")
storePassword System.getenv("KEYSTORE_PASSWORD")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
}
}
}
Play アプリ署名の設定
Play アプリ署名を有効にする(新しいアプリ)
-
アップロード鍵を使用して AAB をビルドし、署名します:
./gradlew bundleRelease -
AAB を Play Console にアップロードします:
gplay release \ --package com.example.app \ --track internal \ --bundle app-release.aab -
Google Play がアプリ署名鍵を自動生成します
-
アップロード証明書をダウンロードします:
- Play Console → アプリ → 設定 → アプリの署名に移動します
- 「アップロード証明書」をダウンロードします(以降のアップロードで使用します)
既存のアプリを Play アプリ署名に移行する
アプリで手動署名を使用している場合:
-
アップロード鍵をエクスポートします:
keytool -export -rfc \ -keystore release.keystore \ -alias my-app-key \ -file upload_cert.pem -
秘密鍵を暗号化します(Google が要求します):
# Generate password for encryption openssl rand -base64 32 > encryption_password.txt # Export and encrypt private key keytool -importkeystore \ -srckeystore release.keystore \ -destkeystore encrypted.p12 \ -deststoretype PKCS12 \ -srcalias my-app-key \ -deststorepass $(cat encryption_password.txt) -
Play Console にアップロードします:
- Play Console → アプリ → 設定 → アプリの署名に移動します
- 「鍵をエクスポートしてアップロード」を選択します
- encrypted.p12 と encryption_password.txt をアップロードします
-
新しいアップロード鍵をダウンロードします:
- 移行後、新しいアップロード証明書をダウンロードします
- 以降のすべてのアップロードでこれを使用します
キーストアを検証する
キーストア内の鍵を一覧表示する
keytool -list -v -keystore release.keystore
証明書の有効期間を確認する
keytool -list -v \
-keystore release.keystore \
-alias my-app-key \
| grep Valid
証明書のフィンガープリントを抽出する
# SHA-256 (for Firebase, etc.)
keytool -list -v \
-keystore release.keystore \
-alias my-app-key \
| grep SHA256
APK/AAB の署名を検証する
AAB の署名を確認する
jarsigner -verify -verbose -certs app-release.aab
APK の署名を確認する
jarsigner -verify -verbose -certs app-release.apk
CI/CD の署名
GitHub Actions の例
- name: Decode keystore
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > release.keystore
- name: Build signed AAB
env:
KEYSTORE_FILE: release.keystore
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: |
./gradlew bundleRelease
- name: Clean up keystore
if: always()
run: rm -f release.keystore
キーストアを base64 形式で保存する
# Encode keystore to base64
base64 -i release.keystore -o keystore_base64.txt
# Add to GitHub Secrets as KEYSTORE_BASE64
アップロード証明書の管理
既存のアプリにアップロード証明書を登録する
アップロード鍵を紛失した場合:
-
新しいキーストアを生成します(上記を参照)
-
証明書をエクスポートします:
keytool -export -rfc \ -keystore new-upload.keystore \ -alias my-app-key \ -file new_upload_cert.pem -
アップロード鍵をリセットするため、Google Play サポートに問い合わせます:
- Play Console → ヘルプに移動します
- アップロード証明書のリセットをリクエストします
- new_upload_cert.pem を提示します
セキュリティのベストプラクティス
すること:
- ✅ 強力なパスワードを使用する(16 文字以上)
- ✅ キーストアを複数の安全な場所に保管する
- ✅ アプリごとに異なる鍵を使用する
- ✅ Play アプリ署名を有効にする
- ✅ アップロード鍵を本番環境用の鍵と分けておく
- ✅ 鍵の詳細を安全に記録する(パスワードは記録しないでください!)
- ✅ 鍵の有効期限に関するカレンダーのリマインダーを設定する(10~25 年)
しないこと:
- ❌ キーストアを git にコミットしない
- ❌ キーストアをメールやチャットで共有しない
- ❌ 脆弱なパスワードや推測しやすいパスワードを使用しない
- ❌ パスワードをコードに保存しない
- ❌ キーストアのバックアップを忘れない
- ❌ デバッグ用とリリース用で同じ鍵を使用しない
キーストアのバックアップ戦略
バックアップするもの:
- キーストアファイル(
release.keystore) - 鍵のエイリアス名
- キーストアのパスワード(パスワードマネージャーに保管)
- 鍵のパスワード(パスワードマネージャーに保管)
バックアップ先:
- パスワードマネージャー(1Password、LastPass など)
- 暗号化されたクラウドストレージ
- 会社のシークレット保管庫
- 物理的に安全な保管場所(企業向け)
復元プロセスをテストする:
# Verify you can use the backup
keytool -list -v -keystore backup/release.keystore
トラブルシューティング
「jarsigner: unable to sign jar」
- キーストアのパスワードが正しいことを確認します
- キーストアファイルのパスを確認します
- キーストアのエイリアスが存在することを確認します
「Failed to read key from keystore」
- 鍵のエイリアスが間違っている可能性があります
- 鍵のパスワードが間違っている可能性があります
- キーストアが破損している可能性があります
「Upload certificate doesn't match」
- 使用しているキーストアが間違っています
- キーストアが再生成されています(サポートに問い合わせてください)
- アップロード鍵ではなくアプリ署名鍵を使用しています
キーストアを紛失した場合
- Play App Signing を利用している場合:アップロードキーのリセットを Google に依頼してください
- Play App Signing を利用していない場合:復元できません。新しいアプリを公開する必要があります
複数のアプリ、複数のキー
複数のキーストアを整理する
~/keystores/
├── app1-release.keystore
├── app2-release.keystore
└── app3-release.keystore
アプリごとに異なる gradle.properties を使用する
# app1/gradle.properties
KEYSTORE_FILE=~/keystores/app1-release.keystore
KEY_ALIAS=app1-key
# app2/gradle.properties
KEYSTORE_FILE=~/keystores/app2-release.keystore
KEY_ALIAS=app2-key
キーのローテーション
Android アプリは通常、長期間(10~25 年)有効なキーで署名されますが、ローテーションが必要な場合は、次の手順に従ってください。
- Play App Signing が有効な場合にのみ可能です
- アプリの署名キーをローテーションするには、Google Play サポートに問い合わせてください
- 求められたら、新しいアップロード証明書をアップロードしてください
- 今後のすべてのビルドで新しいアップロードキーを使用する必要があります
ドキュメントのテンプレート
この情報をパスワードマネージャーに保管してください。
App Name: My Awesome App
Package: com.example.app
Keystore File: release.keystore (backed up in Dropbox)
Keystore Password: [IN PASSWORD MANAGER]
Key Alias: my-app-key
Key Password: [IN PASSWORD MANAGER]
Certificate Validity: Valid until 2035-02-05
SHA-256 Fingerprint: AB:CD:EF:12:...
Play App Signing: Enabled
Notes: Upload key only, Google manages app signing key
コメント
Markdown 対応