メインコンテンツへスキップ

バージョンターゲティング

各Native Buildのバージョンに、実行可能なbundleのみを配信

ユーザーはストアから自身のペースでアップデートを行うため、アプリの複数のNative Buildが同時に稼働することになります。Capgoは各bundleのNative依存関係をチェックし、バージョンルールに基づいてアップデートを制限。各Native Buildをそれぞれのchannelへルーティングすることも可能です。

upload前にネイティブ互換性を確認

bundleの互換性チェックは、プロジェクト内のネイティブパッケージとチャンネルで配信中のbundleを比較します。CIで --fail-on-incompatible を追加すると、新しいbinaryが必要なuploadを停止できます。

ネイティブ互換性ドキュメント

すべてのbundleにネイティブバージョンの下限を設定

チャンネルをmetadata strategyに設定し、--auto-min-update-version を付けてuploadします。ネイティブバージョンがbundleの下限を下回るデバイスは、そのbundleをスキップして現在のbundleを維持します。

バージョンターゲティングのドキュメント

semverラインをまたぐupdateをブロック

--disable-auto-update major、minor、patch を指定すると、ネイティブバージョンのライン外のbundleをデバイスが受け取らないようにできます。これらのルールはバージョン番号だけを比較し、ネイティブの code は検査しません。

Updateの種類とバージョンブロック

ネイティブバージョンごとのチャンネル管理

各Native BuildのCapacitor設定で、v2やv3などのdefaultChannelを指定します。各ラインが独自のbundleを持ち、古いラインは最後に動作したbundleを維持できます。

バージョンターゲティングのドキュメント

仕組み

複数のネイティブバージョンを運用するチームによるCapgoの活用方法

live updateレーンとストアレーンを並行稼働させるCIセットアップ。以下のコマンドはすべてCapgo CLIドキュメントに基づいています。

  1. コミットにNative Buildが必要か確認する

    build neededは、ネイティブパッケージとチャンネルを比較します。ストアリリースが必要な場合はyesと出力してcode 1で終了し、live updateで十分な場合はnoと出力します。

    npx @capgo/cli@latest build needed com.example.app --channel production
    build neededのリファレンス
  2. メタデータ戦略によるチャンネルの切り替え

    これは一度設定するだけです。以降、各bundleに最小ネイティブバージョンが付与され、それ未満のデバイスはbundleをスキップします。

    npx @capgo/cli@latest channel set production com.example.app \
      --disable-auto-update metadata
    バージョンターゲティングのドキュメント
  3. 日々のLive Updateをアップロード

    すべてのアップロードで --auto-min-update-version を有効にします。--fail-on-incompatible は、bundle に channel 未対応の Native code が必要な場合にジョブを停止します。

    npx @capgo/cli@latest bundle upload --channel production \
      --auto-min-update-version \
      --fail-on-incompatible
    ネイティブ互換性ドキュメント
  4. 新しいNativeリリース用のbundleをアップロード

    新しいバイナリをリリースする際は、--fail-on-incompatible なしで bundle をアップロードします。Capgo が下限を引き上げるため、古いビルドはスキップされ、その後のチェックでは新しい Native パッケージと比較されます。

    npx @capgo/cli@latest bundle upload --channel production \
      --auto-min-update-version
    Native と OTA チャネルのワークフロー

Appflow移行

Ionic Appflowからの移行をご検討中ですか?

Appflowでは、Live Updateをネイティブバージョンに自動的に紐付けていました。Capgoでは、チャンネルとバージョンルールを使用して同様の結果を実現できます:

  1. v1やv2のように、ネイティブのラインごとにチャンネルを作成します。
  2. 各Native BuildのCapacitor設定で、defaultChannelを対応するチャンネルに設定します。
  3. 各bundleを、ビルド対象となったネイティブラインのチャンネルにuploadします。
  4. upload時に--auto-min-update-versionを有効にしておけば、より新しいネイティブcodeを必要とするbundleが、古いビルドをスキップできるようになります。
Appflow移行ガイド
ネイティブラインごとのチャンネル
// capacitor.config.ts in your 2.x native builds
plugins: {
  CapacitorUpdater: {
    defaultChannel: 'v2',
  },
},

# ship a fix to 2.x users only
npx @capgo/cli@latest bundle upload --channel v2 \
  --auto-min-update-version

# 1.x devices stay on their channel's current bundle

よくあるユースケース

新しいNative Pluginの導入

2.0のバイナリにカメラプラグインを追加した場合、--auto-min-update-version を使用してbundleをアップロードすれば、ユーザーが2.0をインストールするまで1.xのデバイスは更新をスキップします。

ネイティブ互換性ドキュメント

段階的なリリース

--rollout を使用して特定のチャネルの一部にbundleを配信し、インストール状況や失敗データを監視した上で、本番展開するかロールバックするかを判断できます。

段階的ロールアウトのドキュメント

旧バージョンの廃止

v1チャネルへのアップロードを停止します。v1のデバイスは最後に動作したbundleを維持し、v2のデバイスは引き続きアップデートを受け取ります。

バージョンターゲティングのドキュメント

各Nativeバージョンが独自のチャネルに紐付けられます

3つのNativeバージョンが稼働している場合の構成例。

  • Native 3.x
    v3
    新規bundle
  • Native 2.x
    v2
    修正のみ
  • Native 1.x
    v1
    新規bundleなし

v3には新機能、v2には修正を配信し、v1には配信しません。v1のデバイスは最後に動作したbundleを保持します。

Capacitor で構築されたアプリ

公開アプリは新旧のNativeバージョンをサポートする必要があります

行政、ヘルスケア、予測アプリなどは、古いAndroidバージョンや異なる世代のデバイスをサポートする必要がある場合があります。Version targetingを活用すれば、全員に一律のアップデートパスを強制することなく、各Native Buildを最新の互換性のあるweb bundleに保つことができます。

e-Título アプリのアイコン ソーシャル

e-Título

幅広いデバイス互換性が求められる、市民認証アプリ。

Google Play インストール数
5490万
ストア評価
4.8
Conecte SUS アプリのアイコン 医療

SUSを接続

古いネイティブシェルと新しいネイティブシェルで、異なるWeb bundleが必要になるヘルスケアアプリ。

Google Play インストール数
2770万
ストア評価
4.6
Windy.com - 天気予報アプリのアイコン 天気

Windy.com - 天気予報

デバイスの性能やマップのパフォーマンスがバージョンによって異なる天気アプリ。

Google Play インストール数
32.9M
ストア評価
4.7

導入実績

Capgo を活用するチームの声

5.0/5 開発チームによる評価 9,400+ チーム数 レビューを読む

no-tone @ Webincode

Webincode 開発者

「Device IDを特定のグループに追加して、そのグループにだけ変更をプッシュできるのは本当に助かります。」

Nate van Jole

CTO, プライベート

「セットアップは1日もかかりませんでした。チャンネルベースのロールアウトのおかげで、本番ユーザーに配信する前に自分のデバイスでテストできます。」

Sergiu Sのポートレート

Sergiu S

リードデベロッパー、drivolino GmbH

“Capgo Capacitor Updater pluginのおかげで、アップデートの配信方法が完全に変わりました。以前は何日もかかっていた作業が、今ではわずか数分で終わります。”

よくある質問

実際に使われているバージョンに関する質問

ストアアプリの更新タイミングがユーザーごとに異なるチーム向けです。

ネイティブアプリを一度も更新しないユーザーはどうなりますか?

ユーザーには、自分のネイティブバージョンと互換性のあるbundleが引き続き配信されます。metadata戦略では、最小ネイティブバージョンがユーザーのバージョンより高いbundleはスキップされ、現在のbundleが維持されます。

バージョンターゲティングのドキュメント

--disable-auto-updateはクラッシュを防ぐのに十分ですか?

いいえ。バージョンルールはバージョン番号のみを比較するため、マイナーまたはパッチリリースに含まれるネイティブの変更は配信されてしまいます。ネイティブパッケージをチェックする--fail-on-incompatibleまたは--auto-min-update-versionを使用してください。

ネイティブ互換性ドキュメント

CIは変更がストアリリースを必要とするかどうかをどう判断しますか?

channelに対してbuild neededまたはbundleのreleaseTypeを実行します。どちらもネイティブパッケージのmetadataを比較します。ios/、android/、またはcapacitor.config配下のすべての編集を検知できるわけではないため、git側でもこれらのパスをゲートしてください。

CIでOTAかNative Buildかを選択

Ionic Appflowから移行予定です。バージョンが一致したアップデートを維持できますか?

はい。defaultChannelを使用してネイティブラインごとにチャンネルを作成するか、--auto-min-update-versionを使用したメタデータ戦略を利用してください。Appflow移行ガイドでセットアップ手順を確認できます。

Appflow移行ガイド

互換性のないbundleを既に配信してしまった場合はどうすればよいですか?

チャンネルを履歴から最後に互換性があったbundleへ戻すか、組み込みのbundleを強制し、Native Buildを配信してください。notifyAppReady()は起動に失敗したbundleをロールバックしますが、互換性のあるネイティブ code の代わりになるものではありません。

ロールバックのドキュメント

各ネイティブバージョンが実行可能なbundleを維持する

14日間の無料トライアル中に、メタデータ戦略とCIでの互換性チェックをセットアップしましょう。クレジットカードの登録は不要です。