ページ/エリア: Capgo マーケティング ウェブサイト。役割: ウェブサイト コピー文句。見つける場所: コンポーネント Hero.astro。メッセージ キー `hero_subtitle_v2` (Hero Subtitle V2)。
このプラグインのインストール手順とフルマークダウンガイドを含むセットアッププロンプトをコピーできます。
このガイドでは、ユーザーのネイティブアプリのバージョンに基づいて、最新の互換性のあるバンドルを自動的にユーザーに提供する方法について説明します。 Ionic AppFlowのアプローチと似たようにLive Update
code
APICapgoのバージョン対象システムは、次のことを可能にします。
- 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 WorksCapgoは、ユーザーに互換性のあるアップデートをマッチングするために、多層アプローチを使用します:
- ネイティブバージョン制約:互換性のないネイティブバージョンに配布されるバンドルを防止します
- チャンネルベースのルーティング:異なるアプリバージョンを異なるアップデートチャンネルにルーティングします
- シーケンスバージョン制御:メジャー/マイナー/パッチ境界を自動的にアップデートをブロックします
- デバイスレベルオーバーライド:特定のデバイスまたはユーザーグループをターゲットします
バージョンマッチングフロー
バージョン対象設定フロー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 buildsimport { 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 buildsconst 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 buildsconst 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 versionnpx @capgo/cli channel add productionnpx @capgo/cli channel add v2npx @capgo/cli channel add v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignStep 3: バージョンに特化した Bundle のアップロード
Step 3: バージョンに特化した Bundle のアップロード# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3メリット
「メリット」セクション- ゼロ code 変更 - チャネルルーティングは自動で行われます
- 明確な分離 - 各バージョンには独自のアップデートパイプラインがあります
- 柔軟なターゲット - 特定のバージョングループにアップデートをプッシュします
- 安全なロールアウト - 不相応のバージョンに破壊的な変更は届きません
戦略2:シーケンスバージョニングコントロール
「戦略2:シーケンスバージョニングコントロール」セクションCapgoの組み込み セマンティックバージョニングの制御を使用して バージョン境界を超える更新を防止します。
メジャーバージョンを跨る自動更新を無効化
セクション「メジャーバージョンを跨る自動更新を無効化」# Create a channel that blocks major version updatesnpx @capgo/cli channel add stablenpx @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 updatesnpx @capgo/cli channel set stable --disable-auto-update none戦略 3: ネイティブ バージョン制約
「戦略 3: ネイティブ バージョン制約」のセクション各パッケージで最小限のネイティブ アプリ バージョン (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 channelnpx @capgo/cli@latest channel set production --disable-auto-update metadataアップロード時にネイティブバージョンを最低限に設定します。
「アップロード時にネイティブバージョンを最低限に設定する」セクションバンドルをアップロードする際に、受信可能な最低限のネイティブバージョンを指定します:
# This bundle requires native version 2.0.0 or highernpx @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コピー
機能の仕組み-
バンドル内のデバイスのネイティブベースラインがバンドルのバージョンよりも下の場合、更新はスキップされます。バンドルのバージョンまたはそれ以上のバージョンのデバイスのみが更新を受け取ります。詳細は
ターミナル画面 # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli@latest bundle upload \--channel production \--min-update-version "2.0.0" -
ネイティブ API の変更
ターミナル画面 # Bundle uses new Capacitor 6 APIsnpx @capgo/cli@latest bundle upload \--channel production \--min-update-version "3.0.0" -
段階的な移行
ターミナル画面 # one-time: enable metadata gating on betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata# Test bundle only on latest native versionnpx @capgo/cli@latest bundle upload \--channel beta \--min-update-version "2.5.0"
4. 自動ダウングレード防止
「4. 自動ダウングレード防止」のセクションユーザーが現在のネイティブバージョンよりも古いバンドルを受け取るのを防ぐ。
チャンネル設定で有効にする
チャンネル設定で有効にするCapgo ダッシュボードで
- Go to チャンネル → チャンネルを選択
- 有効 ネイティブの自動ダウングレードを無効にする
- 変更を保存
または、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 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}ダッシュボード デバイス オーバーライド
セクション「ダッシュボード デバイス オーバーライド」Capgo ダッシュボードで:
- ここに移動する デバイス → デバイスを探す
- クリックする チャネルを設定する または バージョン設定
- 特定のチャネルまたはバンドルのバージョンに上書き
- デバイスは上書きされたソースからアップデートを受信します
完全なAppFlow-Styleワークフロー
「完全なAppFlow-Styleワークフロー」のセクションここでは、すべての戦略を組み合わせた完全な例を示します:
1. 初期設定 (アプリ v1.0.0)
「1. 初期設定 (アプリ v1.0.0)」のセクション# Create production channel, then enable metadata min-version gatingnpx @capgo/cli@latest channel add productionnpx @capgo/cli@latest channel set production \ --disable-auto-update metadata \ --no-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};バージョン対象設定
ターミナル画面# Create v2 channel for new versionnpx @capgo/cli@latest channel add v2npx @capgo/cli@latest channel set v2 \ --disable-auto-update metadata \ --no-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};バージョン2. リリース中の重大な変更 (App v2.0.0)
バージョン4. 両方のバージョンに更新をプッシュする# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli@latest bundle upload \ --channel production \ --min-update-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @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 branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)チャンネル順位
Channel Precedence複数のチャンネル設定が存在する場合、Capgoは次の順序で使用します。
- デバイスオーバーライド (ダッシュボードまたはAPI) - 最高優先度でデバイスオーバーライドUIに表示
- ローカルプラグインチャンネル via
setChannel()- デバイス上のみ保存され、デバイスオーバーライドUIに表示されません - defaultChannel capacitor.config.ts
- デフォルトチャネル (Cloud設定) - 最低優先度
アプリから呼び出されると、チャンネルをバックエンドと検証し、次にデバイス上でローカルに保存します。
ベストプラクティス「ベストプラクティス」
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 manually2. セマンティック バージョニングを使用する
セクション「2. セマンティック バージョニングを使用する」# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. 分離されたブランチを維持する
セクション「3. 分離されたブランチを維持する」# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. リリース前にテストする
セクション「4. リリース前にテストする」# one-time: create beta and enable metadata gating# (production is set up in the complete workflow above)npx @capgo/cli@latest channel add betanpx @capgo/cli@latest channel set beta --disable-auto-update metadata
# Test on beta channel firstnpx @capgo/cli@latest bundle upload \ --channel beta \ --auto-min-update-version
# Monitor for issues, then promote to productionnpx @capgo/cli@latest bundle upload \ --channel production \ --auto-min-update-version5. バージョン分布の監視
バージョン分布の監視 (5)ダッシュボードを定期的に確認してください:
- ユーザーが最新のネイティブバージョンにアップグレードしていますか?
- 古いバージョンが高トラフィックを受けている場合がありますか?
- 古いチャンネルを非推奨にする必要がありますか?
Ionic AppFlowとの比較
Ionic AppFlowからチームが移行している場合、__CAPGO_KEEP_0__のバージョン対象化の比較 機能, here’s how Capgo’s version targeting compares:
| Ionic AppFlow | Ionic AppFlow | Capgo |
|---|---|---|
| バージョンベースのルーティング | ネイティブバージョンに基づく自動 | ネイティブバージョンに基づく自動 defaultChannel 複数の戦略 |
| シーケンスバージョン | 基本的なサポート | 高度な --disable-auto-update (メジャー/マイナー/パッチ) |
| ネイティブバージョン制約 | AppFlow ダッシュボードでの手動設定 | 組み込み --min-update-version / --auto-min-update-version メタデータチャンネルとともに |
| チャンネル管理 | ウェブUI + CLI | Web UI + CLI + API |
| デバイスオーバーライド | 制限されたデバイスレベル制御 | フルコントロールviaダッシュボード/API |
| 自動ダウングレード防止 | はい | はいvia --no-downgrade |
| 複数バージョンメンテナンス | マニュアルブランチ/チャンネル管理 | チャンネル優先の自動管理 |
| 自主ホスティング | いいえ | はい (完全な制御) |
| バージョン分析 | 基本 | バージョンごとの詳細なメトリクス |
トラブルシューティング
トラブルシューティング更新を受け取らないユーザー
更新を受け取らないユーザー確認してください。
-
チャンネル割り当て: デバイスが正しいチャンネルにありますか?
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
バージョン制約: バンドルのネイティブバージョン要件を確認してください。
- : ダッシュボード → バンドル → 「ネイティブバージョン」列を確認してください。
-
Semver 設定: チャンネルの設定を確認する
disable-auto-update設定ターミナル画面 npx @capgo/cli channel list -
デバイスのオーバーライド: デバイスに手動オーバーライドがあるか確認する
- ダッシュボード → デバイス → デバイスを検索 → チャンネル/バージョンを確認
間違ったバージョンにバンドルが配信された
バンドルが間違ったバージョンに配信された- デフォルトのチャンネルを確認: 正しいチャンネルが設定されていることを確認する
capacitor.config.ts - バンドルアップロードを確認: 指定されたチャネルにバンドルがアップロードされたことを確認
- 最小更新バージョンを検査: 確認
--min-update-version(または--auto-min-update-versionチャネルが使用するバージョンが設定されていて--disable-auto-update metadata
古いバージョンに影響を与える変更
「古いバージョンに影響を与える変更」- 即時修正: 影響を受けるデバイスに安全なバンドルを強制
- ダッシュボード → デバイス → 一括選択 → バージョン設定
- 長期的な修正: バージョン管理チャンネルを作成し、分離されたブランチを維持する
- 防止: 更新をロールアウトする前に、代表的なデバイスでテストする
Ionic AppFlow からの移行
Ionic AppFlow からの移行のセクション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 バージョン制約 | 複数の戦略を組み込んだ強化 |
AppFlow ユーザーのための主な違い
「AppFlow ユーザーのための主な違い」のセクション- より多くの制御: Capgo には複数の戦略 (チャンネル、semver、ネイティブ バージョン) が組み合わせられます。
- バージョン対象の可視化: ダッシュボードはバージョンの分布と互換性の問題を表示します。
- API アクセス: バージョン ターゲットの完全なプログラム的制御
- Self-Hosting: 同じバージョンロジックを持つアップデートサーバーを自社で運営するオプション
バージョン対象設定
セクション "Migration Steps"- AppFlow チャンネルをマップする を Capgo チャンネル (通常 1:1) に
- Set
defaultChannelincapacitor.config.ts各主バージョンごとに - semver ルールを設定する バージョン境界での自動ブロッキングが必要な場合
- バージョンごとにアップロードする 使用する
--min-update-version(チャンネルはメタデータ戦略を使用する必要があります) - バージョン分布を監視する Capgo ダッシュボードに
高度なパターン
「高度なパターン」バージョンごとの段階的ロールアウト
「バージョンごとの段階的ロールアウト」// Gradually migrate v1 users to v2async 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 versionasync 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 versionasync 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は、バージョンに特化したアップデートの配信に複数の戦略を提供します:
- チャンネルベースのルーティング: メジャー/マイナー/パッチ境界を超えたアップデートを自動的に分離する
defaultChannel - シーケンスバージョニング: メジャー/マイナー/パッチ境界を超えたアップデートを防止する
- ネイティブバージョン制約: バンドルの最小ネイティブバージョンを要求する
- 自動ダウングレード防止: 新しいネイティブバージョンに古いバンドルを配信しない
- デバイスオーバーライド:
テストとターゲットのためのマニュアルコントロール
特定の機能については、以下のページを参照してください。
- 詳細は以下の特定の機能について Breaking Changes Guide
- 詳細なチャンネルバージョニング戦略 Channel Management
- 完全なチャンネン設定のリファレンス Update Behavior
ネイティブバージョン遅延と条件
Version Targetingから続きますバージョン対象化から続きます バージョン対象設定 バージョン対象設定を計画し、チャンネルルーティングとステージドロールアウトに接続する チャンネル チャンネル機能の実装詳細について チャンネル チャンネル機能の実装詳細について チャンネル チャンネル機能の実装詳細について ベータテストソリューション ベータテストソリューションの製品ワークフローについて バージョン対象設定ソリューション バージョン対象設定ソリューションの製品ワークフローについて