コンテンツにジャンプ

Page/area: Capgo marketing website. Role: Website copy sentence. Seen in: component doc/SignupCta.astro, component Hero.astro. Message key `hero_subtitle_v2` (Hero Subtitle V2).

貼り付け用に準備されています。 Live UpdateCloudflare

API

SDK

Capgoのバージョン対象システムは、以下の機能を提供します。

  • npm bun
  • バージョン対象化 非互換なバージョンのアプリに破壊的な変更を防ぐ
  • 非互換なバージョンのアプリに到達しないように 複雑なロジックなしで複数のアプリバージョンを管理する
  • 特定のユーザーセグメントにアップデートをシームレスに展開する バージョン対象化の重要性(特にAppFlowユーザー向け)

バージョン対象化の重要性(特にAppFlowユーザー向け)というセクション

Ionic 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から移行したい場合 同じ更新の安全性を維持したい場合

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]

チャンネルベースのバージョンルーティング

チャンネルベースのバージョンルーティング

ライブアップデートのバージョン対象設定 推奨アプローチ バージョンアップデートと重大な変更の管理に最適なアプローチです。AppFlow の配信モデルに似ています。

  • (100,000 ユーザー) → チャンネル production channel
  • App v2.x (50,000ユーザーに重大な変更を含む) → v2 channel
  • App v3.x (10,000のベータユーザー) → v3 channel

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

Section titled “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
}
}
};

ステップ 2: チャンネルを作成

ステップ 2: チャンネルを作成
ターミナル画面
# 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

ステップ 3: バージョンに特化したパッケージをアップロード

ステップ 3: バージョンに特化したパッケージをアップロード
ターミナル画面
# 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
  • は、 NO バージョンを受け取らない 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 or --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"

Native パッケージの互換性から 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. Breaking Native API Changes

    ターミナル ウィンドウ
    # 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"

「戦略 4: 自動ダウングレード防止」のセクション

Capgo ダッシュボードで

  1. 行きましょう Go to チャンネル
  2. チャンネルを選択 有効
  3. 「ネイティブ下で自動ダウングレードを無効」

Via CLI:

または、__CAPGO_KEEP_0__で
npx @capgo/cli@latest channel set production --no-downgrade

日本語

「例」
  • ユーザーのデバイス:ネイティブ版 1.2.5
  • チャンネルバンドル:バージョン 1.2.3
  • 結果: ダウングレードの場合、更新はブロックされます

これは、次のような場合に便利です。

  • ユーザーがアプリストアから新しいバージョンを手動でインストールした場合
  • ユーザーが最新のセキュリティパッチを保証したい場合
  • バグのリグレッションを防止したい場合

デバイスレベルでのターゲット設定:戦略5

「デバイスレベルでのターゲット設定:戦略5」

特定デバイスまたはユーザーグループのチャネル割り当てをオーバーライドします。

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. デバイスは上書きされたソースからアップデートを受信します

完全なAppFlowスタイルのワークフロー

「完全なAppFlowスタイルのワークフロー」のセクション

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

ターミナルウィンドウ
# 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',
}
}
};

2. アプリケーション バージョン 2.0.0 の破壊的変更

2. アプリケーション バージョン 2.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
}
}
};

3. バージョン 2.0.0 と 2.1.0 の両方にプッシュ アップデート

3. バージョン 2.0.0 と 2.1.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"

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

「4. バージョン分布の監視」

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

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

5. 旧バージョンの非推奨

「5. 旧バージョンの非推奨」

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)

チャンネル順位

「チャンネル順位」

Capgoが複数のチャンネル設定を持つ場合、使用される順位順序は次のようになります。

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

ベストプラクティス

「ベストプラクティス」

1. メジャーバージョンでは常にdefaultChannelを設定する

「1. メジャーバージョンでは常にdefaultChannelを設定する」
// ✅ 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. バージョン分布の監視

バージョン分布の監視

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

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

__CAPGO_KEEP_0__のバージョン対象設定とどう違うか? Ionic AppFlow, here’s how Capgo’s version targeting compares:

機能Ionic AppFlowCapgo
バージョン対象バージョンに基づくルーティングネイティブバージョンに基づく自動 defaultChannel ネイティブバージョンを通じて
+ 多数の戦略シーケンスバージョン基本的なサポート --disable-auto-update 高度な
(メジャー/マイナー/パッチ)マニュアル設定 (AppFlow ダッシュボード)組み込み --min-update-version / --auto-min-update-version メタデータ チャネル
チャネル管理Web UI + CLIWeb UI + CLI + API
デバイスオーバーライド制限されたデバイスレベル制御フルコントロール (ダッシュボード/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. Live Update の最小バージョンを検査: 確認する --min-update-version (または --auto-min-update-versioncontext --disable-auto-update metadata

チャネルが指定されたバージョンを使用していることを確認する

Breaking Changes Affecting Old Versions
  1. Section titled “Breaking Changes Affecting Old Versions”Immediate Fix
    • : 影響を受けるデバイスに安全なバンドルを強制する
  2. 長期解決策: バージョン管理されたチャンネルを作成し、分離されたブランチを維持する
  3. 予防: 代表的なデバイスでアップデートをテストすることから始めてロールアウトする

イオニック アプリフローの場合 : __CAPGO_KEEP_0__ への移行の際に、バージョン対象化は大幅に改善された柔軟性を持っています, バージョン対象化は Capgo における Live Update と同様に機能し、より多くの柔軟性が実現されています。

セクション “概念マッピング”

アプリフローの概念
アプリフローの場合Capgo (kakushu)Notes
ライブアップデートチャンネルCapgo チャンネル同様の概念、より強力なもの
ネイティブバージョンロック--min-update-version / --auto-min-update-versionより細かい制御
チャンネル優先順位チャンネル優先順位 (オーバーライド → クラウド → デフォルト)より透明な優先順位
展開対象チャンネル + semver制御複数の戦略が利用可能
生産チャネルproduction チャネル (または任意の名前)柔軟な名前付け
GitベースのデプロイCLI ブランチからバンドルアップロード同じワークフロー
自動バージョンマッチングdefaultChannel + バージョン制約複数の戦略を組み合わせた強化
  1. より多くの制御: Capgo が提供する複数の戦略 (チャンネル、semver、ネイティブ バージョン) を組み合わせることができます
  2. より良い視野: ダッシュボードはバージョン分布と互換性の問題を表示します
  3. API アクセス: バージョン ターゲットの完全なプログラム的制御
  4. 自社ホスティング: 同じバージョンロジックを持つアップデートサーバーを実行するオプション
  1. AppFlow チャンネルをマップする に Capgo チャンネル (通常 1:1)
  2. バージョン対象設定 defaultChannel で capacitor.config.ts 各主バージョン
  3. セマンティックバージョニングのルールを設定 バージョン境界での自動ブロッキングが必要な場合
  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' })
}
}

コンテキスト: Capgo マーケティング ウェブサイト。役割: UI ラベル。表示場所: page agents/[slug].astro。メッセージキー `agents_page_copy_label` (Agents Page Copy Label)。

バージョンごとの機能フラグ
// 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 テスト
// 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. シémantiqueバージョニング: メジャー/マイナー/パッチ境界を超えてアップデートを防止する
  3. ネイティブバージョン制約: バンドルのための最低限のネイティブバージョンを要求する
  4. オートダウングレード防止: 新しいネイティブバージョンに古いバンドルを配信しない
  5. デバイスのオーバーライド: テストとターゲットのための手動制御

これらの戦略を組み合わせると、より多くの柔軟性と制御を備えたAppFlowスタイルの自動更新配信が可能になります。アプリのバージョニングとデプロイワークフローに最も適したアプローチを選択してください。

詳細な特定の機能については以下を参照してください:

バージョン対象化から続けて

バージョン対象化から続けて

Live Update バージョン対象設定 バージョン対象設定 チャンネル チャンネル チャンネル チャンネル チャンネル チャンネル チャンネル ベータテストソリューション バージョン対象設定ソリューション バージョン対象化ソリューションの製品ワークフローについて。