コンテンツへスキップ

破壊的変更

このドキュメントでは、バージョン管理されたチャンネルを使用してアプリの破壊的変更を処理する方法について説明します。このアプローチにより、異なるバージョンのアプリを維持しながら、ユーザーが互換性のある更新を受け取ることができます。

以下があるとします:

  • アプリバージョン1.2.3(古いバージョン) - productionチャンネルを使用
  • アプリバージョン2.0.0(破壊的変更のある新しいバージョン) - v2チャンネルを使用
  • ライブアップデート1.2.4(1.2.3と互換性あり)
  • ライブアップデート2.0.1(2.0.0と互換性あり)

戦略: メジャーバージョンには常にdefaultChannelを使用

Section titled “戦略: メジャーバージョンには常にdefaultChannelを使用”

推奨アプローチ: すべてのメジャーバージョンにdefaultChannelを設定します。これにより、動的なチャンネル割り当てに依存することなく、特定のユーザーグループに更新をプッシュできます。

// バージョン1.xリリース
defaultChannel: 'v1'
// バージョン2.xリリース
defaultChannel: 'v2'
// バージョン3.xリリース(将来)
defaultChannel: 'v3'

1. 新バージョン用のチャンネルを作成

Section titled “1. 新バージョン用のチャンネルを作成”
Terminal window
# バージョン2.x用のチャンネルを作成
npx @capgo/cli channel create v2

2. バージョン2.0.0のCapacitor設定を更新

Section titled “2. バージョン2.0.0のCapacitor設定を更新”

App Storeでバージョン2.0.0をビルドする前にCapacitor設定を更新します:

capacitor.config.ts
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.example.app',
appName: 'Example App',
plugins: {
CapacitorUpdater: {
// ... その他のオプション
defaultChannel: 'v2' // すべての2.0.0ユーザーはv2チャンネルを使用
}
}
};
export default config;

3. 個別のコードブランチを管理

Section titled “3. 個別のコードブランチを管理”

アプリバージョン間の互換性を維持するために、個別のgitブランチを作成します:

Terminal window
# バージョン1.x更新用のブランチを作成して維持
git checkout -b v1-maintenance
git push origin v1-maintenance
# メインブランチはバージョン2.x開発を続行
git checkout main

重要: 古いアプリに期待されるネイティブコード/APIを持たないJavaScriptバンドルを決してプッシュしないでください。常に適切なブランチから更新をビルドしてください:

  • v1-maintenanceブランチ: 1.xアプリへの更新用(productionチャンネル)
  • mainブランチ: 2.xアプリへの更新用(v2チャンネル)

4. それぞれのチャンネルにバンドルをアップロード

Section titled “4. それぞれのチャンネルにバンドルをアップロード”
Terminal window
# 1.x更新用: v1-maintenanceブランチからビルド
git checkout v1-maintenance
# ここで1.x互換の変更を行う
npx @capgo/cli bundle upload --channel production
# 2.x更新用: mainブランチからビルド
git checkout main
# ここで2.xの変更を行う
npx @capgo/cli bundle upload --channel v2
Terminal window
# アプリがv2チャンネルに自己割り当てできるようにする
npx @capgo/cli channel set v2 --self-assign

バージョン2.0.0をビルドしてApp Storeにデプロイします。このバージョンをダウンロードするすべてのユーザー(新規ユーザーまたは既存ユーザーのアップグレード)は、アプリバンドルに設定されているため、自動的にv2チャンネルを使用します。

将来のバージョンへのスケーリング

Section titled “将来のバージョンへのスケーリング”

さらに破壊的変更を伴うバージョン3.0.0をリリースする場合:

Terminal window
# バージョン3.x用のチャンネルを作成
npx @capgo/cli channel create v3
// バージョン3.0.0用のcapacitor.config.ts
const config: CapacitorConfig = {
// ...
plugins: {
CapacitorUpdater: {
defaultChannel: 'v3' // バージョン3.xユーザー
}
}
};

これで、任意のバージョンに更新をプッシュできます:

  • productionチャンネル → バージョン1.xユーザー
  • v2チャンネル → バージョン2.xユーザー
  • v3チャンネル → バージョン3.xユーザー

すべてのユーザーがバージョン2.xに移行したら(3〜4か月を数える):

  1. Capacitor設定からdefaultChannelを削除
  2. v2チャンネルを削除:
Terminal window
npx @capgo/cli channel delete v2
  1. v1-maintenanceブランチを削除:
Terminal window
git branch -d v1-maintenance
git push origin --delete v1-maintenance

デプロイ前に各チャンネルで更新を徹底的にテストしてください

バージョン1.xと互換性のある更新を送信するには:

  1. v1-maintenanceブランチに切り替える:
Terminal window
git checkout v1-maintenance
  1. 変更を行ってコミット:
Terminal window
# 1.x互換の変更を行う
git add .
git commit -m "Fix for v1.x"
git push origin v1-maintenance
  1. productionチャンネルにビルドしてアップロード:
Terminal window
npx @capgo/cli bundle upload --channel production