コンテンツに進む

ページ/エリア: Capgo マーケティング ウェブサイト。役割: ウェブサイト コピー文句。見つける場所: コンポーネント Hero.astro。メッセージ キー `hero_subtitle_v2` (Hero Subtitle V2)。

このガイドでは、ユーザーのネイティブアプリのバージョンに基づいて、最新の互換性のあるバンドルを自動的にユーザーに提供する方法について説明します。 Ionic AppFlowのアプローチと似たようにLive Update

code

API

Capgoのバージョン対象システムは、次のことを可能にします。

  • CLI npm
  • bun バージョン対象化の重要性 (特にAppFlowユーザー向け)
  • バージョン対象化の重要性 (特にAppFlowユーザー向け)のセクション Ionic AppFlowの場合
  • AppFlowの場合、ユーザーが互換性のある更新のみを受け取ることを保証することは非常に重要です。 AppFlowは自動的に__CAPGO_KEEP_0__バンドルをネイティブアプリのバージョンとマッチさせ、互換性のないJavaScriptが古いネイティブ__CAPGO_KEEP_1__に配信されるのを防ぎました。

__CAPGO_KEEP_0__は同じ安全性の保証を提供し、追加の機能もあります。

互換性のないアプリバージョンに到達するのを防ぐ

複雑なロジックなしで複数のアプリバージョンを管理する 特定のユーザーセグメントにアップデートを順調に展開する, you know how critical it is to ensure users receive only compatible updates. AppFlow automatically matched live update bundles to native app versions, preventing incompatible JavaScript from being delivered to older native code.

Capgoは同じ安全性の保証を提供します。バージョン対象化

  • バージョンマッチングのより細かい制御
  • 複数の戦略(チャネル、semver、ネイティブ制約)
  • バージョン分布のより良い可視性
  • APIとCLIの制御はダッシュボード管理と並行して行われます

このアプローチは、特に以下のシナリオで有効です。

  • ユーザーがアプリの異なるメジャーバージョン (例:v1.x、v2.x、v3.x) を使用している場合
  • 破壊的な変更をロールアウトする際に、バックワード互換性を維持する必要がある場合
  • 新しいバンドルが古いネイティブcodeを破壊しないようにする場合
  • ユーザーを一つのバージョンから別のバージョンへ段階的に移行する場合
  • AppFlowから移行し、同じ更新の安全性を維持したい場合 これはどのように機能するか

Native Buildのしくみ

How It Works

Capgoは、ユーザーに互換性のあるアップデートをマッチングするために、多層アプローチを使用します:

  1. ネイティブバージョン制約:互換性のないネイティブバージョンに配布されるバンドルを防止します
  2. チャンネルベースのルーティング:異なるアプリバージョンを異なるアップデートチャンネルにルーティングします
  3. シーケンスバージョン制御:メジャー/マイナー/パッチ境界を自動的にアップデートをブロックします
  4. デバイスレベルオーバーライド:特定のデバイスまたはユーザーグループをターゲットします

バージョンマッチングフロー

バージョン対象設定フロー
graph TD
A[User Opens App] --> B{Check Device Override}
B -->|Override Set| C[Use Override Channel]
B -->|No Override| D{Check local plugin channel}
D -->|setChannel value| E[Use local setChannel channel]
D -->|No local channel| F{Check defaultChannel in App}
F -->|Has defaultChannel| G[Use App's defaultChannel]
F -->|No defaultChannel| H[Use Cloud Default Channel]
C --> I{Check Version Constraints}
E --> I
G --> I
H --> I
I -->|Compatible| J[Deliver Update]
I -->|Incompatible| K[Skip Update]

チャンネルベースのバージョンルーティング: ストラテジー1

チャンネルベースのバージョンルーティング: ストラテジー1

この 推奨アプローチ メジャーバージョンアップデートと重大な変更の管理に適した方法です。AppFlowの配信モデルに似ています。

  • App v1.x (100,000ユーザー) → production チャンネル
  • App v2.x (50,000ユーザー向けの重大な変更)→ v2 チャンネル
  • App v3.x (10,000のベータユーザー)→ v3 チャンネル

Step 1: 各主バージョンごとにチャンネルを設定する

「Step 1: 各主バージョンごとにチャンネルを設定する」のセクション
// capacitor.config.ts for version 1.x builds
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production', // or omit for default
}
}
};
export default config;
// capacitor.config.ts for version 2.x builds
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'v2', // Routes v2 users automatically
}
}
};
// capacitor.config.ts for version 3.x builds
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'v3', // Routes v3 users automatically
}
}
};

Step 2: Channel の作成

Step 2: Channel の作成
ターミナル画面
# Create channels for each major version
npx @capgo/cli channel add production
npx @capgo/cli channel add v2
npx @capgo/cli channel add v3
# Enable self-assignment so apps can switch channels
npx @capgo/cli channel set production --self-assign
npx @capgo/cli channel set v2 --self-assign
npx @capgo/cli channel set v3 --self-assign

Step 3: バージョンに特化した Bundle のアップロード

Step 3: バージョンに特化した Bundle のアップロード
ターミナル画面
# For v1.x users (from v1-maintenance branch)
git checkout v1-maintenance
npm run build
npx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)
git checkout main
npm run build
npx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)
git checkout beta
npm run build
npx @capgo/cli bundle upload --channel v3
  • ゼロ code 変更 - チャネルルーティングは自動で行われます
  • 明確な分離 - 各バージョンには独自のアップデートパイプラインがあります
  • 柔軟なターゲット - 特定のバージョングループにアップデートをプッシュします
  • 安全なロールアウト - 不相応のバージョンに破壊的な変更は届きません

戦略2:シーケンスバージョニングコントロール

「戦略2:シーケンスバージョニングコントロール」セクション

Capgoの組み込み セマンティックバージョニングの制御を使用して バージョン境界を超える更新を防止します。

メジャーバージョンを跨る自動更新を無効化

セクション「メジャーバージョンを跨る自動更新を無効化」
ターミナル画面
# Create a channel that blocks major version updates
npx @capgo/cli channel add stable
npx @capgo/cli channel set stable --disable-auto-update major

この設定は次のことを意味します。

  • アプリケーション版 1.2.3 はバージョン 1.9.9
  • アップデートを受信します。 ユーザーは バージョンを受け取る 2.0.0 自動的に
  • 古いネイティブ code への破壊的な変更が到達するのを防ぐ
  • 比較は送信されたネイティブのベースラインを使用する version_build
ターミナルウィンドウ
# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)
npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (1.2.3 won't get 1.2.4)
npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updates
npx @capgo/cli channel set stable --disable-auto-update none

各パッケージで最小限のネイティブ アプリ バージョン (min_update_version) を指定して、Capgo は、ネイティブ バイナリが新しいバージョンであるデバイスにのみ配信するようにします。

この戦略は、チャンネル メタデータ 戦略 (--disable-auto-update metadata) を使用します。 --min-update-version または --auto-min-update-version アップロード時に。ここではありません --native-version CLI フラグ。

チャンネルでメタデータのターゲット設定を有効にします。

「チャンネルでメタデータのターゲット設定を有効にする」セクション
ターミナル画面
# one-time: require min_update_version metadata on uploads to this channel
npx @capgo/cli@latest channel set production --disable-auto-update metadata

アップロード時にネイティブバージョンを最低限に設定します。

「アップロード時にネイティブバージョンを最低限に設定する」セクション

バンドルをアップロードする際に、受信可能な最低限のネイティブバージョンを指定します:

ターミナル画面
# This bundle requires native version 2.0.0 or higher
npx @capgo/cli@latest bundle upload \
--channel production \
--min-update-version "2.0.0"

または、ネイティブパッケージの互換性からネイティブバージョンをCapgoで設定します:

ターミナル画面
npx @capgo/cli@latest bundle upload \
--channel production \
--auto-min-update-version
  1. バンドル内のデバイスのネイティブベースラインがバンドルのバージョンよりも下の場合、更新はスキップされます。バンドルのバージョンまたはそれ以上のバージョンのデバイスのみが更新を受け取ります。詳細は

    ターミナル画面
    # Bundle needs Camera plugin added in v2.0.0
    npx @capgo/cli@latest bundle upload \
    --channel production \
    --min-update-version "2.0.0"
  2. ネイティブ API の変更

    ターミナル画面
    # Bundle uses new Capacitor 6 APIs
    npx @capgo/cli@latest bundle upload \
    --channel production \
    --min-update-version "3.0.0"
  3. 段階的な移行

    ターミナル画面
    # one-time: enable metadata gating on beta
    npx @capgo/cli@latest channel set beta --disable-auto-update metadata
    # Test bundle only on latest native version
    npx @capgo/cli@latest bundle upload \
    --channel beta \
    --min-update-version "2.5.0"

ユーザーが現在のネイティブバージョンよりも古いバンドルを受け取るのを防ぐ。

チャンネル設定で有効にする

チャンネル設定で有効にする

Capgo ダッシュボードで

  1. Go to チャンネル → チャンネルを選択
  2. 有効 ネイティブの自動ダウングレードを無効にする
  3. 変更を保存

または、CLIで

ターミナル画面
npx @capgo/cli@latest channel set production --no-downgrade
  • バールトロート: バールトロート 1.2.5
  • バールトロートバト: バトロート 1.2.3
  • コンター: バールトロートに强るった。强るった。

バールトロートできおだ。

  • バールトロートに强るった。
  • バールトロートにいますに强るった。
  • バールトロートにいますに强るった。

バールトロートにいますに强るった。

バールトロートできおだ。

コンターバトロートバトできおだ。

テスト用に特定のバージョンを強制する

「テスト用に特定のバージョンを強制する」セクション
import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channel
async function assignBetaTesters() {
const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester
if (isBetaTester(userId)) {
await CapacitorUpdater.setChannel({ channel: 'v3' })
}
}

ダッシュボード デバイス オーバーライド

セクション「ダッシュボード デバイス オーバーライド」

Capgo ダッシュボードで:

  1. ここに移動する デバイス → デバイスを探す
  2. クリックする チャネルを設定する または バージョン設定
  3. 特定のチャネルまたはバンドルのバージョンに上書き
  4. デバイスは上書きされたソースからアップデートを受信します

ここでは、すべての戦略を組み合わせた完全な例を示します:

ターミナルウィンドウ
# Create production channel, then enable metadata min-version gating
npx @capgo/cli@latest channel add production
npx @capgo/cli@latest channel set production \
--disable-auto-update metadata \
--no-downgrade
capacitor.config.ts
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'production',
}
}
};

バージョン対象設定

ターミナル画面
バージョン3. アプリケーション更新 (App v2.0.0)
# Create v2 channel for new version
npx @capgo/cli@latest channel add v2
npx @capgo/cli@latest channel set v2 \
--disable-auto-update metadata \
--no-downgrade \
--self-assign
# Create git branch for v1 maintenance
git checkout -b v1-maintenance
git push origin v1-maintenance
// capacitor.config.ts for v2.0.0
const config: CapacitorConfig = {
plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground',
defaultChannel: 'v2', // New users get v2 channel
}
}
};

バージョン2. リリース中の重大な変更 (App v2.0.0)

バージョン4. 両方のバージョンに更新をプッシュする
バージョン3. アプリケーション更新 (App v2.0.0)
# Update v1.x users (bug fix)
git checkout v1-maintenance
# Make changes
npx @capgo/cli@latest bundle upload \
--channel production \
--min-update-version "1.0.0"
# Update v2.x users (new feature)
git checkout main
# Make changes
npx @capgo/cli@latest bundle upload \
--channel v2 \
--min-update-version "2.0.0"

Capgo ダッシュボードを使用して、以下を追跡します。

  • バージョン v1 と v2 のユーザー数
  • バンドルごとのバージョンごとの採用率
  • バージョンごとのエラーまたはクラッシュ

v1 の使用率が閾値以下の場合:

ターミナル画面
# Stop uploading to production channel
# Optional: Delete v1 maintenance branch
git branch -d v1-maintenance
# Move all remaining users to default
# (They'll need to update via app store)

チャンネル順位

Channel Precedence

複数のチャンネル設定が存在する場合、Capgoは次の順序で使用します。

  1. デバイスオーバーライド (ダッシュボードまたはAPI) - 最高優先度でデバイスオーバーライドUIに表示
  2. ローカルプラグインチャンネル via setChannel() - デバイス上のみ保存され、デバイスオーバーライドUIに表示されません
  3. defaultChannel capacitor.config.ts
  4. デフォルトチャネル (Cloud設定) - 最低優先度

アプリから呼び出されると、チャンネルをバックエンドと検証し、次にデバイス上でローカルに保存します。

ベストプラクティス
// ✅ Good: Each major version has explicit channel
// v1.x → production
// v2.x → v2
// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching
// All versions → production, switch manually

2. セマンティック バージョニングを使用する

セクション「2. セマンティック バージョニングを使用する」
ターミナル ウィンドウ
# ✅ Good
1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad
1.0 → 1.1 → 2 → 2.5

3. 分離されたブランチを維持する

セクション「3. 分離されたブランチを維持する」
ターミナル ウィンドウ
# ✅ Good: Separate branches per major version
main (v3.x)
v2-maintenance (v2.x)
v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions
ターミナル ウィンドウ
# one-time: create beta and enable metadata gating
# (production is set up in the complete workflow above)
npx @capgo/cli@latest channel add beta
npx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel first
npx @capgo/cli@latest bundle upload \
--channel beta \
--auto-min-update-version
# Monitor for issues, then promote to production
npx @capgo/cli@latest bundle upload \
--channel production \
--auto-min-update-version

5. バージョン分布の監視

バージョン分布の監視 (5)

ダッシュボードを定期的に確認してください:

  • ユーザーが最新のネイティブバージョンにアップグレードしていますか?
  • 古いバージョンが高トラフィックを受けている場合がありますか?
  • 古いチャンネルを非推奨にする必要がありますか?

、__CAPGO_KEEP_0__のバージョン対象化の比較 機能, here’s how Capgo’s version targeting compares:

Ionic AppFlowIonic AppFlowCapgo
バージョンベースのルーティングネイティブバージョンに基づく自動ネイティブバージョンに基づく自動 defaultChannel 複数の戦略
シーケンスバージョン基本的なサポート高度な --disable-auto-update (メジャー/マイナー/パッチ)
ネイティブバージョン制約AppFlow ダッシュボードでの手動設定組み込み --min-update-version / --auto-min-update-version メタデータチャンネルとともに
チャンネル管理ウェブUI + CLIWeb UI + CLI + API
デバイスオーバーライド制限されたデバイスレベル制御フルコントロールviaダッシュボード/API
自動ダウングレード防止はいはいvia --no-downgrade
複数バージョンメンテナンスマニュアルブランチ/チャンネル管理チャンネル優先の自動管理
自主ホスティングいいえはい (完全な制御)
バージョン分析基本バージョンごとの詳細なメトリクス

トラブルシューティング

トラブルシューティング

更新を受け取らないユーザー

更新を受け取らないユーザー

確認してください。

  1. チャンネル割り当て: デバイスが正しいチャンネルにありますか?

    const channel = await CapacitorUpdater.getChannel()
    console.log('Current channel:', channel)
  2. バージョン制約: バンドルのネイティブバージョン要件を確認してください。

    • : ダッシュボード → バンドル → 「ネイティブバージョン」列を確認してください。
  3. Semver 設定: チャンネルの設定を確認する disable-auto-update 設定

    ターミナル画面
    npx @capgo/cli channel list
  4. デバイスのオーバーライド: デバイスに手動オーバーライドがあるか確認する

    • ダッシュボード → デバイス → デバイスを検索 → チャンネル/バージョンを確認

間違ったバージョンにバンドルが配信された

バンドルが間違ったバージョンに配信された
  1. デフォルトのチャンネルを確認: 正しいチャンネルが設定されていることを確認する capacitor.config.ts
  2. バンドルアップロードを確認: 指定されたチャネルにバンドルがアップロードされたことを確認
  3. 最小更新バージョンを検査: 確認 --min-update-version (または --auto-min-update-versionチャネルが使用するバージョンが設定されていて --disable-auto-update metadata

古いバージョンに影響を与える変更

「古いバージョンに影響を与える変更」
  1. 即時修正: 影響を受けるデバイスに安全なバンドルを強制
    • ダッシュボード → デバイス → 一括選択 → バージョン設定
  2. 長期的な修正: バージョン管理チャンネルを作成し、分離されたブランチを維持する
  3. 防止: 更新をロールアウトする前に、代表的なデバイスでテストする

Ionic AppFlow から移行している場合 、バージョン対象は __CAPGO_KEEP_0__ における、改善された柔軟性とともに、非常に類似しています:, バージョン ターゲットは Capgo における Live Update と同様に機能し、より多くの柔軟性が実現されています。

概念マッピングのセクション

AppFlow の概念
__CAPGO_KEEP_0__ の同等Capgo注意
展開チャネルCapgo チャネルより強力な概念
ネイティブバージョンロック--min-update-version / --auto-min-update-versionより細かい制御
チャネル優先度チャネル優先度 (オーバーライド → クラウド → デフォルト)より透明な優先度
展開対象チャネル + semver制御複数の戦略が利用可能
生産チャネルproduction チャネル (または任意の名前)柔軟な名前付け
Git ベースのデプロイCLI ブランチからバンドルアップロード同じワークフロー
自動バージョンマッチングdefaultChannel バージョン制約複数の戦略を組み込んだ強化
  1. より多くの制御: Capgo には複数の戦略 (チャンネル、semver、ネイティブ バージョン) が組み合わせられます。
  2. バージョン対象の可視化: ダッシュボードはバージョンの分布と互換性の問題を表示します。
  3. API アクセス: バージョン ターゲットの完全なプログラム的制御
  4. Self-Hosting: 同じバージョンロジックを持つアップデートサーバーを自社で運営するオプション

バージョン対象設定

セクション "Migration Steps"
  1. AppFlow チャンネルをマップする を Capgo チャンネル (通常 1:1) に
  2. Set defaultChannel in capacitor.config.ts 各主バージョンごとに
  3. semver ルールを設定する バージョン境界での自動ブロッキングが必要な場合
  4. バージョンごとにアップロードする 使用する --min-update-version (チャンネルはメタデータ戦略を使用する必要があります)
  5. バージョン分布を監視する Capgo ダッシュボードに

高度なパターン

「高度なパターン」

バージョンごとの段階的ロールアウト

「バージョンごとの段階的ロールアウト」
// Gradually migrate v1 users to v2
async function migrateUsers() {
const deviceId = await CapacitorUpdater.getDeviceId()
const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage
const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) {
// User is in rollout group - migrate to v2
await CapacitorUpdater.setChannel({ channel: 'v2' })
}
}

バージョンごとの機能フラグ

「バージョンごとの機能フラグ」
// Enable features based on native version
async function checkFeatureAvailability() {
const info = await CapacitorUpdater.getDeviceId()
const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) {
// Enable features requiring v2.0.0+
enableNewCameraFeature()
}
}

バージョン間のA/Bテスト

「バージョン間のA/Bテスト」
// Run A/B tests within same native version
async function assignABTest() {
const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) {
// Only A/B test on v2 users
const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b'
await CapacitorUpdater.setChannel({ channel: variant })
}
}

概要

概要

Capgoは、バージョンに特化したアップデートの配信に複数の戦略を提供します:

  1. チャンネルベースのルーティング: メジャー/マイナー/パッチ境界を超えたアップデートを自動的に分離する defaultChannel
  2. シーケンスバージョニング: メジャー/マイナー/パッチ境界を超えたアップデートを防止する
  3. ネイティブバージョン制約: バンドルの最小ネイティブバージョンを要求する
  4. 自動ダウングレード防止: 新しいネイティブバージョンに古いバンドルを配信しない
  5. デバイスオーバーライド:

テストとターゲットのためのマニュアルコントロール

特定の機能については、以下のページを参照してください。

ネイティブバージョン遅延と条件

Version Targetingから続きます

バージョン対象化から続きます バージョン対象設定 バージョン対象設定を計画し、チャンネルルーティングとステージドロールアウトに接続する チャンネル チャンネル機能の実装詳細について チャンネル チャンネル機能の実装詳細について チャンネル チャンネル機能の実装詳細について ベータテストソリューション ベータテストソリューションの製品ワークフローについて バージョン対象設定ソリューション バージョン対象設定ソリューションの製品ワークフローについて