破壊的変更
このドキュメントでは、バージョン管理されたチャンネルを使用してアプリの破壊的変更を処理する方法について説明します。このアプローチにより、異なるバージョンのアプリを維持しながら、ユーザーが互換性のある更新を受け取ることができます。
シナリオの例
Section titled “シナリオの例”以下があるとします:
- アプリバージョン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. 新バージョン用のチャンネルを作成”# バージョン2.x用のチャンネルを作成npx @capgo/cli channel create v22. バージョン2.0.0のCapacitor設定を更新
Section titled “2. バージョン2.0.0のCapacitor設定を更新”App Storeでバージョン2.0.0をビルドする前にCapacitor設定を更新します:
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ブランチを作成します:
# バージョン1.x更新用のブランチを作成して維持git checkout -b v1-maintenancegit push origin v1-maintenance
# メインブランチはバージョン2.x開発を続行git checkout main重要: 古いアプリに期待されるネイティブコード/APIを持たないJavaScriptバンドルを決してプッシュしないでください。常に適切なブランチから更新をビルドしてください:
- v1-maintenanceブランチ: 1.xアプリへの更新用(productionチャンネル)
- mainブランチ: 2.xアプリへの更新用(v2チャンネル)
4. それぞれのチャンネルにバンドルをアップロード
Section titled “4. それぞれのチャンネルにバンドルをアップロード”# 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 v25. 自己割り当てを有効化
Section titled “5. 自己割り当てを有効化”# アプリがv2チャンネルに自己割り当てできるようにするnpx @capgo/cli channel set v2 --self-assign6. App Storeにデプロイ
Section titled “6. App Storeにデプロイ”バージョン2.0.0をビルドしてApp Storeにデプロイします。このバージョンをダウンロードするすべてのユーザー(新規ユーザーまたは既存ユーザーのアップグレード)は、アプリバンドルに設定されているため、自動的にv2チャンネルを使用します。
将来のバージョンへのスケーリング
Section titled “将来のバージョンへのスケーリング”さらに破壊的変更を伴うバージョン3.0.0をリリースする場合:
# バージョン3.x用のチャンネルを作成npx @capgo/cli channel create v3// バージョン3.0.0用のcapacitor.config.tsconst config: CapacitorConfig = { // ... plugins: { CapacitorUpdater: { defaultChannel: 'v3' // バージョン3.xユーザー } }};これで、任意のバージョンに更新をプッシュできます:
productionチャンネル → バージョン1.xユーザーv2チャンネル → バージョン2.xユーザーv3チャンネル → バージョン3.xユーザー
7. クリーンアップ(移行後)
Section titled “7. クリーンアップ(移行後)”すべてのユーザーがバージョン2.xに移行したら(3〜4か月を数える):
- Capacitor設定から
defaultChannelを削除 - v2チャンネルを削除:
npx @capgo/cli channel delete v2- v1-maintenanceブランチを削除:
git branch -d v1-maintenancegit push origin --delete v1-maintenanceデプロイ前に各チャンネルで更新を徹底的にテストしてください
バージョン1.x更新の維持
Section titled “バージョン1.x更新の維持”バージョン1.xと互換性のある更新を送信するには:
- v1-maintenanceブランチに切り替える:
git checkout v1-maintenance- 変更を行ってコミット:
# 1.x互換の変更を行うgit add .git commit -m "Fix for v1.x"git push origin v1-maintenance- productionチャンネルにビルドしてアップロード:
npx @capgo/cli bundle upload --channel production