メインコンテンツへスキップ

ロールバック

Capgo の Live Update を使えば、改善や修正をユーザーへ迅速に届けられますが、アプリを以前のバージョンにロールバックする必要が生じる場面もあります。新しいアップデートで予期せぬ致命的な問題が発生した場合や、修正作業中に特定の変更を一旦戻したい場合などが考えられます。

Capgo では、手動でのロールバックや自動セーフティメカニズムなど、チャンネルのビルド管理やユーザーに配信するアプリのバージョンを制御するための複数の方法を提供しています。

Capgo には、不具合のあるアップデートからユーザーを守るための組み込みのセーフティメカニズムがあります。もし、 notifyAppReady() メソッドが呼び出される前に JavaScript エラーが発生した場合、プラグインは自動的に以前の正常に動作していたバージョンへロールバックします。

新しいアップデートがダウンロードされ適用されると、Capgo はアプリが notifyAppReady() を設定可能な時間内に呼び出し、アップデートが正常にロードされたことを確認することを期待します。このメソッドは以下のことを示します:

  • JavaScript bundle が致命的なエラーなくロードされたこと
  • アプリのコア機能が正常に動作している
  • このアップデートは保持しても安全です

もし notifyAppReady() JavaScriptのクラッシュや致命的なエラーにより呼び出されなかった場合、Capgo は次を行います:

  1. アップデートが正常に初期化できなかったことを検知
  2. 以前の正常に動作していたbundleへ自動的にロールバック
  3. 問題のあるアップデートを失敗としてマークし、再適用を防止
import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Call this after your app has successfully initialized
await CapacitorUpdater.notifyAppReady()

この自動保護機能により、誤って不具合のあるアップデートをプッシュしてしまっても、ユーザーが動かないアプリに困らされるのを防ぐことができます。

Capgo が呼び出されるまでの待機時間を notifyAppReady() 設定することで変更できます。設定項目は appReadyTimeout の Capacitor 設定内にある

{
"plugins": {
"CapacitorUpdater": {
"appReadyTimeout": 10000
}
}
}

この appReadyTimeout です。単位はミリ秒です。デフォルトのタイムアウトは通常10秒ですが、アプリの初期化要件に合わせて調整可能です。複雑な初期化プロセスによりアプリのロードに時間がかかる場合は、この値を大きくすることをお勧めします。

新しいビルドをアップロードしてチャンネルに割り当てるたびに、Capgo はそれらのビルド履歴を保持します。特定のアップデートを元に戻す必要がある場合は、履歴から以前のビルドを選択してチャンネルに再デプロイできます。

ロールバック UI

ロールバックの主な方法は、Capgo Dashboard でチャンネルを表示した際の 4 番目のタブ(History)にあるロールバックインターフェースを使うことです。このタブでは、そのチャンネルで利用可能なすべてのビルドを一覧できるため、以前の任意のバージョンを簡単に選択して戻せます。

History タブを使ったロールバック手順:

  1. 以下にログインします: Capgo ダッシュボード.

  2. 「Channels」セクションに移動します。

  3. ロールバックしたいチャンネル名をクリックします。

  4. チャンネル詳細画面の 4 番目のタブ(History)を開きます。

  5. ビルド履歴から、戻したいビルドを探します。

  6. そのビルドを選択し、チャンネルのアクティブなビルドとして設定します。

  7. このビルドにロールバックすることを確認します。

2つ目の方法として、チャンネルのビルド履歴にある各ビルドの横にある王冠アイコンをクリックすることで、最初のタブから直接ロールバックすることも可能です:

  1. チャンネルビューの最初のタブで、戻したいビルドを探します。
  2. そのビルドの横にある王冠アイコンをクリックすると、そのビルドがチャンネルのアクティブなビルドになります。 チャンネル管理オプション
  3. このビルドにロールバックすることを確認します。

ロールバック後、更新されたチャンネルをリッスンするように設定されているデバイスは、次回のアップデート確認時に以前のビルドを受信します。ロールバックされたビルドは新しいアップデートとして扱われるため、通常のアップデートフローと条件が適用されます。

通常、チャンネルの再設定はデバイスが次回のアップデートを確認した際に反映されます。Capgo を使用すると、バックグラウンド状態の対応アプリに対して、サイレントなアップデート確認通知を送信できます。updater integration が有効であれば、アプリは設定されたアップデートモードに従って、ロールバックの確認、ダウンロード、インストールを行うことが可能です。

これは配信を加速させるための手段であり、全デバイスへの強制コマンドではありません。配信はベストエフォート型であり、OSのバックグラウンド実行スケジュール、ネットワーク状況、デバイスの状態に依存します。オフライン状態や強制終了されたアプリを更新することはできないため、すべてのデバイスに到達する正確な時間を保証するものではありません。

この設定を行うには、以下に従ってください: Notifications: サイレントなアップデート確認を有効にする.

チャネルのリンク解除

「Unlinking a Channel」セクション

問題を調査している間、特定のチャンネルへのアップデートを一時的に停止したい場合は、そのチャンネルを現在のビルドからアンリンク(解除)できます。

チャンネルをアンリンクするには:

  1. Capgo Dashboard で対象のチャンネルに移動します。

  2. 現在のビルドの横にある「Unlink」ボタンをクリックします。

  3. チャンネルをアンリンクすることを確認します。

チャンネルがアンリンクされると、新しいアップデートは配信されなくなります。そのチャンネルに設定されているデバイスは、チャンネルが再びビルドにリンクされるまで、現在のビルドを維持します。

アップデートに問題が見つかったものの、どのビルドにロールバックすべきかまだ決まっていない場合に便利です。チャンネルのリンクを解除することで、さらなるアップデートを配信することなく、調査時間を確保できます。

組み込みBundleの強制使用

「Built-in Bundle」の強制適用

より深刻な状況では、チャンネル上のすべてのデバイスを、アプリのNative Buildに元々パッケージングされていたWebビルドに戻したい場合があります。これは「built-in bundle」と呼ばれます。

チャンネルでbuilt-in bundleを強制適用するには:

  1. Capgo Dashboardの対象チャンネルに移動します。

  2. 「Built-in Bundle」ボタンをクリックします。

  3. built-in bundleの強制適用を確認します。

built-in bundleを強制適用すると、そのチャンネルに設定されているすべてのデバイスは、次回のアップデート確認時に、元々パッケージングされていたWebビルドにロールバックされます。これは、現在どのビルドを使用しているかに関わらず実行されます。

これは特定の過去のビルドに戻すよりも強力なロールバックオプションです。アプリが最後にApp Storeなどに公開されて以降にリリースされたすべてのLive Updateが破棄されるためです。

問題を迅速に検知し、不具合のあるアップデートによる影響を最小限に抑えるためには、リリースを監視し、問題発生時に対応するための計画を立てておくことが重要です。

以下のような戦略があります:

特定のコホートに限定してロールアウトしている場合は、 段階的なロールアウト を使用して、channel全体のstable bundleを変更する前に、公開を一時停止するかターゲットをクリアしてください。

  • アップデートのリリース直後にクラッシュレポートやユーザーフィードバックを監視する
  • 段階的なロールアウトやステージング用のchannelシステムを利用し、広範囲にリリースする前に少人数のグループでアップデートをテストする
  • ロールバック、unlink、または組み込みbundleの強制使用を行う判断基準と、その権限者を明確にしておく
  • 必要に応じて、問題の内容と解決策についてユーザーに周知する

慎重なモニタリングと問題のあるアップデートを迅速に管理できる機能を組み合わせることで、ユーザーへの影響を最小限に抑えつつ、継続的に改善されるアプリ体験を提供できます。

ロールバックの次のステップ

「Rollbacks から次に進む」セクション

使用している場合 ロールバック ロールバックとバージョン管理を計画するには、次と連携してください バージョンターゲティング Version Targeting の実装詳細については、 アップデートの動作 Update Behavior の実装詳細については、 bundle bundle の実装詳細については、 Capgo Live Updates Capgo Live Updates のプロダクトワークフロー、および Capacitor Live Updates のロールバック戦略 Capacitor Live Updates のロールバック戦略における実践的なコンテキストについて。