__CAPGO_KEEP_0__
インストール手順とこのプラグインの完全なマークダウンガイドを含むセットアップ用の質問をコピーする。
このガイドでは、ユーザーのネイティブアプリのバージョンに基づいて、最新の互換性のあるバンドルを自動的にユーザーに提供する方法を説明します。 これは、Ionic AppFlowのアプローチと似ています。このアプローチにより、簡素化された更新管理と高速なロールアウトが実現され、互換性の問題が防止されます。
Capgo’s version targeting system allows you to:
- __CAPGO_KEEP_0__のバージョン対象化システムにより、以下のことが可能になります: 自動的に、ユーザーのネイティブアプリのバージョンに合わせた更新を提供
- ユーザーのネイティブアプリのバージョンに合わせた更新を自動的に提供 不相応のアプリバージョンに到達する破壊的な変更を防止
- 不相応のアプリバージョンに到達する破壊的な変更を防止する 複雑なロジックなしで、複数のアプリバージョンを管理
- 複数のアプリバージョンを管理する 特定のユーザーセグメントに更新をシームレスに展開
特定のユーザーセグメントに更新をシームレスに展開する
バージョン対象化の重要性(特にAppFlowユーザー向け)バージョン対象化の重要性(特にAppFlowユーザー向け) Ionic AppFlowユーザーが互換性のあるアップデートを受け取ることを保証することは、非常に重要です。AppFlowは、ライブアップデートバンドルをネイティブアプリのバージョンと自動的にマッチさせ、互換性のないJavaScriptが古いネイティブcodeに配信されるのを防ぎます。
Capgoは同じ安全性の保証を提供します追加の機能もあります:
- バージョンマッチングのより細かい制御
- 複数の戦略(チャネル、semver、ネイティブ制約)
- バージョン配布の視覚化
- APIとCLIの制御はダッシュボード管理とともに
このアプローチは、特に以下のシナリオで役立ちます:
- ユーザーがアプリの異なるメジャーバージョン(例:v1.x、v2.x、v3.x)にいる場合
- 破壊的な変更をロールアウトする際に、後方互換性を維持する必要がある場合
- 新しいバンドルが古いネイティブcodeを破壊しないようにしたい場合
- You’re migrating users gradually from one version to another
- You’re migrating from AppFlow と同じ更新の安全性を維持したままユーザーを一つずつ別のバージョンに移行する
How It Works
How It WorksCapgoは、互換性のある更新とマッチするために、複数層のアプローチを使用します:
- Native Version Constraints: 不適合のネイティブバージョンに配布されるバンドルを防止する
- Channel-Based Routing: 異なるアプリバージョンを異なる更新チャネルにルーティングする
- Semantic Versioning Controls: メジャー/マイナー/パッチ境界を超えた更新を自動的にブロックする
- デバイスレベルオーバーライド:特定のデバイスまたはユーザーグループを対象に
バージョンマッチングフロー
バージョンマッチングフローのセクション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の配信モデルに似ています。
- App v1.x (100,000 users) →
productionチャンネル - App v2.x (50,000 users with breaking changes) →
v2チャンネル - App v3.x (10,000 beta users) →
v3チャンネル
ステップ 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: チャンネルを作成する
Step 2: チャンネルを作成する# 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: バージョンごとのパッケージをアップロードする
Step 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 v3- ゼロのcodeの変更 - チャンネルルーティングは自動的に行われます
- 明確な分離 - 各バージョンには独自のアップデートパイプラインがあります
- 柔軟なターゲット - 特定のバージョングループにプッシュアップデートを送信します
- 安全なロールアウト - 不相応のバージョンには、変更点が届きません
戦略 2: セマンティック バージョニングの制御
セクション「戦略 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
- 古いネイティブ
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 noneStrategy 3: Native Version Constraints
セクション “Strategy 3: Native Version Constraints”バンドルに最低限のネイティブ バージョン要件を指定して、不互換のデバイスへの配信を防止します。
Using nativeVersion Delay Condition
セクション “Using 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 ダッシュボードに移動してください
- Go to チャンネル → チャンネルを選択
- 有効 “ネイティブ下での自動ダウングレードを無効にする”
- 変更を保存
またはCLI:
npx @capgo/cli channel set production --disable-downgrade- ユーザーのデバイス:ネイティブ版 1.2.5
- チャンネルバンドル:バージョン 1.2.3
- 結果__CAPGO_KEEP_0__
この機能は、以下のシナリオで役立ちます:
- アプリストアからユーザーが最新バージョンを手動でインストールした場合
- ユーザーが常に最新のセキュリティパッチを保有することを保証したい場合
- バグのリグレッションを防止したい場合
デバイスレベルでのターゲット設定
デバイスレベルでのターゲット設定特定のデバイスまたはユーザーグループにチャンネル割り当てをオーバーライドします。
テスト用に特定のバージョンを強制します。
テスト用に特定のバージョンを強制します。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 ダッシュボード内で:
- 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. App 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 } }};3. バージョン 1 とバージョン 2 の両方にアップデートをプッシュする
セクションのタイトル “3. バージョン 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"4. バージョン分布を監視する
セクションのタイトル “4. バージョン分布を監視する”Capgo ダッシュボードを使用して、以下を追跡する
- バージョン 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) - 最高優先度でデバイスオーバーライド UI で表示されます
- ローカル プラグイン チャネル via
setChannel()- デバイス上のみ保存され、デバイス オーバーライド UI に表示されません - defaultChannel in capacitor.config.ts
- Default Channel (Cloudflare設定) - 最低優先順位
ベストプラクティス
「ベストプラクティス」のセクション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. セマンティックバージョニングを使用する
「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. リリース前にテストする」# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. バージョン分布を監視する
定期的にダッシュボードを確認してください:ユーザーが最新のネイティブバージョンにアップグレードしているかどうかを確認してください:
- __CAPGO_KEEP_0__
- 古いバージョンはまだ高トラフィックを受けているのですか?
- 古いチャネルを非推奨にするべきですか?
Ionic AppFlowと比較
Ionic AppFlowと__CAPGO_KEEP_0__の比較Ionic AppFlowからチームが移行する場合 Ionic AppFlowからチームが移行する場合、__CAPGO_KEEP_0__のバージョン対象機能はどのように比較されますか?, here’s how Capgo’s version targeting compares:
| Ionic AppFlow | __CAPGO_KEEP_0__ | Capgo |
|---|---|---|
| ネイティブのバージョンに基づいて自動的に設定される | Ionic AppFlowと__CAPGO_KEEP_0__のバージョン対象機能の比較 | 自動で defaultChannel + 多くの戦略 |
| シーケンスバージョン | 基本的なサポート | 高度な --disable-auto-update (メジャー/マイナー/パッチ) |
| ネイティブバージョン制約 | AppFlow ダッシュボードで手動で設定 | 組み込み --native-version flag in CLI |
| チャンネル管理 | Web UI + CLI | Web UI + CLI + API |
| デバイスのオーバーライド | デバイスの制御が限られている | フルコントロール用ダッシュボード/API |
| ダウンレートの自動防止 | あり | あり --disable-downgrade |
| 複数バージョンのメンテナンス | マニュアルブランチ/チャンネル管理 | チャンネル順位による自動化 |
| 自主ホスティング | なし | Yes (full control) |
| バージョン分析 | Basic | バージョンごとの詳細なメトリクス |
トラブルシューティング
更新を受け取っていないユーザー']}targetLanguage
ユーザーがアップデートを受け取らない確認する:
-
チャンネル割り当て: デバイスが正しいチャンネルに接続されていることを確認する
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
バージョン制約: バンドルのネイティブバージョン要件を確認する
- ダッシュボード → バンドル → 「ネイティブバージョン」列を確認
-
Semver設定: チャンネルの
disable-auto-update設定ターミナルウィンドウ npx @capgo/cli channel list -
デバイスのオーバーライド: デバイスが手動オーバーライドを有効にしているかどうかを確認
- デバイス → デバイス → 検索 → チャネル/バージョンを確認
間違ったバージョンにバンドルが配信された
「バンドルが間違ったバージョンに配信された」セクション- デフォルトのチャネルを確認: 正しいチャネルが選択されていることを確認
capacitor.config.ts - バンドルアップロードを確認: 指定されたチャネルにバンドルがアップロードされたことを確認
- ネイティブバージョンを確認: 確認
--native-version__CAPGO_KEEP_0__
古いバージョンに影響を与える変更点
古いバージョンに影響を与える変更点- 直ちな修正: 影響を受けたデバイスを安全なバンドルに置き換えます
- ダッシュボード → デバイス → 一括選択 → バージョンを設定
- 長期的な修正: バージョン管理されたチャンネルを作成し、別々のブランチを維持します
- 予防: 更新をロールアウトする前に、代表的なデバイスでテストする
Ionic AppFlow からマイグレーション
Ionic AppFlow からマイグレーションIonic AppFlowから移行している場合 __CAPGO_KEEP_0__のバージョン対象は、より柔軟性が向上した__CAPGO_KEEP_0__と非常に似ています:, version targeting works very similarly in Capgo, with improved flexibility:
セクション「概念マッピング」
AppFlowの概念| __CAPGO_KEEP_0__の同等 | Capgo Equivalent | デプロイチャネル |
|---|---|---|
| __CAPGO_KEEP_0__チャネル | Capgo Channel | ネイティブバージョンロック']} |
| protectedTokens | --native-version flag | More granular control |
| Channel Priority | Channel precedence (override → cloud → default) | More transparent precedence |
| Deployment Target | Channel + semver controls | Multiple strategies available |
| Production Channel | production channel (or any name) | Flexible naming |
| Git-based deployment | CLI バンドルアップロードからブランチ | 同様のワークフロー |
| 自動バージョンマッチング | defaultChannel + バージョン制約 | 複数の戦略を組み合わせた強化 |
AppFlowユーザーのための主な違い
AppFlowユーザーのための主な違い- より多くの制御: Capgo は、複数の戦略 (チャネル、semver、ネイティブ バージョン) を組み合わせることができます
- より良い可視性: ダッシュボードはバージョン分布と互換性の問題を表示します
- API アクセス: __CAPGO_KEEP_0__のバージョンを完全にプログラムで制御します。
- Self-Hosting: 自分でアップデートサーバーを実行するオプションがあります。バージョンロジックは同じです。
Migration Steps
バージョンアップの手順- AppFlowチャンネルをマップする Capgoチャンネル (通常 1:1) に
- Set
defaultChannelバージョンcapacitor.config.tsfor each major version - 各メジャーバージョン Configure semver rules
- バージョンごとのバンドルをアップロード を使用して
--native-versionフラグ - バージョン分布を監視 in Capgo dashboard
のマッピングについては、
AppFlow からアドバンスト パターン
バージョンごとの段階的なロールアウト// 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 - Semantic Versioning: メジャー/マイナー/パッチ境界を超えた更新を防止
- Native Version Constraints: バンドル用の最低限のネイティブバージョンを要求
- Auto-Downgrade Prevention: 新しいネイティブバージョンに古いバンドルを配信しない
- Device Overrides: テストとターゲット設定のための手動制御
これらの戦略を組み合わせることで、AppFlowスタイルの自動更新配信に加えて、より多くの柔軟性と制御を実現できます。アプリのバージョニングとデプロイワークフローに最も適したアプローチを選択してください。
詳細な特定の機能については:
- Breaking Changes Guide - 詳細チャネルバージョニング戦略
- チャネル管理 - チャネル構成の完全な参照
- 更新動作 - ネイティブバージョン遅延と条件
バージョン目標から続ける
バージョン目標から続けるというセクションCapgoを使用している場合 バージョン目標 チャネルルーティングとステージドロールアウトの計画に使用し、チャネルと接続してください。 チャネル チャネル チャンネル __CAPGO_KEEP_0__ チャンネル __CAPGO_KEEP_0__ ベータテスト ソリューション __CAPGO_KEEP_0__ バージョン ターゲット ソリューション __CAPGO_KEEP_0__