Live Update または Native Build を自動選択
インストール手順と、このプラグインの完全なMarkdownガイドを含むセットアッププロンプトをコピーします。
ほとんどの Capacitor リリースは JavaScript のみで構成されているため、次のように配信します live update を. 一部の変更はネイティブの code に影響するため、以下から新しいバイナリを取得する必要があります: Capgo のビルド. このガイドでは、GitHub Actions、GitLab CI、その他のCI/CDプラットフォームで、プッシュのたびに人が判断することなく正しいパスを選ばせる方法を説明します。
Capgo は、どのパスが安全かをすでに把握しています。Webビルド後(uploadまたはNative Buildをリクエストする前に)、次を実行してください:
npx @capgo/cli@latest bundle releaseType com.example.app --channel production# → OTA ship with bundle upload# → native ship with Capgo BuildOTA は、ネイティブパッケージがすでにチャンネルで公開されているものと一致していることを意味します。 native は、プラグイン、Capacitor のバージョン、その他のネイティブ依存関係が変更されたことを意味します。OTA bundleだけでは、それらのデバイスを安全にアップデートできません。
releaseType 比較します ネイティブパッケージのメタデータ (Capacitor/Cordovaプラグインとバージョン)。これは 決して 以下のすべての変更を確認します ios/, android/、または capacitor.config.*. まずgitでこれらのパスを制限し、次に releaseType 依存関係の互換性のために使用します — 以下の例では両方を行っています。
詳細は ネイティブ互換性 詳細なルールとマニュアルは bundle compatibility 表を参照してください。
前提条件
「前提条件」セクション- Capgo アプリが登録済みで、 Capgo API キー を CI のシークレットに
CAPGO_TOKEN - Live Updates のアップロードが動作すること(
bundle upload) — 参照 CI/CD 連携 - Capgo Build の認証情報を CI に設定してください(ネイティブジョブが実行される場合) — 参照 GitHub アクション または 認証情報
- 既に存在し、本番環境と一致するチャンネル(例では
production) - のチャンネル
metadata戦略により、すべての upload が--auto-min-update-version(初回のみ):
npx @capgo/cli@latest channel set production com.example.app --disable-auto-update metadataパイプラインのあるべき動作
「パイプラインはどう動作すべきか」セクションflowchart TD A[Push / merge] --> B[Install + web build] B --> C["bundle releaseType"] C -->|OTA| D["bundle upload"] C -->|native| E["build request iOS + Android"] E --> F[Store / TestFlight / Play]
- 通常通り Web アセットを build する。
- コミットが触れる場合
ios/,android/、またはcapacitor.config.*、ネイティブパスを強制します。 - それ以外の場合は Capgo に
releaseTypeコミットがOTAセーフかどうかを尋ねます。 - もし
OTAのときは、~でアップロードしてください--fail-on-incompatibleと--auto-min-update-version. - もし
native、Capgo Buildを実行し、対応するbundleをアップロードして--auto-min-update-version、チャンネルのネイティブメタデータが更新されるようにします。実行してください。 決して 使用する--fail-on-incompatibleそのベースラインのアップロードにおいて、新しい Native Build パッケージは異なるものである必要があります。詳細は Native + OTA Channel のワークフローを ご覧ください。チャンネルレベルの FAQ も用意しています。
GitHub アクション
「GitHub アクション」というタイトルのセクションネイティブパスを制限し、次に以下で分岐させるワークフローがあります: releaseType:
name: Capgo Release
on: push: branches: [main]
jobs: decide: runs-on: ubuntu-latest outputs: release_type: ${{ steps.verdict.outputs.type }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm'
- run: npm ci - run: npm run build
- name: Decide OTA vs native id: verdict env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | BEFORE="${{ github.event.before }}" if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then BEFORE="$(git rev-parse HEAD~1 2>/dev/null || echo '')" fi if [ -z "$BEFORE" ] || git diff --name-only "$BEFORE" "${{ github.sha }}" \ | grep -qE '^(ios/|android/|capacitor\.config\.)'; then TYPE=native echo "Native path/config changed (or no prior commit) — forcing native" else TYPE=$(npx @capgo/cli@latest bundle releaseType com.example.app --channel production | tr -d '[:space:]') fi echo "type=$TYPE" >> "$GITHUB_OUTPUT" echo "Capgo release type: $TYPE"
live_update: needs: decide if: needs.decide.outputs.release_type == 'OTA' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - name: Upload live update env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | npx @capgo/cli@latest bundle upload com.example.app \ --channel production \ --fail-on-incompatible \ --auto-min-update-version
native_build: needs: decide if: needs.decide.outputs.release_type == 'native' runs-on: ubuntu-latest strategy: fail-fast: false matrix: platform: [ios, android] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - run: npx cap sync ${{ matrix.platform }} - name: Capgo Build ${{ matrix.platform }} env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | npx @capgo/cli@latest build request com.example.app \ --platform ${{ matrix.platform }} \ --build-mode release
native_bundle: needs: [decide, native_build] if: needs.decide.outputs.release_type == 'native' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - name: Upload bundle for new native baseline env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | # Channel must already be on metadata (see Prerequisites above) npx @capgo/cli@latest bundle upload com.example.app \ --channel production \ --auto-min-update-version置換する com.example.app また、以下のドキュメントに従って署名用のシークレットを設定してください: GitHub による Capgo Build 用のアクション.
GitLab CI
「GitLab CI」セクションGitLabは、 rules pipelineが作成されたときに評価を行います。そのため、シェルスクリプトを含むブランチは if 単一のデプロイジョブ内(または、 動的な子パイプラインを生成して 個別の Native Build マトリックスジョブが必要な場合):
image: node:24
stages: - build - deploy
variables: APP_ID: com.example.app CHANNEL: production
build_web: stage: build script: - npm ci - npm run build artifacts: paths: - dist/ - node_modules/ expire_in: 1 hour only: - main
deploy: stage: deploy needs: [build_web] script: - | BEFORE="${CI_COMMIT_BEFORE_SHA:-}" if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then BEFORE="$(git rev-parse HEAD~1 2>/dev/null || echo '')" fi if [ -z "$BEFORE" ] || git diff --name-only "$BEFORE" "$CI_COMMIT_SHA" \ | grep -qE '^(ios/|android/|capacitor\.config\.)'; then TYPE=native else TYPE=$(npx @capgo/cli@latest bundle releaseType "$APP_ID" --channel "$CHANNEL" | tr -d '[:space:]') fi echo "Capgo release type: $TYPE" if [ "$TYPE" = "OTA" ]; then npx @capgo/cli@latest bundle upload "$APP_ID" \ --channel "$CHANNEL" \ --fail-on-incompatible \ --auto-min-update-version elif [ "$TYPE" = "native" ]; then npx cap sync npx @capgo/cli@latest build request "$APP_ID" --platform ios --build-mode release npx @capgo/cli@latest build request "$APP_ID" --platform android --build-mode release npx @capgo/cli@latest bundle upload "$APP_ID" \ --channel "$CHANNEL" \ --auto-min-update-version else echo "Unexpected release type: $TYPE" >&2 exit 1 fi only: - main保存: CAPGO_TOKEN および Capgo Build の署名変数は、マスク/保護された CI/CD 変数として保存してください。
その他のCIプラットフォーム
「Other CI Platforms」セクション同じ3つのステップがどこでも利用可能です:
| ステップ | コマンド |
|---|---|
| 結論 | npx @capgo/cli@latest bundle releaseType APP_ID --channel production |
| OTAパス | npx @capgo/cli@latest bundle upload APP_ID --channel production --fail-on-incompatible --auto-min-update-version |
| Nativeパス | npx @capgo/cli@latest build request APP_ID --platform ios (または android) --build-mode release |
シェルの終了コード / stdout をプラットフォームの条件分岐にマッピングします(または、シェルを使う単一ジョブのままにして if、上記のGitLabのように):
- Azure Pipelines — スクリプトステップで出力変数を設定し、それを使用します
condition: eq(variables['releaseType'], 'OTA') - Bitbucket Pipelines — 書き込む
RELEASE_TYPE=…まで$BITBUCKET_PIPELINES_VARIABLES_PATH, 以下で宣言しますoutput-variables、そして後続のステップを分岐させるにはcondition: state: RELEASE_TYPE == "OTA"(ファイルアーティファクトだけではcondition) - CircleCI —
whenは設定コンパイル時に評価されるため、ランタイムシェルで分岐してくださいif(または dynamic config / continuation)、workspace の値ではなくwhen - Jenkins — stdout を環境変数にキャプチャして使用します
when { environment name: 'RELEASE_TYPE', value: 'OTA' }
パスフィルター(任意の高速化)
「Paths Filters (オプションの高速化)」セクションPath filters はコスト最適化であり、Capgo チェックの代替ではありません。壊れやすい許可リストを維持するより、ドキュメント専用のパスを除外することを推奨します — Web ビルドは多くの場合、次にも依存します vite.config.*, tsconfig*.json、およびフレームワーク設定ファイル:
on: push: branches: [main] paths-ignore: - '**.md' - 'docs/**' - '.github/**'代わりにallowlistを使用する場合は、WebおよびNative Buildが読み取るすべての入力を含めてください。単に src/ と package.json.
Native判定後
「Native Verdictのあと」セクションCIがnativeを選択した場合:
- Capgo Buildは署名済みバイナリを生成し、TestFlightやPlayへ提出可能です(詳細は 設定).
- 対応するJS bundleを次を使用してuploadしてください:
--auto-min-update-version(metadata strategy)を使用することで、channelに新しいnativeパッケージが記録されます。そうしないと、次にJSのみをcommitしても、依然としてnative. - ユーザーが新しいバイナリをインストールすると、その後のJavaScriptのみのcommitは
OTAを再度呼び出してください。