__CAPGO_KEEP_0__
インストール手順とこのプラグインの全てのマークダウン ガイドを含む設定プロンプトをコピーする
このガイドでは、ユーザーのネイティブアプリバージョンに基づいて、最新の互換性のあるバンドルを自動的にユーザーに提供する方法を説明します。 このアプローチは、Ionic AppFlowのアプローチと似ています。このアプローチは、簡素化された更新管理と高速なロールアウトを実現し、互換性の問題を防ぎます。
Capgoのバージョン対象システムにより、
- ユーザーのネイティブアプリのバージョンに基づいて、 互換性のある更新を自動的に配信する
- 互換性のないアプリバージョンに到達する破壊的な変更を防ぐ 複雑なロジックなしで同時に複数のアプリバージョンを管理する
- 更新をスムーズに展開する simultaneously without complex logic
- Seamlessly roll out updates 特定ユーザー セグメントに特定
バージョン ターゲットの重要性 (特に AppFlow ユーザー向け)
「バージョン ターゲットの重要性 (特に AppFlow ユーザー向け)」というセクションあなたが「Ionic AppFlow」 をご存知の場合、ユーザーが互換性のある更新のみを受け取ることを保証することは、非常に重要です。 AppFlow は、ライブ アップデート バンドルをネイティブ アプリのバージョンと自動的にマッチさせ、互換性のない JavaScript が古いネイティブ __CAPGO_KEEP_0__ に配信されるのを防ぎました。codeは同じ安全性の保証
Capgo provides the same safety guaranteesバージョン マッチングのより細かい制御
- 複数の戦略 (チャネル、semver、ネイティブ制約)
- バージョン配布のよりよい可視性
- __CAPGO_KEEP_0__と__CAPGO_KEEP_1__はダッシュボード管理とともに制御
- API and CLI control alongside dashboard management
このアプローチは、特に以下のシナリオで便利です:
- ユーザーがアプリの異なるメジャーバージョン (例:v1.x、v2.x、v3.x) にある場合
- バージョンアップの際に破壊的変更を実施しながら、バックワード互換性を維持する必要がある場合
- 新しいバンドルが古いネイティブ code を破壊しないようにする場合
- ユーザーを一つのバージョンから別のバージョンに段階的に移行する場合
- AppFlow から移行し、更新の安全性を維持したい場合 How It Works
「How It Works」というセクション
__CAPGO_KEEP_0__ は、ユーザーを互換性のある更新とマッチさせるために、複数層のアプローチを使用します:Capgo uses a multi-layered approach to match users with compatible updates:
- : 不互換なネイティブ バージョンに配布されるバンドルを防止するNative Version Constraints
- チャネルベースのルーティング: 異なるアプリバージョンを異なるアップデートチャネルにルーティングする
- 意味論的バージョン管理: メジャー/マイナ/パッチ境界を超えた更新を自動的にブロックする
- デバイスレベルオーバーライド: 特定のデバイスまたはユーザーグループをターゲットする
バージョンマッチングフロー
バージョンマッチングフローのセクションgraph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check defaultChannel in App} D -->|Has defaultChannel| E[Use App's defaultChannel] D -->|No defaultChannel| F[Use Cloud Default Channel] C --> G{Check Version Constraints} E --> G F --> G G -->|Compatible| H[Deliver Update] G -->|Incompatible| I[Skip Update]戦略1: チャネルベースのバージョンルーティング
戦略1: チャネルベースのバージョンルーティングのセクションこのは 推奨アプローチ バージョンアップやメジャーバージョンアップの管理に適したアプローチです。AppFlowの配信モデルと似ています。
例えば
「例えば」のセクション- App v1.x (100,000ユーザー) →
productionチャンネル - App v2.x (50,000ユーザーにバグ修正が含まれる) →
v2チャンネル - App v3.x (10,000のベータユーザー) →
v3チャンネル
実装
実装各主バージョンごとにチャンネルを設定する
各主バージョンごとにチャンネルを設定する// 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 } }};チャンネルを作成する
ターミナルウィンドウ# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create 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: バージョン固有のバンドルをアップロードする
バージョン固有のバンドルをアップロードするステップ 3# 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 v3JavaScript __CAPGO_KEEP_0__ の変更が必要ありません!
利点- Zero code changes - チャンネルルーティングが自動的に行われます
- 明確な区別 - 各バージョンには独自の更新パイプラインがあります
- 柔軟なターゲット - 特定のバージョングループに更新をプッシュする
- 安全なロールアウト - 不相応のバージョンに破壊的な変更は届きません
Strategy 2: セマンティック バージョニング コントロール
セクション「Strategy 2: セマンティック バージョニング コントロール」Capgoの組み込みセマンティック バージョニング コントロールを使用して、バージョン境界を超える更新を防止します。
メジャー バージョンを跨いだ自動更新を無効にする
セクション「メジャー バージョンを跨いだ自動更新を無効にする」# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorこの設定は次のことを意味します:
- アプリのバージョン 1.2.3 は、バージョン 1.9.9
- ユーザーは NO バージョン 2.0.0 自動的に
- Prevents breaking changes from reaching older native code
破壊的な変更が古いネイティブ
詳細な制御オプション# Block minor version updates (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block patch updates (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「Strategy 3: Native Version Constraints」
バンドルに最低限のネイティブ バージョンを指定して、不互換なデバイスへの配信を防止します。nativeVersion Delay Conditionを使用する
「nativeVersion Delay Conditionを使用する」
バンドルをアップロードするときに、最低限のネイティブ バージョンを指定できます。ターミナル画面
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"用途
用途-
新しいネイティブプラグインが必要
ターミナル画面 # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
ネイティブのAPIの変更
ターミナル画面 # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
段階的な移行
ターミナル画面 # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
4. 自動ダウングレード防止戦略
「4. 自動ダウングレード防止戦略」のセクションユーザーが古いバージョンのネイティブアプリにバンドルを受け取るのを防ぐ。
チャンネル設定で有効にする
「チャンネル設定で有効にする」のセクションCapgo ダッシュボードで:
- 「 チャンネル → チャンネルを選択
- 有効化 “ネイティブ下での自動ダウングレードを無効にする”
- 変更を保存
または CLI: から
npx @capgo/cli channel set production --disable-downgrade- ユーザーのデバイス:ネイティブ版 1.2.5
- チャンネルバンドル:バージョン 1.2.3
- 結果:アップデートはブロックされます (ダウングレードになります): アップデートはブロックされます (ダウングレードになります)
この機能は、以下の場合に便利です:
- ユーザーがアプリストアから最新バージョンを手動でインストールした場合
- ユーザーが常に最新のセキュリティパッチを保有することを確認したい場合
- ユーザーがバグの再現を防止したい場合
Strategy 5: Device-Level Targeting
Strategy 5: Device-Level Targeting特定のデバイスまたはユーザーグループにチャンネル割り当てをオーバーライドします。
Force Specific Version for Testing
Force Specific Version for Testingimport { 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のCapgoダッシュボードで:
- Go to デバイス → デバイスを検索
- Click チャネルを設定 または バージョンを設定
- 特定のチャネルまたはバンドルバージョンで上書き
- デバイスは上書きされたソースからアップデートを受け取ります
アプリフロー スタイルのワークフローを完了する
「アプリフロー スタイルのワークフローを完了する」のセクションすべての戦略を組み合わせた完全な例があります。
1. 初期設定 (アプリ v1.0.0)
「1. 初期設定 (アプリ v1.0.0)」のセクション# Create production channel with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'atBackground', defaultChannel: 'production', } }};2. バイナリ互換性のないアップデート (アプリ v2.0.0)
「2. バイナリ互換性のないアップデート (アプリ v2.0.0)」のセクション# Create v2 channel for new versionnpx @capgo/cli channel create v2 \ --disable-auto-update major \ --disable-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 } }};バージョン 1 とバージョン 2 の両方にアップデートをプッシュする
バージョン 1 とバージョン 2 の両方にアップデートをプッシュするというセクション# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-version "2.0.0"バージョン 1 とバージョン 2 の両方のバンドル採用率を監視する
バージョン 1 とバージョン 2 の両方のバンドル採用率を監視するというセクションCapgo ダッシュボードを使用して、以下を追跡する
- バージョン 1 とバージョン 2 の両方のユーザー数
- バージョン 1 とバージョン 2 の両方のバンドル採用率
- バージョンごとのエラーまたはクラッシュ
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)チャンネル順位
「チャンネル順位」セクションCapgo が使用する順位順序は次のようになります。
- デバイスのオーバーライド (ダッシュボードまたはAPI) - 最高優先順位
- クラウドオーバーライド via
setChannel()エアショ - 安丛パトルート in capacitor.config.ts
- パトルートコントエントルート パトルートコントエントルートバートエントルート
ベスト プラクティス
セクション「ベスト プラクティス」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 manually2. セマンティック バージョニングを使用する
ターミナル ウィンドウ# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.5ターミナル ウィンドウ
セクション「3. 分離されたブランチを維持する」# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. リリース前のテスト
「4. リリース前のテスト」# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. バージョン分布の監視
ダッシュボードを定期的に確認してください:ユーザーは最新のネイティブバージョンにアップグレードしていますか?
- 古いバージョンはまだ高トラフィックを受けているですか?
- 古いチャネルを非推奨にするべきですか?
- Ionic AppFlowとの比較
Ionic AppFlowとの比較
Ionic AppFlow と比較するセクションIonic AppFlow から移行するチーム向け Ionic AppFlow から __CAPGO_KEEP_0__ のバージョン対象を比較する, here’s how Capgo’s version targeting compares:
| Ionic AppFlow | __CAPGO_KEEP_0__ | Capgo |
|---|---|---|
| ネイティブのバージョンに基づく自動 | バージョンを使用した自動 | + 多くの戦略 defaultChannel バージョンシンタックス |
| Automatic via | 基本サポート | 高度な「{0}」 --disable-auto-update (メジャー/マイナー/パッチ) |
| ネイティブバージョン制約 | AppFlow ダッシュボードで手動設定 | 組み込み --native-version flag in CLI |
| チャンネル管理 | Web UI + CLI | Web UI + CLI + API |
| デバイスオーバーライド | デバイスレベル制限の制限 | フルコントロール via Dashboard/API |
| 自動ダウングレード防止 | はい | はい via --disable-downgrade |
| マルチバージョンメンテナンス | 手動ブランチ/チャネル管理 | チャネル順位による自動化 |
| 自主ホスティング | いいえ | はい (フルコントロール) |
| バージョン分析 | ベーシック | __CAPGO_KEEP_0__の詳細バージョンメトリクス |
トラブルシューティング
トラブルシューティングユーザーが更新を受け取っていない
ユーザーが更新を受け取っていない確認すること
-
チャンネル割り当て: __CAPGO_KEEP_0__を正しいチャネルに設定しているか確認する
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
バージョン制約: __CAPGO_KEEP_0__にネイティブバージョン要件があるか確認する
- ダッシュボード → バンドル → 「ネイティブバージョン」列を確認
-
Semver設定: __CAPGO_KEEP_0__の
disable-auto-update設定ターミナルウィンドウ npx @capgo/cli channel list -
デバイスオーバーライド: デバイスが手動オーバーライドをしているか確認する
- ダッシュボード → デバイス → デバイスを検索 → チャネル/バージョンを確認
不正バンドルが正しいバージョンに配信された
バンドルが正しいバージョンに配信された- デフォルトのチャネルを確認: 正しいチャネルが選択されていることを確認
capacitor.config.ts - バンドルアップロードを確認: 意図したチャネルにバンドルがアップロードされたことを確認
- ネイティブバージョンを確認: 正しく使用されたことを確認
--native-version古いバージョンに影響を与える変更点
古いバージョンに影響を与える変更点
バンドルが正しいバージョンに配信された- 即時修正: 有効デバイスを安全バンドルにオーバーライドする
- ダッシュボード → デバイス → 一括選択 → バージョン設定
- 長期的な修正: バージョン管理されたチャンネルを作成し、別々のブランチを維持する
- 予防: リリース前に代表的なデバイスでアップデートをテストする
Ionic AppFlow からマイグレーション
「Ionic AppFlow からマイグレーション」のセクションIonic AppFlow から移行する場合 Ionic AppFlow , version targeting works very similarly in Capgo, with improved flexibility:
概念マッピング
セクション「概念マッピング」| AppFlow コンセプト | Capgo の同等 | ノート |
|---|---|---|
| デプロイ チャネル | Capgo チャネル | 同じ概念、より強力なもの |
| ネイティブ バージョン ロック | --native-version フラグ | より詳細な制御 |
| チャネル プライオリティ | チャンネル優先順位 (override → cloud → default) | より透明な優先順位 |
| デプロイ対象 | チャンネル + semver制御 | 複数の戦略が利用可能 |
| プロダクション チャンネル | production チャンネル (または任意の名前) | 柔軟な名前付け |
| Gitベースのデプロイ | CLI ブランチからバンドルアップロード | 同じワークフロー |
| 自動バージョンマッチング | defaultChannel + バージョン制約 | 複数の戦略を組み合わせた強化 |
AppFlowユーザ向けの主な違い
AppFlowユーザ向けの主な違い- より多くの制御: Capgo は、複数の戦略 (チャネル、semver、ネイティブ バージョン) を組み合わせることができます
- より良い可視性: ダッシュボードはバージョン分布と互換性の問題を表示します
- API アクセス: バージョン目標の完全なプログラム制御
- 自社ホスティング: 同じバージョンロジックを持つアップデートサーバーを実行するオプション
移行手順
移行手順セクション- アプリフロー チャンネルをマップする Capgo チャンネルにマップする (通常 1:1)
- 設定
defaultChannelにcapacitor.config.ts各主バージョン - semver ルールを設定 自動的にバージョン境界でブロックしたい場合は
- バージョンごとにアップロードする 使用
--native-version旗 - バージョン分布の監視 Capgo 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 provides multiple strategies for version-specific update delivery:
- : バージョンを自動的に分離する: メジャー/マイナー/パッチ境界を超えてアップデートを防止する
defaultChannel - : セマンティックバージョニングバージョンごとのA/Bテスト
- ネイティブ バージョン制約: バンドルに必要な最小のネイティブ バージョンを指定
- 自動ダウンレート防止: 新しいネイティブ バージョンに古いバンドルを配信しない
- デバイス オーバーライド: テストとターゲット設定用の手動制御
これらの戦略を組み合わせることで、より多くの柔軟性と制御を備えたAppFlowスタイルの自動更新配信が実現します。アプリのバージョニングとデプロイワークフローに最も適したアプローチを選択してください。
詳細な特定の機能については:
- Breaking Changes Guide - 詳細なチャネル バージョニング戦略
- チャネル管理 - チャネル構成の完全なリファレンス
- 動作の更新 - ネイティブ版の遅延と条件
バージョン目標から続ける
バージョン目標から続けるセクションのタイトルCapacitorを使用している場合 バージョン目標 バージョン目標を使用してチャンネルルーティングとステージドロールアウトを計画する場合、 チャンネル チャンネル チャンネル チャンネル チャンネル チャンネルにおける実装詳細について ベータテスト ソリューション ベータテスト ソリューションにおける製品ワークフローについて バージョン ターゲット ソリューション バージョン ターゲット ソリューションにおける製品ワークフローについて