mcpField
G
gplay-signing-setup

gplay-signing-setup

github.com/tamtom開発52168 回インストール14 週間前に更新
リポジトリ

gplay-signing-setup について

Google Play 向け Android アプリの署名設定と管理を支援する開発者向けガイドスキルです。キーストア作成、Gradle と CI/CD の設定、Play App Signing、証明書確認、バックアップ、トラブルシューティングを扱います。

主な機能

  1. 01キーストアの作成と検証
  2. 02Gradle 署名設定
  3. 03Play App Signing の設定と移行
  4. 04CI/CD 署名のガイド
  5. 05鍵の保護とバックアップ
  6. 06署名トラブルの対処

活用シーン

  1. 01Android アプリの Play Console アップロード準備
  2. 02CI/CD での署名付きビルド設定
  3. 03手動署名から Play App Signing への移行
  4. 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 つです。

  1. Google Play アプリ署名(推奨)- Google が署名鍵を管理します
  2. 手動署名(従来方式)- 自分で署名鍵を管理します

新しいキーストアを作成する

キーストアを生成する
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 アプリ署名を有効にする(新しいアプリ)
  1. アップロード鍵を使用して AAB をビルドし、署名します:

    ./gradlew bundleRelease
    
  2. AAB を Play Console にアップロードします:

    gplay release \
      --package com.example.app \
      --track internal \
      --bundle app-release.aab
    
  3. Google Play がアプリ署名鍵を自動生成します

  4. アップロード証明書をダウンロードします:

    • Play Console → アプリ → 設定 → アプリの署名に移動します
    • 「アップロード証明書」をダウンロードします(以降のアップロードで使用します)
既存のアプリを Play アプリ署名に移行する

アプリで手動署名を使用している場合:

  1. アップロード鍵をエクスポートします:

    keytool -export -rfc \
      -keystore release.keystore \
      -alias my-app-key \
      -file upload_cert.pem
    
  2. 秘密鍵を暗号化します(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)
    
  3. Play Console にアップロードします:

    • Play Console → アプリ → 設定 → アプリの署名に移動します
    • 「鍵をエクスポートしてアップロード」を選択します
    • encrypted.p12 と encryption_password.txt をアップロードします
  4. 新しいアップロード鍵をダウンロードします:

    • 移行後、新しいアップロード証明書をダウンロードします
    • 以降のすべてのアップロードでこれを使用します

キーストアを検証する

キーストア内の鍵を一覧表示する
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

アップロード証明書の管理

既存のアプリにアップロード証明書を登録する

アップロード鍵を紛失した場合:

  1. 新しいキーストアを生成します(上記を参照)

  2. 証明書をエクスポートします:

    keytool -export -rfc \
      -keystore new-upload.keystore \
      -alias my-app-key \
      -file new_upload_cert.pem
    
  3. アップロード鍵をリセットするため、Google Play サポートに問い合わせます:

    • Play Console → ヘルプに移動します
    • アップロード証明書のリセットをリクエストします
    • new_upload_cert.pem を提示します

セキュリティのベストプラクティス

すること:
  • ✅ 強力なパスワードを使用する(16 文字以上)
  • ✅ キーストアを複数の安全な場所に保管する
  • ✅ アプリごとに異なる鍵を使用する
  • ✅ Play アプリ署名を有効にする
  • ✅ アップロード鍵を本番環境用の鍵と分けておく
  • ✅ 鍵の詳細を安全に記録する(パスワードは記録しないでください!)
  • ✅ 鍵の有効期限に関するカレンダーのリマインダーを設定する(10~25 年)
しないこと:
  • ❌ キーストアを git にコミットしない
  • ❌ キーストアをメールやチャットで共有しない
  • ❌ 脆弱なパスワードや推測しやすいパスワードを使用しない
  • ❌ パスワードをコードに保存しない
  • ❌ キーストアのバックアップを忘れない
  • ❌ デバッグ用とリリース用で同じ鍵を使用しない

キーストアのバックアップ戦略

バックアップするもの:
  1. キーストアファイル(release.keystore)
  2. 鍵のエイリアス名
  3. キーストアのパスワード(パスワードマネージャーに保管)
  4. 鍵のパスワード(パスワードマネージャーに保管)
バックアップ先:
  • パスワードマネージャー(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 年)有効なキーで署名されますが、ローテーションが必要な場合は、次の手順に従ってください。

  1. Play App Signing が有効な場合にのみ可能です
  2. アプリの署名キーをローテーションするには、Google Play サポートに問い合わせてください
  3. 求められたら、新しいアップロード証明書をアップロードしてください
  4. 今後のすべてのビルドで新しいアップロードキーを使用する必要があります

ドキュメントのテンプレート

この情報をパスワードマネージャーに保管してください。

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

コメント