アプリケーションが金曜日の午後に更新されると、正常な認証とクラッシュカウンタが正常なまま、チェックアウトが一部のデバイスで失敗し始めます。アプリストアとPlay Consoleのダッシュボードは、ロールバックの決定を確実にするにはまだ遅れています。
そのインシデントは、 アプリケーションヘルスチェック ダッシュボードのレビューとして。 健康的なリリースは、単にクラッシュしないだけではありません。 それは、早く始まる、重要な画面をレンダリングする、重要なジャーニーを完了する、正しいバックエンドバージョンに到達する、遅延ストアデータが追いつく前に、オンコールエンジニアが行動できるように十分なテレメトリを提供する必要があります。
目次
- 金曜日の午後、始まるこのプレイブック
- ユーザーの痛みを予測する健康基準を定義する
- この週にワイヤアップできるランタイムチェック
- ユーザーが問題を知る前に、CIチェックとヘルスエンドポイント
- アップデート、アップデーター、ストアとデバイスの間の盲点
- JavaScript アプリのセキュリティ、パーミッション、テレメトリ ハイジーニング
- 健康信号がトリガーされたときのリメディエーションとロールバック
金曜午後という出来事がこのプレイブックの始まり
最初のレポートは通常曖昧なもので、「チェックアウトが一部のユーザーで機能しない」というものです。サポートチームにはいくつかのスクリーンショットがあり、エンジニアリングチームには最近のバンドルがあり、ストアコンソールでは明らかなレグレッションもありません。チームはログを比較し、1台のデバイスでフローを再現し、更新状態、バックエンドのレスポンスの形状、古いネイティブシェルの組み合わせに依存する失敗を発見します。
それがデバッグセッションではありません。それはリリースシステムの失敗です。
主なアプリストアのダッシュボードは、KPI のほとんどについては 24 時間、クラッシュと ANR のレートについては 72 時間遅れます。 ストアのテレメトリ デリード リファレンスによると、実践的なルール:
ストアコンソールはレポートの遅延後に起こったことを教えてくれます。アップデーターとランタイムのテレメトリは、現在のリリースが何をしているかを教えてくれなければなりません。 Store consoles tell you what happened after the reporting delay. Your updater and runtime telemetry must tell you what the current release is doing now.
A health check is performed regularly, and the team has three layers of evidence:
- Runtime quality: crashes, ANRs, startup behavior, screen rendering, errors, and resource pressure.
- User outcomes: login completion, checkout success, payment confirmation, and other journeys that users recognize as success or failure.
- Release delivery: adoption, failed installations, blocked devices, channel behavior, and rollback state.
Each layer needs a corresponding operational lever. A crash regression may require stopping a rollout or reverting a JavaScript bundle. A failing backend dependency needs service remediation, not an app rollback. A broken update path needs channel controls and device-level investigation.
The practical response should begin with a timeline, not a blame exercise. Record when the bundle was published, which channel received it, when the first failed journey appeared, and which versions were affected. Then use a mobile incident response guide to assign an owner, preserve evidence, and decide whether the safest action is a channel pause, a rollback, or a native release. The purpose of this process is simple: incident response guide for mobile teams
Capgo サイレントのエラーを削減し、悪い信号から安全なアクションまでの距離を短縮する。健康チェックの残りの部分は、その結果を中心に設計されるべきである。
ユーザーの痛みを予測する健康基準を定義する
金曜日のリリースでは、ユーザーがログイン、チェックアウト、またはアップデートを受信できない場合でも、グリーンのストアダッシュボードが表示されることがある。健康な状態を定義する前に、そのインシデントが発生する前に、リリース、CI、またはロールバックの決定と各信号を関連付ける言葉で定義する。プラットフォームの報告が信頼できるようになるまでの24時間から72時間の盲点があるため、デバイス側のイベントは、プラットフォームの報告が信頼できるようになるまでの期間をカバーする必要がある。
最初のレベルでは、ユーザーが意味のある作業を完了できるかどうかを説明する。
- クラッシュフリーのセッション。 iOSとAndroidの両方でよく引用される基準点として約 99.93%のiOSと99.81%のAndroidを使用する。アプリの健康フレームワークのリファレンス に記載されている。これらの値をレビューの基準点として扱い、universalの保証ではなく。リリースごとに、オペレーティングシステム、デバイスファミリー、ロールアウトコホートを区別する。リリースごとのドロップは、拡大を停止させたり、バンドルを戻したりする。
- ANRの動作 Aのフローズンインターフェイスはログイン、チェックアウト、または支払い確認をブロックすることなくクラッシュを生成しない。バージョンとフローをグループ化し、WebViewの作業、プラグインの呼び出し、ネイティブブリッジの操作をメインスレッドがブロックされる可能性があるものをチェックする。修正はcodeまたはCIに属するかもしれず、ロールアウトのレバーは一時停止である。
- 起動と画面の準備状態。 インタラクティブになるまでの時間を測定し、プロセス起動のみではありません。シェルが早く開くが、最初の有用な画面が空白になっている場合でも、まだ不健康です。CIの閾値を不良変化に設定し、失敗したときにデバイスのトレースを検査する。
- 重要な旅の成功。 ログイン、検索、チェックアウト、支払い、同期、ログアウトには明示的な成功イベントが必要です。HTTPのレスポンスは、ユーザーが確認に到達したことを証明するものではありません。ドロップは、ロールバックを選択する前に影響を受けたフローを特定する必要があります。

リリースゲートと診断信号を分離する。
リリースゲート クラッシュフリーのセッション、ANR、起動、認証、最高価値のユーザージャーニーを含む。 診断信号 メモリープレスチャー、バッテリーの影響、ストレージの増加、ネットワークの遅延、HTTPのエラークラス、WebViewのレンダリングを含む。失敗の説明と治療の指示を提供するが、自動的にすべてのデプロイをブロックすることはない。
各基準を4つのフィールドで書く。
| フィールド | 例 |
|---|---|
| シグナル | チェックアウト完了 |
| セグメント | リリース、プラットフォーム、地域、デバイスファミリー |
| レビュー規則 | 前回の安定コホートと比較 |
| アクション | ロールアウトを一時停止、ログを検査、またはバンドルを戻す |
この機能を使用 アプリの健康状態監視のガイドライン 始めに、各信号を人やローテーションに割り当て、結果を変えることができるレバーをドキュメント化し、未加工の信号を表示してください。1つのスコアは、健康な背景アクティビティの背後で、深刻な支払い失敗を隠す可能性があります。
正常なリリースは、安定し、反応し、観察し、ユーザーが価値を置くタスクを完了できるものでなければなりません。また、オンコールエンジニアが実行できるアクションに接続されていることも必要です。
実行時チェックを今週に組み込むことができます。
アプリケーションをインストルメント化する場所は、ユーザーが作業を経験する場所だけではなくて、プロセスが生存を報告する場所でもあります。Capacitor アプリケーションは、JavaScript の例外、ネイティブのクラッシュ、ブリッジの失敗、ナビゲーションタイミング、journey イベントをキャプチャできます。Electron アプリケーションでは、レンダラー プロセスの失敗、メイン プロセスのエラー、プリロードの失敗、ウィンドウのリードイー、リソースの観察を追加できます。
実用的なアプリケーションヘルスチェックは 安定性とパフォーマンスを一緒に測定します。、クラッシュ率、ANR率、起動時間、画面レンダリング時間、エラーレート、リソース利用率を含みます。 モバイルパフォーマンスヘルスチェックガイドライン も、リリースバージョンとロールアウトコホートによるセグメンテーションを強調しています。セグメンテーションがなければ、健康な古いバージョンは、新しいバージョンが失敗していることを隠す可能性があります。
始めに、決定を変える信号から始めます。
セッションID、アプリケーションバージョン、ネイティブシェルバージョン、プラットフォーム、デバイスクラス、地域、ロールアウトチャネルを、毎回ヘルスイベントとともにキャプチャしてください。個人データを含めるのを避けます。コンテキストは、デバッガーを開く前に「誰が影響を受けているか」という質問に答えることができるようにします。
各信号に対して、ターゲットとレスポンスを定義してください。
- クラッシュ: クラッシュフリーのセッションをプラットフォームのベンチマークと比較してください。リリース固有の低下は、影響を受けるコホートを一時停止させ、エンジニアがスタックまたはプラグインの境界を特定するまでにします。
- ANR: イベントを画面と操作でグループ化してください。ブリッジコール中に繰り返しフリーズが発生する場合、データベースマイグレーション中にフリーズが発生する場合とは異なる対処が必要です。
- 起動時間: 最初のインタラクティブな画面が利用可能になるポイントをマークしてください。遅い結果は、ウェブアセットが大きすぎる、同期初期化、証明書チェック、またはナビゲーションが実行される前に実行されるプラグインによって引き起こされる可能性があります。
- 画面レンダリング: チェックアウト、ログイン、検索などの高価値画面の周りで、開始イベントとリードイベントを発行してください。リードイベントが欠落している場合、クラッシュレポートが示さない静的な失敗を明らかにすることがよくあります。
- エラー率: 正規化されたエラークラス、ステータスファミリー、オペレーション名を記録してください。トークン、支払い詳細、またはフルリクエストボディをログに記録しないでください。
- リソース利用率: メモリ、ストレージ、バッテリーの動作、ネットワークの障害を観察して、サポートする証拠として。
以下の表は意図的に保守的です。briefが基準を提供する場合、その基準は含まれます。他のバンドは、自分の安定した基準から選択するのではなく、普遍的な限界として作成しないでください。
| Signal | Unit | 正常な範囲 | なぜ重要か |
|---|---|---|---|
| クラッシュフリーのセッション率 | パーセンテージ | 99.93%のiOS、99.81%のAndroidを参考点として | 予期せぬ終了のセッションを検出 |
| ANR率 | イベントまたはセッション | リリース固有の安定性の問題がない | 凍結されたインターフェイスを特定する |
| 起動時間 | ミリ秒または秒 | 前のリリースと比較して安定している | アプリがすぐに利用可能になるかどうかを示す |
| 画面レンダリング時間 | ミリ秒または秒 | 重要な画面に対して安定している | 遅いまたは不完全な経験を明らかにする |
| エラー率 | 操作ごとのイベント数 | 安定した動作とバージョン | バックエンドまたはクライアントエラーをユーザー作業と関連付けます |
| リソース利用率 | メモリ、ストレージ、バッテリー、ネットワークの測定 | リリース固有の未説明の悪化がない | フリーズ、終了、低下したデバイスの説明を助ける |
アクションをインストルメントするのではなく、警告だけをインストルメントする
クラッシュイベントはリリースとロールバックパスにリンクする。チェックアウト失敗は失敗したステップとレスポンスクラスにリンクする。起動のレグレッションは初期化フェーズに時間を費やしたフェーズにリンクする。
Capacitor チーム向けには、JavaScriptとネイティブの境界近くにインストルメントを維持し、物理デバイスで検証することをお勧めします。Electronの場合は、レンダラーとメインプロセスのセパレートコンテキストを収集することをお勧めします。レンダラーのプロセスが失敗してもメインプロセスが正常に動作しているように見えるためです。 Capacitor のパフォーマンスモニタリング設定 リリースレベルでの調査に役立つ信号をチームが接続できるようにします。
問題をユーザーが利用する前に検知するためのヘルスエンドポイントとCIチェック
Aプリケーションは、実行中のプロセスがすぐに利用可能であることを保証するものではない。バックエンドは、データベースのプールが枯渇している場合やキャッシュが利用できない場合や、外部サービスがタイムアウトしている場合でも、TCP接続を受け入れることができる。
専用の、認証なしのリードネスエンドポイントを使用する。 /healthz. アプリケーションと重要な依存関係が正常であれば200を、正常でない場合は503を返す。上記の ヘルスエンドポイント実装ガイドラインを参照してください。 チェック時間は500ms以下でなければならない。データベース、キャッシュ、重要な外部サービスをチェックし、各依存関係にタイムアウトを設定する。
レスポンスは有用で、制限されたものでなければならない。
小さく、安定したレスポンスの形状を返す。
Validate more than the status code:
- JSONのレスポンスが期待どおりのフィールドを持っていることを確認します。
- エンドポイントが想定どおりのバックエンドバージョンに到達することを確認します。
- 関連する地域とネットワークルートからパスをテストします。
- 独立したタイムアウトを設定して、1 つの遅い依存関係がプローブ全体を止めないようにします。
- インフラがプロセス障害と依存障害を区別する必要がある場合、ライブネスとリードネスを分離してください。
ユーザーの視点から、200レスポンスでもJSONが不正である場合や証明書が期限切れである場合、健康なアプリケーションではありません。

チェックをリリースパス内に置きます。
CIでデプロイされたプレビュー環境に対してエンドポイントを実行し、次にアプリケーションで使用されるAPI操作を実行し、最後にエミュレータまたはデバイスファームで小規模な重要なUIフローを実行します。環境が生産環境と同じリードネス契約を満たせない場合、ビルドは失敗するはずです。
GitHubアクションズジョブは単純に残すことができます。
- ウェブバンドルとネイティブシェルをビルドします。
- 隔離された環境にデプロイします。
- Poll
/healthzタイムアウトを設定して - ステータスとレスポンスの形を検証する
- ログインと収益が高いjourneyの統合テストを実行する
- すべてのゲートが通過した後のみリリースする
エンドポイントは、データを書き込むことや破壊的なマイグレーションを実行しないようにする。頻繁に呼び出せるようにし、安価で安全なようにする。エンドポイントはリリースゲートであり、2番目のアプリケーションではない。
アップデート、アップデーター、ストアとデバイスの間の盲点
リリースは技術的に正しくても、デバイスが更新を受け取らない、インストールしない、または状態を報告しない場合に、実行上失敗する可能性がある。アップデータはアプリの健康に含まれるべきであり、配信の詳細ではない。
チェックアウトの検証を変更するJavaScriptのバンドルを考慮する。ストアでインストールされたネイティブシェルは利用可能なままであり、更新チャネルは新しいウェブアセットを一部のデバイスに配信する。成功したデバイスもあるが、他のデバイスは検証に失敗したり、ブロックされたままになる。ネイティブバージョンが互換性がないためである。ストアのダッシュボードでは、状態の差異がすぐに表示されない。
報告のギャップは実際に問題になる。ストアのダッシュボードでは、ほとんどのKPIについて24時間、クラッシュとANRレートについては72時間程度遅れることがある 、というのはの説明にある モバイルリリース可視性リファレンス近リアルタイムのアップデータのテレメトリが、インストールに失敗したデバイス、ロールバックしたデバイス、チェックインしなかったデバイスを示すことで、インスタンス間の空白を埋めます。

チャンネルを安全境界として扱う
別々のベータ、ステージング、プロダクションチャンネルを使用し、明確な互換性のルールを指定します。プロダクションロールアウトには、必要なプラグインや構成能力が欠如しているネイティブシェルを含めるべきではありません。チャンネル、リリース、プラットフォーム、報告されたアプリバージョンごとに採用と失敗を追跡します。
実行上のレバーは具体的です:
- ガードレール: 非互換のバンドルが非対応のシェルに到達するのを防ぐ
- オーディエンスロールアウト: 制御されたコホートから始め、実行時とジャーニー信号が健康である場合に拡大する
- 差別的配信: アップデータがサポートする場合にのみ変更されたアセットを送信し、更新に伴う作業とデータの量を減らします
- ロールバック保護: インストールまたは起動検証が失敗した場合、前の知られている良好なバンドルを復元します。
- バージョン比較: 新しいコホートと比較して安定したコントロールグループのクラッシュ、起動、WebView、journeyの健康を比較します。
Capgoは、CapacitorとElectronチームが署名されたJavaScript、CSS、設定、資産の更新、ターゲットチャンネル、デバイスごとのログ、採用と失敗のメトリクス、ロールバックコントロールの必要性がある場合の1つの選択肢です。 Capacitorのライブアップデートの概要 __CAPGO_KEEP_0__のアップデータモデルと、チームが配信状態をリリース決定と関連付ける方法について説明しています。
重要な原則は、ベンダーではなく、フィードバックループです。ロールアウトは証拠を生み出し、次のコホートがバンドルを受け取るかどうかを制御する必要があります。
JavaScriptアプリのセキュリティ、パーミッション、テレメトリの清掃
アプリは安定しているように見えているかもしれませんが、パーミッション、更新の信頼、またはテレメトリによって受け入れられないリスクを運んでいる可能性があります。CapacitorとElectronのリリースの場合、プラグインと埋め込まれたWebコンテンツを攻撃面の一部として検査する必要があります。
ここから始めましょう:
- プラグインの許可リスト: 未使用のプラグインを削除し、ネイティブ機能を確認し、連絡先、ファイル、位置、カメラ、マイク、または外部の意図へのアクセスを検証する。
- Deep-link のレビュー: URL スキームと Android インテントのテスト。信頼できないリンクは、特権フローを開くことなく認証を回避してはならない。
- バンドル検証: 更新を適用する前に署名を検証し、不完全または予期せぬパッケージを拒否し、最後の知られている良好なバンドルを回復用に保持する。
- トークン ストレージ: プラットフォームの安全なストレージに資格情報を保持し、JavaScript にアクセス可能なファイルや制限のないローカル ストレージにしない。
- エレクトロン バウンダリー: メイン プロセスで特権 API を保持し、狭いプレロード インターフェイスを公開し、任意のリモート コンテンツがネイティブ API に到達するのを防ぐ。
テレメトリには対応する制御が必要。イベント名、リリース ID、操作クラス、失敗カテゴリを記録する。トークン、支払い情報、ユーザーが入力した全テキスト、正確な位置、またはドキュメントされたセキュリティ レビューが許可していない場合のレスポンス ボディを除外する。
運用上の必要性に基づいて保持期間を設定し、ロールごとにアクセスを制限する。プライバシー要件が適用される場合、削除または削除パスを提供する。ヘルス イベントはリリースの不調を分離することなく、ユーザーの行動を2番目のデータベースにするのを避ける。
ストア ダッシュボードは、すべての情報をすぐに提供することはできない。アプリ ストアとプレイ コンソールのテレメトリは、24-72 時間のレポートのギャップを残す可能性があるため、ストアの信号とアップデーターの状態、リリース ID、デバイス側の失敗イベントと組み合わせる。 Google Play Console のレポートドキュメント Google Play Console のレポートドキュメントは、遅延結果を解釈する際に考慮すべきレポートのコンテキストについて説明しています。
リリース前に、各新しい権限が明確な目的を持つか、各ログフィールドが所有者を持つか、アップデーターが不信頼または互換性のないバンドルを拒否するかを確認してください。曖昧な境界はリリースブロッカーです。信頼またはプライバシー違反を露呈する信号が発生した場合、まず配信を停止し、次に原因となったリリースまたは構成を修正してください。
健康信号がトリガーされたときの修正とロールバック
健康信号は、安全なアクションにつながる場合にのみ意味があります。インシデントが発生する前に、チームがまだ明確に考えているときに決定木を書きましょう。
- 1 つのリリースまたはコホートでクラッシュまたは ANR のレグレッションが発生した場合: そのチャネルを停止し、影響を受けたバージョンと安定したコホートを比較し、ネイティブシェルが互換性のある場合にバンドルをロールバックしてください。
- ヘルスエンドポイントが 503 を返した場合: アプリのロールアウトを停止し、失敗した重要な依存関係を修復してください。サービスを再起動することで問題を解決するかもしれませんが、バックエンドのダウンタイムを隠すためにアプリのロールバックを使用してはいけません。
- クラッシュが正常なままの重要なジャーニーが失敗した場合: 影響を受けた機能またはチャネルを無効化し、レスポンスの形状と構成を調べ、次に修正されたバンドルを配信してください。
- アップデートのインストールまたは起動の検証が失敗した場合: 前のバンドルを有効にし、リリースを不正確にし、署名、互換性、またはアセットの完全性を調べる。
- ネイティブのパーミッションまたはプラグインの動作が間違っている: ライブのJavaScriptのアップデートが十分ではない場合、修正がネイティブのcode、マニフェストの変更、特権、または新しいパーミッションの宣言を必要とする場合、ストアのリリースを準備する。
The Capacitorライブアップデートのロールバック戦略 は、緊急事態の際に発見されるページではなく、ランブックの部分でなければならない。アップデータが安定してインストールまたは起動の失敗を検出できる場合、自動保護は適切である。ユーザーが起動を完了できるが、重要な旅程で失敗する場合、フルなインシデントは依然として必要である。

このプロセスを正式化する商業的圧力は明らかである。モバイルアプリケーションテストサービス市場は2025年で 7億7000万ドル と推定され、2031年までに 19億8400万ドルに達し、17.09%のCAGRで成長することが予想される。同時に、Apple App Storeの拒否率は約 2024年における24.9%市場とストアのレビューデータによると 。 これらの数字は、品質チェックを任意と見なすコストを強調するものであり、エンジニアリングの判断を置き換えるものではない。インシデントが発生した後、タイムラインを保存し、最も早くアクション可能なシグナルを特定し、どのレバーが機能したかを記録し、欠落しているチェックをリリースゲートに変換する。 成熟したアプリケーションヘルスチェックは、単に失敗を報告するのではなく、次の失敗を検出、抑制、逆転させるのに役立つようにする。
CapgoはElectronチームと共にライブアップデート、ターゲットチャンネル、ロールアウト、失敗のテレメトリ、デバイスごとのログ、ロールバック保護を提供し、実行時ヘルスシグナルがリリース決定を導くようにする。 Visit
Capgo gives Capacitor and Electron teams signed live updates, targeted channels, rollout and failure telemetry, per-device logs, and rollback protection so runtime health signals can drive release decisions. Visit Capgo このプレイブックに記載されているアプリケーションヘルスチェックと対策コントロールをアップデートパイプラインと接続するには、ここに移動してください。