そのインシデントは、アプリケーションヘルスチェックを疎かにする弱点を明らかにしました。
__CAPGO_KEEP_0__ アプリケーションヘルスチェック ダッシュボードのレビューとして。 健康的なリリースは、単にクラッシュしないだけではありません。 それは、早く始まる、重要な画面をレンダリングする、重要なジャーニーを完了する、正しいバックエンドバージョンに到達する、遅延ストアデータが追いつく前に、オンコールエンジニアが行動できるように十分なテレメトリを提供する必要があります。
目次
- 金曜日の午後、始まるこのプレイブック
- ユーザーの痛みを予測する健康基準を定義する
- 今週にワイヤーすることができる実行時チェック
- ユーザーが問題を経験する前に、問題を検出するヘルスエンドポイントとCIチェック
- アップデート、アップデーター、ストアとデバイスの間の見えざる部分
- JavaScript アプリのセキュリティ、パーミッション、テレメトリ ハイジーニング
- 健康信号がトリガーされたときの対処とロールバック
金曜日の午後、インシデントが始まるプレイブック
最初のレポートは、一般的で曖昧なものであることが多い。 “チェックアウトが一部のユーザーで機能しない”という報告が来る。サポートはいくつかのスクリーンショットを持っており、エンジニアは最近のバンドルを持っており、ストアのコンソールでは明らかなレグレッションも見られない。チームはログを比較し、1 つのデバイスでフローを再現し、更新状態、バックエンドのレスポンスの形状、古いネイティブシェルの組み合わせに依存する失敗を発見する。
それがデバッグセッションではない。リリースシステムの失敗だ。
大規模アプリストアのダッシュボードは、 24 時間でほとんどの KPI に遅れ、クラッシュと ANR のレートについては 72 時間まで遅れる、というのは、ストアのテレメトリ デリーエンドポイントに基づくものだ。 そのダッシュボードは、傾向分析に役立つものの、ライブインシデントの際のロールバックのトリガーとしては、まだ遅すぎる。
実用的なルール: ストアコンソールはレポートの遅延後に起こったことを教えてくれる。アップデーターとランタイムのテレメトリは、現在のリリースが何をしているのかを教えてくれる必要がある。
Aの定期的な健康チェックはチームに3つのレベルの証拠を提供します:
- 実行時品質: クラッシュ、ANR、起動動作、画面レンダリング、エラー、リソース圧力。
- ユーザー結果: ログイン完了、チェックアウト成功、支払い確認、ユーザーが成功または失敗と認識する他のジャーニー。
- リリース配信: 採用、失敗したインストール、ブロックされたデバイス、チャンネル動作、ロールバック状態。
各レイヤーには対応する運用レバーが必要です。クラッシュリグレッションはロールアウトを停止したり、JavaScriptバンドルをリバートしたりする必要があります。失敗したバックエンド依存関係にはサービスリメディエーションが必要ですが、アプリロールバックではありません。更新パスが壊れた場合はチャンネル制御とデバイスレベルでの調査が必要です。
実際の対応はタイムラインから始まるべきであり、非難の行為ではありません。バンドルの公開日、受信したチャンネル、最初の失敗したジャーニーの出現日、影響を受けたバージョンを記録し、次に モバイルチームのインシデント対応ガイド を使用してオーナーを割り当て、証拠を保存し、安全なアクションはチャンネル停止、ロールバック、またはネイティブリリースかどうかを決定する。
このプロセスの目的は単純です: silentaisharu shibō o kasanete, futsū shōhin to shizen no kōdō o chikau . Sono mieru mirai no kenkyū ni tsuite wa, sono kōkai no kōchiku o tsukamu.
Kankyō hyōji no kijun o aratamete
App no kankyō hyōji no kijun o aratamete
App no kankyō hyōji no kijun o aratamete
- App no kankyō hyōji no kijun o aratamete App no kankyō hyōji no kijun o aratamete App no kankyō hyōji no kijun o aratameteApp no kankyō hyōji no kijun o aratamete App no kankyō hyōji no kijun o aratameteApp no kankyō hyōji no kijun o aratamete
- App no kankyō hyōji no kijun o aratamete フリーズしたインターフェイスはログイン、チェックアウト、または支払い確認の実行をブロックすることなくクラッシュを生成しない。バージョンとフローをグループ化し、WebViewの動作、プラグインの呼び出し、ネイティブブリッジの動作を確認して、メインスレッドをブロックする可能性のあるものを確認する。修正はcodeまたはCIに属するかもしれず、ロールアウトのスイッチは一時停止である。
- 起動と画面の準備状態。 インタラクティブになるまでの時間を測定し、プロセス起動のみではありません。シェルが早く開くが、最初の有用な画面が空白のままだとまだ不健康です。CIのレグレスションのための閾値を設定し、失敗したときにデバイスのトレースを検査する。
- 重要な旅の成功。 ログイン、検索、チェックアウト、支払い、同期、ログアウトには明示的な成功イベントが必要です。HTTPレスポンスはユーザーが確認に到達したことを証明するものではありません。ドロップは影響を受けたフローを特定する前に誰もロールバックを選択しないようにする必要があります。

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

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

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

このプロセスを正式化する商業的圧力は明らかである。モバイルアプリテストサービス市場は2025年で $7.70億 と推定され、2031年までに $19.84億に達し、17.09%のCAGRで成長する見通しがある。同時に、Apple App Storeの拒否率は約 24.9% 2024年、 市場とストアのレビューデータによると。 これらの数字は、品質チェックを任意のものとして扱うコストを強調するものであり、エンジニアリングの判断を置き換えるものではない。
インシデントが発生した後、タイムラインを保存し、最初のアクション可能なシグナルを特定し、どのレバーが機能したかを記録し、欠落しているチェックをリリースゲートに変換する。 成熟したアプリケーションヘルスチェックは、単に失敗を報告するのではなく、次の失敗を検出、抑制、逆転させるのに役立つ。
CapgoはCapacitorとElectronチームが署名したライブアップデート、ターゲットチャンネル、ロールアウト、失敗のテレメトリ、デバイスごとのログ、ロールバック保護を提供し、実行時ヘルスシグナルがリリース決定を導くことができる。 Capgoを訪問して 更新パイプラインをアプリケーションヘルスチェックとリメディエーションコントロールと接続する。