Capacitor アプリの CI/CD セットアップは複雑で、時間もかかりがちです。押さえておきたいポイントは次のとおりです:
新規ビルドにはこちらを推奨:Capgo Build
現在は以下を使用することを推奨しています: Capgo CLI を使用した Capgo Build ネイティブ Capacitor ビルド用。 このFastlaneガイドは、既存のGitHub Actionsパイプラインを運用しているチーム向けです。新規のAndroidビルドには、FastlaneやGradleランナー、キーストア、アップロードスクリプトの保守が不要になるCapgo CLIの使用を推奨します。
前提条件
始める前に、以下をセットアップする必要があります:
- 管理者権限を持つGitHubアカウント
- 適切な署名でGoogle Play Storeに公開済みのアプリ
- Androidの署名キーおよびキーストアファイル
- Play StoreのAPIが有効なGoogle Cloud Consoleプロジェクト
- 適切な権限を持つサービスアカウント
- GitHub Actionsワークフローの理解
- Fastlaneの設定に関する知識
- パイプラインを保守・デバッグする時間
Capgo によるCI/CD向けCapgo Build
Fastlane、Gradle runner、keystore、アップロードスクリプトの管理から解放されます。 Capgo のビルド 既存のCI/CDパイプラインから、署名済みのAndroid Native Buildを実行できます:
- パイプラインと連携: Webビルド後に、GitHub Actions、GitLab CI、Jenkins、またはローカルスクリプトから Capgo Build をトリガーし、
npx cap sync. - CIシークレットで署名: Androidのkeystore、key alias、パスワード、Play ConsoleのサービスアカウントJSONは、そのまま自身のCI secretsで管理可能です。
- ネイティブランナーの運用不要: Capgo Buildはメンテナンス済みのAndroidビルド環境を提供するため、SDK イメージやGradleのキャッシュ問題、Fastlaneの管理に悩まされることはありません。
- アーティファクトと提出: QA用の署名済みアーティファクトをダウンロードするか、Capgo CLI からリリースビルドを提出できます。
料金プラン
- Capgo プランは月額$12から
- OTAアップデートと月間約15回のNative Buildを含む
- 追加のビルド時間はクレジットで分単位課金されます
手動セットアップガイド
手順は以下の通りです:
GitHub Actions の料金プラン

GitHub Actions では、リポジトリの種類に応じて無料の実行時間が提供されます:
- 公開リポジトリ:2,000分/月
- 非公開リポジトリ:2,000分/月 (Linux runner)
プライベートプロジェクトの場合、コストは約$0.008/分です。標準的なビルドには3〜5分かかります。
手動セットアップ手順
- Android Keystoreの作成
- Google Play サービスアカウントの設定
- Fastlaneの設定
- GitHub のシークレットを設定
- GitHub Actions ワークフローの作成
1. Android Keystoreの作成
Androidアプリの署名と公開を行うには、まずkeystoreファイルを作成する必要があります。これは初回のみの作業です。
keytoolでKeystoreを生成
ターミナルで以下のコマンドを実行してください:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
以下の情報の入力を求められます:
- Keystore パスワード: 強力なパスワードを設定してください(後ほど
KEYSTORE_STORE_PASSWORD) - Key パスワード: 強力なパスワードを設定してください(後ほど
KEYSTORE_KEY_PASSWORD) - 氏名、組織名など: 詳細を入力してください
重要な注意事項
-
これらの値を安全に保存してください:
- Keystore ファイルの場所(例:
my-release-key.keystore) - Key エイリアス(例:
my-key-alias) - 後ほどKEYSTORE_KEY_ALIAS - Keystore パスワード - 後ほど
KEYSTORE_STORE_PASSWORD - キーパスワード - 以下で使用します:
KEYSTORE_KEY_PASSWORD
- Keystore ファイルの場所(例:
-
keystoreファイルをバックアップする紛失すると、公開済みのアプリを更新できなくなります
-
機密を保持するkeystoreファイルをgitにコミットしないでください
-
安全に保管する安全な場所に複数のバックアップを作成してください
代替案:既存のKeystoreを使用する
既にアプリを公開している場合は、最初に使用したkeystoreを必ず使用する必要があります。場所は以下の通りです:
- アプリを最初にビルドしたローカルマシン内
- Play Console → 設定 → アプリの署名(Google Play アプリ署名を使用している場合)
2. Google Play サービスアカウントの設定
GitHub ActionsからGoogle Playへビルドをuploadするには、サービスアカウントが必要です。
ステップ 2.1: Google Cloud プロジェクトの作成
- 以下に移動します: Google Cloud Console
- 新規プロジェクトを作成するか、既存のプロジェクトを選択します
- プロジェクトIDをメモしてください
ステップ 2.2: Google Play Developer API の有効化
- Google Cloud Consoleで以下に移動します: APIとサービス → ライブラリ
- 「Google Play Android Developer API」を検索
- クリック 有効にする
ステップ 2.3: サービスアカウントの作成
- 以下に移動します: IAM と管理 → サービスアカウント
- クリック サービスアカウントを作成
- 詳細を入力してください:
- 名前:
github-actions-uploader - 説明: “GitHub のビルドを upload するためのサービスアカウント”
- 名前:
- クリック 作成して続行
- 今はロールの割り当てをスキップ(クリック 続行、次に 完了)
ステップ 2.4: サービスアカウントキーの作成
- 新しく作成したサービスアカウントをクリック
- 以下に移動します: キー タブ
- クリック キーを追加 → 新しいキーを作成
- 選択: JSON 形式
- クリック 作成します
- JSONファイルがダウンロードされます — 安全な場所に保存してください, 後ほど使用します
ステップ 2.5: Play Console でのアクセス権限付与
- 以下に移動します: Google Play Console
- 以下に移動します: セットアップ → API へのアクセス
- 未満 サービスアカウント、クリックして アクセス権を付与 サービスアカウントに
- 「 アプリの権限 」タブでアプリを追加
- 「 アカウントの権限 以下の権限を付与してください:
- アプリ情報の閲覧および一括レポートのダウンロード(読み取り専用)
- アプリの下書き作成、編集、削除
- テストトラックへのアプリリリース
- 本番環境、除外トラック、その他のトラックへのアプリリリース
- クリック ユーザーを招待
- クリック 招待を送信
ステップ 2.6: JSONキーの検証
ダウンロードしたJSONファイルは以下のようになります:
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "...",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "github-actions-uploader@your-project-id.iam.gserviceaccount.com",
"client_id": "...",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "..."
}
GitHub の secrets 設定ステップで、これを base64 に変換します。
3. Fastlane のセットアップ
から、 fastlane プロジェクトのルートにフォルダを作成し、 Fastfile 以下の内容で作成します:
default_platform(:android)
KEYSTORE_KEY_ALIAS = ENV["KEYSTORE_KEY_ALIAS"]
KEYSTORE_KEY_PASSWORD = ENV["KEYSTORE_KEY_PASSWORD"]
KEYSTORE_STORE_PASSWORD = ENV["KEYSTORE_STORE_PASSWORD"]
platform :android do
desc "Deploy a beta version to the Google Play"
private_lane :verify_changelog_exists do |version_code: |
changelog_path = "android/metadata/en-US/changelogs/#{version_code}.txt"
UI.user_error!("Missing changelog file at #{changelog_path}") unless File.exist?(changelog_path)
UI.message("Changelog exists for version code #{version_code}")
end
private_lane :verify_upload_to_staging do |version_name: |
UI.message "Skipping staging verification step"
end
lane :beta do
keystore_path = "#{Dir.tmpdir}/build_keystore.keystore"
File.write(keystore_path, Base64.decode64(ENV['ANDROID_KEYSTORE_FILE']))
json_key_data = Base64.decode64(ENV['PLAY_CONFIG_JSON'])
# Get previous build number and increment
previous_build_number = google_play_track_version_codes(
package_name: ENV['DEVELOPER_PACKAGE_NAME'],
track: "internal",
json_key_data: json_key_data,
)[0]
current_build_number = previous_build_number + 1
sh("export NEW_BUILD_NUMBER=#{current_build_number}")
# Build the app
gradle(
task: "clean bundleRelease",
project_dir: 'android/',
print_command: false,
properties: {
"android.injected.signing.store.file" => "#{keystore_path}",
"android.injected.signing.store.password" => "#{KEYSTORE_STORE_PASSWORD}",
"android.injected.signing.key.alias" => "#{KEYSTORE_KEY_ALIAS}",
"android.injected.signing.key.password" => "#{KEYSTORE_KEY_PASSWORD}",
'versionCode' => current_build_number
})
# Upload to Play Store
upload_to_play_store(
package_name: ENV['DEVELOPER_PACKAGE_NAME'],
json_key_data: json_key_data,
track: 'internal',
release_status: 'completed',
skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
end
4. GitHub Secrets の設定
keystore とサービスアカウントの JSON が用意できたら、それらを GitHub に安全に保存する必要があります。
ステップ 4.1: GitHub Secrets へのアクセス
- GitHub のリポジトリに移動し、
- クリック 設定 → シークレットと変数 → アクション
- クリック 新しいリポジトリシークレット
ステップ 4.2: 必要なシークレットを追加する
以下のシークレットを一つずつ追加してください:
PLAY_CONFIG_JSON
- ステップ 2.4 でダウンロードしたサービスアカウントの JSON ファイルを用意し、
- これを base64 に変換します:
macOS/Linux の場合:
base64 service_account_key.json | pbcopy
Windows (PowerShell) の場合:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("service_account_key.json")) | Set-Clipboard
- 以下の名前で新しいシークレットを作成し、
PLAY_CONFIG_JSONbase64 文字列を貼り付けます
ANDROID_KEYSTORE_FILE
- keystoreをbase64に変換します:
macOS/Linuxの場合:
base64 my-release-key.keystore | pbcopy
Windows (PowerShell)の場合:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("my-release-key.keystore")) | Set-Clipboard
- 以下の名前で新しいsecretを作成し、
ANDROID_KEYSTORE_FILEbase64文字列を貼り付けてください:
KEYSTORE_KEY_ALIAS
keystore生成時に使用したkey aliasで新しいsecretを作成します(例: my-key-alias)
KEYSTORE_KEY_PASSWORD
keystore生成時に設定したkey passwordで新しいsecretを作成します
KEYSTORE_STORE_PASSWORD
keystore生成時に設定したkeystore passwordで新しいsecretを作成します
DEVELOPER_PACKAGE_NAME
アプリのパッケージ名を使用して、新しいSecretを作成します(例: com.example.app)
パッケージ名は、以下から確認できます: android/app/build.gradle 内の applicationId
ステップ 4.3: すべてのSecretを確認
以下の6つのSecretが設定されていることを確認してください:
- ✅ PLAY_CONFIG_JSON
- ✅ ANDROID_KEYSTORE_FILE
- ✅ KEYSTORE_KEY_ALIAS
- ✅ KEYSTORE_KEY_PASSWORD
- ✅ KEYSTORE_STORE_PASSWORD
- ✅ DEVELOPER_PACKAGE_NAME
5. GitHub Actions Workflowの作成
作成します .github/workflows/build-upload-android.yml:
name: Build and Deploy Android App
on:
push:
tags:
- '*'
jobs:
build_android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Cache Gradle
uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build app
run: npm run build
- name: Sync Capacitor
run: npx cap sync
- name: Setup Java
uses: actions/setup-node@v5
with:
distribution: 'zulu'
java-version: '17'
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: Run Fastlane
uses: maierj/fastlane-action@v3.1.0
env:
PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}
ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
DEVELOPER_PACKAGE_NAME: ${{ secrets.DEVELOPER_PACKAGE_NAME }}
KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
with:
lane: android beta
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: android-release
path: ./android/app/build/outputs/bundle/release/app-release.aab
retention-days: 10
仕組み
- Gitタグを作成してワークフローを起動
- GitHub Actionsがアプリをビルド
- FastlaneがGoogle Playのベータチャネルへアップロード
- アプリが自動的にアップデートされます
ビルド時間とコスト
- ビルド時間: 3〜5分
- プライベートリポジトリのコスト: 1ビルドあたり約$0.04
- オープンソースプロジェクトは無料
関連記事
CI/CDセットアップガイド
- GitHub ActionsによるCapacitor iOS Buildの自動化 - iOS CI/CD環境の完全セットアップ
- GitHub ActionsによるCapacitor Androidの自動ビルドとリリース - CI/CDパイプラインの完全チュートリアル
- GitHub Actionsで開発用と本番用のBuildを管理する - 環境管理について
その他のCI/CDプラットフォーム
- GitLab CIでのBuild - Android向けのGitLab代替案
- CodeMagicでのBuild - CodeMagicセットアップガイド
Live Updateとデプロイ
- Capgo Live Updates ドキュメント - アプリにOTAアップデートを追加
- Capgo によるCI/CD連携 - パイプラインにLive Updatesを統合
リソース
GitHub actions を使った Capacitor Android 自動ビルドの先へ
使用している場合 GitHub actions による Capacitor Android ビルドの自動化 CI/CD自動化を計画するには、次と連携してください Capgo での CI/CD 設定 Capgo CI/CDでのプロダクトワークフローについては、 Capgo Native Build Capgo Native Buildsでのプロダクトワークフローについては、 Capgo インテグレーション Capgo インテグレーションでのプロダクトワークフロー向けに、 CI/CD 連携 CI/CD Integrationの実装詳細については、 GitHub Actions 連携 GitHub Actions Integrationの実装詳細については。