Windy.com - 天気予報
地図、アラート、ナビゲーションの修正など、慎重な本番環境への展開が求められる天気アプリ。
- Google Play インストール数
- 3,290万
- ストア評価
- 4.7
CLIやCIから新しいWeb bundleをupload。デバイスはバックグラウンドでダウンロードし、アプリがフォアグラウンドに戻った際に実行します。リリース率をパーセンテージで制御し、Observeで状況を監視。問題が発生した場合はすぐにロールバックできます。
課題
バグの特定
モニタリングやサポートから画面の不具合が報告されます。修正は数行のJavaScriptやCSSで済みます。
新しいバイナリのビルド
バージョンを上げ、iOSとAndroid向けにビルドし、2つのストア申請を準備します。
レビュー待ち
ストアのレビューには通常24〜48時間、時にはそれ以上かかります。リジェクトされると、また待ち時間が最初から始まります。
ユーザーのアップデート待ち
承認後も、各ユーザーが新しいバージョンをインストールする必要があります。それまでは、古い code が実行されたままです。
各ステップが、修正の準備ができてからユーザーのデバイスに適用されるまでのタイムラグを生んでいます。
24–48時間+
一般的なストア審査時間
AppleとGoogleは新しいバイナリをすべて審査します。審査には通常24〜48時間、時にはそれ以上かかり、リジェクトされると再申請が必要になります。
ユーザーあたり
ストアの更新はデバイスごとに異なります
ストアのアップデートは、ユーザーまたは自動更新設定によってインストールされて初めてデバイスに適用されます。一部のデバイスでは、古いビルドのまま長期間使い続けられることがあります。
2つのストア
修正のたびに2回の申請が必要
同じWebの修正でも、App StoreとGoogle Playに個別に申請する必要があり、それぞれに独自の審査とリリースプロセスが発生します。
ソリューション
これは Capgo のデフォルトのアップデート動作です。アップデートのプロンプト表示や強制再起動、Webレイヤーの変更に伴うストアへの再申請は一切不要です。
アプリがフォアグラウンドに移行した際、およびアプリ起動中は10分ごとに、アップデーターがCapgoに対して対象チャネルの最新bundleをリクエストします。
フォアグラウンド時
ユーザーが現在のバージョンを使用している間に、新しいbundleをダウンロードします。delta updatesを使用すれば、変更されたファイルのみをダウンロード可能です。
中断なし
ユーザーがアプリを終了した際に、アップデーターがbundleをインストールします。次にアプリを開いたときには、新しいバージョンが実行されます。
次回のフォアグラウンド時
アプリ起動直後に新バージョンを適用したいですか?Direct updateモードなら、スプラッシュ画面が表示されている間に起動時に適用できます。
Direct updatesを見る仕組み
すでにストアに公開されている Capacitor アプリの一般的なリリースフローです。以下のコマンドはすべて Capgo CLI ドキュメントに基づいています。
セットアップウィザードを実行し、アプリ起動後に notifyAppReady() が確実に呼び出されるようにします。この関数が一度も呼び出されない bundle は、自動的にロールバックされます。
npx @capgo/cli@latest init
# in your app start-up code
await CapacitorUpdater.notifyAppReady()
notifyAppReady() のドキュメント
--delta を使用して変更されたファイルのみを取得させ、--rollout を使って少数のデバイスから展開を開始します。それ以外のユーザーは安定した bundle を使い続けます。
npx @capgo/cli@latest bundle upload --channel production --delta --rollout 5
プログレッシブ・ロールアウトのドキュメント
失敗率のしきい値を設定して auto-pause を有効にします(500 basis points は 5% です)。失敗率がこの値を超えると、Capgo はロールアウトをロールバックします。実行中の新バージョンは Observe で確認できます。
npx @capgo/cli@latest channel set production \
--auto-pause-enabled \
--auto-pause-failure-rate-bps 500 \
--auto-pause-action rollback
Observe のドキュメント
数値が想定どおりなら、bundle をチャネル内の全デバイスにプロモートします。そうでなければ、ロールアウトのコホートを stable に戻します。
npx @capgo/cli@latest channel set production --rollout-promote
# or, if something looks wrong
npx @capgo/cli@latest channel set production --rollout-rollback
ロールバックのドキュメント
ユーザーを驚かせることなく、頻繁にリリースを行うためのコントロールを提供します。
--delta を使用して upload し、デバイスは現在の bundle から変更されたファイルのみを download します。変更の少ない大きなアセットは一度だけ download されます。
--delta
変更されたファイルのみを download
他のユーザーが安定した bundle を使用している間に、特定のチャネルのランダムかつ固定された割合のユーザーにのみ新しい bundle を配信できます。CLI またはコンソールから、配信割合の引き上げ、昇格、またはロールバックが可能です。
1–5%
一般的な最初のロールアウトステップ
すべてのアップデートは正常に起動することを証明する必要があります。新しいbundleが制限時間内にnotifyAppReady()を呼び出さない場合、デバイスは最後に動作していたbundleに戻り、新しいbundleを失敗としてマークします。
10秒
自動ロールバックまでのデフォルトのappReadyTimeout
Capgo は、JavaScript、CSS、アセットなどの Capacitor Web レイヤーを配信します。ネイティブバイナリ、プラグイン、権限、エンタイトルメント、アプリストアのメタデータは変更しません。ストア審査はアプリごとに異なるため、ポリシーの遵守と承認の責任はお客様にあります。
ライブアップデート導入後の日常的なリリース作業。各カードはドキュメントにリンクしています。
新しいbundleと以前のものを比較:エラー発生率、起動およびWebViewのタイミング、バージョンごとのデプロイマーカーを確認できます。
Observe のドキュメントチャネルのbundleを変更した後、サイレント通知を送信することで、デバイスが次にフォアグラウンドに移行するのを待たずに、即座にチェックを実行できます。
アップデート通知を送信チャネルでメジャーアップデートをブロックすることで、新しいネイティブ code が必要なbundleが古いバイナリに配信されるのを防ぎます。
バージョン指定に関するドキュメントCapgo は2021年からプロダクションアプリへのLive Updateを提供しています。
チームのニーズに最適なソリューションを見つける
Capacitor で構築されたアプリ
天気、公衆衛生、通信などのアプリは、正確なインターフェース、アラート、ナビゲーションに依存しています。本番環境でのアップデートを活用すれば、利用状況をモニタリングしながら、承認済みのUI修正を安全にリリースできます。
地図、アラート、ナビゲーションの修正など、慎重な本番環境への展開が求められる天気アプリ。
ガイダンスやサービス情報の迅速かつ信頼性の高い更新が必要な公衆衛生アプリ。
アラートやアカウント情報の表示が頻繁に更新される通信キャリア向けアプリ。
リードデベロッパー、drivolino GmbH
“Capgo Capacitor Updater pluginのおかげで、アップデートの配信方法が完全に変わりました。以前は何日もかかっていた作業が、今ではわずか数分で終わります。”
NuTriQ 創業者
“App Storeの審査サイクルを待たずに、本番環境へのOTAアップデートを即座に配信できることは、運用面で非常に大きなアドバンテージになっています。”
nethead emeritors
“Updater pluginは素晴らしい出来です。完璧に動作していますし、Live Updatesはテストのサイクルを劇的に速めてくれます。”
よくある質問
アップデートがデバイスに届く仕組みや、問題が発生した際の対処法について。
デフォルトでは、アプリがフォアグラウンドに移行した際と、起動中に10分おきにアップデートを確認します。新しいbundleはバックグラウンドでダウンロードされ、ユーザーがアプリを離れた際にインストールされ、次回の起動時に反映されます。この挙動はautoUpdate設定で変更可能です。
アップデート動作のドキュメントはい。チャンネルのbundleを変更した後、コンソールからアップデート通知を送信するか、bundle upload時に --send-update-notification を追加してください。デバイスにサイレントプッシュが届き、即座に確認が行われます。これには iOS および Android のプッシュ認証情報を用いた Capgo Notifications が必要です。配信はベストエフォート形式で行われます。オフライン状態や強制終了されたアプリは、次回の起動時に確認されます。
アップデート通知を送信新しいbundleが10秒以内(デフォルトのappReadyTimeout)に notifyAppReady() を呼び出さない場合、デバイスは最後に動作していたbundleに戻り、新しいbundleを失敗としてマークします。アプリの起動自体は妨げないバグについては、progressive rolloutをロールバックするか、チャンネル履歴から以前のbundleを選択してください。
ロールバックのドキュメント--rollout を使用して bundle をアップロードすれば、他のユーザーが stable 版を使用している間に、特定の割合のユーザーにのみ bundle を配信できます。配信割合の引き上げ、昇格、または CLI やコンソールからのロールバックも可能です。Auto-pause 機能を使えば、失敗率がしきい値を超えた際に自動で配信を停止できます。
段階的ロールアウトのドキュメントLive Update は JavaScript、HTML、CSS、およびアセットなどの Web レイヤーを置き換えます。Native plugin、Capacitor のアップグレード、capacitor.config の変更、および iOS や Android のプロジェクトファイルについては、ストア経由のリリースが必要です。Capgo はアップロード時に bundle のネイティブ互換性をチェックし、チャンネル設定によって古いバイナリへのアップデートをブロックすることも可能です。
ネイティブ互換性ドキュメントトライアル期間中に、ご自身のアプリで一連の流れを試せます。bundle のアップロード、一部のデバイスへのロールアウト、そしてロールバックまで体験してください。