From android-deploy-tools
Android / Flutter アプリを Firebase App Distribution で配信する
How this skill is triggered — by the user, by Claude, or both
Slash command
/android-deploy-tools:android-deploy-firebaseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Android / Flutter アプリを Firebase App Distribution で配信する。GitHub Actions またはローカルで Firebase CLI を使ってビルド・配信を行う。AAB を基本とし、Google Play 未連携の場合は APK にフォールバックする。認証はサービスアカウント(`GOOGLE_APPLICATION_CREDENTIALS`)を使う(`FIREBASE_TOKEN` は非推奨のため使わない)。
Android / Flutter アプリを Firebase App Distribution で配信する。GitHub Actions またはローカルで Firebase CLI を使ってビルド・配信を行う。AAB を基本とし、Google Play 未連携の場合は APK にフォールバックする。認証はサービスアカウント(GOOGLE_APPLICATION_CREDENTIALS)を使う(FIREBASE_TOKEN は非推奨のため使わない)。
git fetch origin && git pull origin <ブランチ名> でローカルを最新化する。pubspec.yaml が存在 → Flutter プロジェクトsettings.gradle / settings.gradle.kts が存在し pubspec.yaml が無い → ネイティブ Android プロジェクトapp/build.gradle / app/build.gradle.kts の productFlavors / flavorDimensions を確認する。./gradlew app:tasks --group=build でも bundle<Flavor>Release 形式のタスク一覧を確認できる。android/app/build.gradle の productFlavors、または flutter build で使う --flavor を確認する。prod, staging)。build type は通常 release。release)。testers)gh workflow run deploy-android-firebase.yml \
-f groups="<groups>" \
-f release_notes="<notes>" \
-f artifact="aab" \
-f flavor="<flavor>"
-f flavor="" を渡す。gh run list --workflow=deploy-android-firebase.yml --limit=1 でワークフロー起動を確認する。/android-init-ci で先に作成するよう案内する。variant 付きのタスクでビルドする(ビルドには時間がかかるため、タイムアウトを長めに設定する(10分))。
ここで <Variant> は flavor + build type をキャメルケースで結合し先頭を大文字にしたもの(例: flavor prod + release → ProdRelease、flavor 無し → Release)。
| プロジェクト | 成果物 | ビルドコマンド |
|---|---|---|
| ネイティブ Android | AAB | ./gradlew bundle<Variant>(flavor 無し: ./gradlew bundleRelease) |
| ネイティブ Android | APK | ./gradlew assemble<Variant>(flavor 無し: ./gradlew assembleRelease) |
| Flutter | AAB | flutter build appbundle --release --flavor <flavor>(flavor 無し: --flavor を省略) |
| Flutter | APK | flutter build apk --release --flavor <flavor>(flavor 無し: --flavor を省略) |
生成された成果物のパスを find で特定する(出力パスは variant により変わるため決め打ちしない。複数ヒットする場合は variant 名を含むディレクトリのものを選ぶ):
# ネイティブ Android: AAB は app/build/outputs/bundle/<variant>/、APK は app/build/outputs/apk/<flavor>/<buildType>/
find app/build/outputs/bundle -name '*.aab' # AAB
find app/build/outputs/apk -name '*.apk' # APK
# Flutter
find build/app/outputs/bundle -name '*.aab' # AAB
find build/app/outputs/flutter-apk -name '*.apk' # APK
配信する:
firebase appdistribution:distribute "<特定した成果物パス>" \
--app "$FIREBASE_APP_ID" \
--groups "<groups>" \
--release-notes "<notes>"
FIREBASE_APP_ID 環境変数(1:xxxx:android:xxxx 形式)が設定されていることを確認する。GOOGLE_APPLICATION_CREDENTIALS にサービスアカウント JSON 鍵のパスが設定されていること。コマンド実行でエラーが発生した場合は、shared/TROUBLESHOOTING.md を参照しつつ以下の手順で対応する:
FIREBASE_APP_ID 未設定 → Firebase Console (プロジェクト設定 → マイアプリ) から Android アプリの App ID(1:xxxx:android:xxxx)を確認し、環境変数に設定する手順を案内./gradlew assembleRelease / flutter build apk --release)にフォールバックして再配信GOOGLE_APPLICATION_CREDENTIALS 未設定 / 認証エラー → Google Cloud コンソールでサービスアカウントに「Firebase App Distribution Admin」ロールを付与し、JSON 鍵を発行して環境変数にパスを設定する手順を案内(FIREBASE_TOKEN は非推奨のため使わない)Task 'bundleRelease' not found / 成果物が見つからない → flavor が定義されているため variant 名がタスク名・出力パスに含まれている。./gradlew app:tasks --group=build で正しい bundle<Variant> / assemble<Variant> タスク名を確認し、成果物は find で再特定するCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub kwmt/claude-plugin --plugin android-deploy-tools