
あなたの稼働時間チェックはアプリが正常であると言っています。サーバーは0.5秒以内に200で応答し、HTMLが届き、チェックは緑になりました。一方でユーザーはスピナーを見つめています。JavaScriptバンドルはアプリシェルをレンダリングし、その後、遅い注文APIがメインビューを空のままにしているからです。あなたの監視では何も検出されませんでした。なぜなら、あなたの監視ではブラウザが実行されていないからです。
このギャップが、現代のウェブアプリケーション監視の根本的な問題です。React、Vue、Angularで構築されたシングルページアプリは、最初のHTMLにはほとんど何も提供しません。ユーザーが実際に得る体験はクライアント側で組み立てられます。JavaScriptがフレームワークを起動し、クライアントサイドルーティングでページ読み込みなしにビューを切り替え、複数のAPI呼び出しでコンテンツを埋めます。これらのすべてのステップで失敗や遅延が発生しても、HTTPチェックは完璧な状態を報告します。
本ガイドでは、SPAアーキテクチャにおけるブラウザ監視の意味、従来のチェックが見逃す重要な失敗、追跡すべき指標、ユーザーが報告する前に問題を検出できるシングルページアプリ監視の段階的な設定方法を解説します。
現代のウェブアプリにおけるブラウザ監視の意味
ブラウザ監視とは、ウェブアプリケーションを実際のブラウザで定期的にロードし操作してテストし、制御された場所から実際に表示された内容を測定することです。「サーバーは応答したか」ではなく、ユーザーが気にする唯一の質問「ページは使えるようになったか、そしてその速度はどうか?」に答えます。
この区別は現代アプリの処理分担方法から重要です。サーバーサイドレンダリングされたサイトでは、サーバーの応答が体験そのものなので、応答のチェックが体験のチェックになります。SPAではサーバーはほとんど骨格を渡すだけです:ほぼ空のHTML文書とスクリプトタグ。解析、フレームワークの起動、ルート解決、データ取得、レンダリングはすべてブラウザで行われます。HTTPチェックは骨格を検証し、実ブラウザチェックがアプリケーションを検証します。これが従来の監視が現代ウェブアプリケーションには不十分なコア理由です。
合成型のブラウザ監視では、アプリ内でスクリプト化されたセッションをスケジュールで実行します:ダッシュボードの読み込み、ログイン、検索の実行、カートに追加、チェックアウト。各実行はステップごとのタイミング、ページが行ったすべてのリクエストのウォーターフォール、失敗の記録と場所、ブラウザコンソールのエラーをキャプチャします。実行が失敗した場合、どのステップが壊れ、どのリクエストが原因で、ユーザーが何を見たかがわかります。役立つ主張はボタンがクリック可能であることではなく、注文確認番号がレンダリングされ、保存されたレポートがリストに出現し、権限変更が有効になったことです。ブラウザ監視はスクリーンだけでなく状態を検証するときに真価を発揮します。
なぜシングルページアプリは従来の監視を破壊するのか
SPAの3つのアーキテクチャ的特徴が大半の監視盲点を生み出しています:コンテンツを含まない初期ペイロード、ネットワーク的にナビゲーションが発生しないこと、リクエスト終了とユーザーが見る状態が分離しているレンダリング層です。それぞれが従来ツールの仮定を覆します。
First Paintはブラフである
ReactやVueのアプリをロードすると、ブラウザはDOM解析完了(DOMContentLoaded)イベントをほぼ即座に発火します。文書が非常に小さいためです。この時点でユーザーはほとんど何も見えません。フレームワークはまだバンドルのダウンロードと実行、コンポーネントツリーのマウント、データ取得、レンダリングを行わなければなりません。ドキュメントロードイベントに基づくメトリックは、アプリがクリック可能になる前に勝利を宣言します。「読み込み完了」と「ユーザーが使える」は大きく異なり、SPA監視が操作すべきまさにその部分です。スケルトンローダーはこのブラフを悪化させます:灰色のプレースホルダーは優れたLargest Contentful Paintスコアを示すかもしれませんが、実際にビューが使えるためのデータ取得はまだ始まっていないため、アプリは高速に見えて機能的に停止しています。重要なのはブラウザがペイントした時刻ではなく、ルートがユーザー固有の十分なデータを得られた時刻です。
クライアントサイドルーティングはナビゲーションを不可視にする
ユーザーが製品リストから製品詳細ビューにクリックしても、ネットワーク的なナビゲーションは起こりません。ルーターがクリックをインターセプトし、History APIを使ってURLを書き換え、コンポーネントをその場で入れ替えます。これをソフトナビゲーションと呼びます。ブラウザはページロードやナビゲーションタイミングを記録しません。ページロードをカウントする監視はユーザーが1回到着して何もしなかったと見なし、チェックアウトルートに9秒かかっても気づきません。同じ盲目状態が分析にも影響します。SPAで10製品を見たユーザーは、フルページロードのみをカウントするツールではシングルページバウンスとしてカウントされます。ルート遷移は意図的な測定が必要で、遷移を開始したクリックから新しいビューのコンテンツが表示されるまでを追います。どう計測するかはルーティングとレンダリングのアーキテクチャにより異なります:純粋なクライアントサイドレンダリング、サーバーサイドレンダリングとハイドレーション、ハイブリッド構成など、それぞれ遅延の隠れ場所が変わります。
レンダーレイヤーは応答とユーザーが見るものを分離する
フレームワークは成功した応答と視覚的UIの間にレンダーレイヤーを配置します:ReactやVueはコンポーネントの出力を調整してDOM更新をコミットし、Angularの変更検出はデータがテンプレートに到達するタイミングを決定します。コンテンツはAPI応答到着の少し後に現れるか、レンダリングエラーがエラーバウンダリーで吸収されると表示されないこともあります。監視においては、きれいなAPI応答はほとんど証明になりません:エンドポイントは完璧なJSONを返しても、それを表示するコンポーネントが静かに失敗している可能性があります。チェックはレスポンスコードではなくレンダリングされた出力に基づくべきです。レンダーレイヤーはまた壊れやすいスクリプトに制裁を加えます:CSS-in-JSライブラリはビルドごとに変わるハッシュ化されたクラス名を生成し、それをターゲットにするチェックは毎回のデプロイで壊れます。data-testid属性やARIAロールなどの安定したフックが、ブラウザチェックの維持を可能にします。

React、Vue、Angularに特有の故障モード
3大フレームワークは盲点を共有しますが、それぞれ異なる言語で失敗し、監視はターゲットのアプリを知ることでより効果的になります。
- React。 エラーバウンダリーはクラッシュしたコンポーネントをフォールバックUIと置き換えます。これがアプリを生かし続ける一方で失敗を隠します:失敗したリクエストも空白のページもなく、ただ機能を静かに失ったビューが出ます。遅延ロードされたルートは2つ目の罠で、動的インポートの失敗はルートを読み込み状態に留めます。コンテンツのアサーションは両方を検知し、ステータスコードはどちらも検知しません。Reactアプリケーション監視の課題は独立したチェックリストに値します。
- Vue。 Vueのリアクティビティシステムは依存関係を自動追跡し、深くネストしたリアクティブオブジェクトや長いウォッチャーチェーンは小さな状態変化を更新の連鎖へと拡大させます。症状はエラーではなく鈍いインタラクションで、Vue.jsアプリケーション監視はエラー数よりもインタラクションのタイミングに依存します。
- Angular。 Zone.jsはイベント後にコンポーネントツリー全体で変更検出をトリガーし、重いテンプレートや最適化されていないバインディングは単一のリクエスト失敗ではなくすべての操作を少しずつ遅くします。合否結果だけでなくインタラクションのレイテンシトレンドを観察します。
共通点:フレームワークの問題は失敗したリクエストをほとんど生みません。遅延と欠落コンテンツを生み、これこそが実ブラウザチェックが測定しHTTPチェックが検知できないものです。
API依存の問題
SPAではAPIパフォーマンスがユーザー体験です。単一のダッシュボードビューは複数のエンドポイントから自己組み立てされます:セッション、ユーザープロフィール、権限、主要データ、通知。最も遅いブロッキング呼び出しがビュー全体をゲートし、ユーザーは「1つのエンドポイントが劣化している」とは感じません。アプリが壊れていると感じます。
遅いトークンリフレッシュがそれに続く認証済み呼び出しをすべて遅延させます。推奨やカートのエンドポイントがタイムアウトします。ページは空のセクションで描画され、ユーザーはリロードし、そのリロードは苦戦中のサービスへの負荷を倍増します。各サービスは単独では正常に見えました。共に失敗しているのはブラウザだけが見ていました。
サードパーティ依存はさらにリスクを高めます。決済プロセッサー、認証プロバイダ、分析タグ、チャットウィジェットはすべて同ページに読み込まれ、そのどれもが管理できないスケジュールで劣化する可能性があります。ベンダーのインフラは直せませんが、ユーザーに見つかる前に発見はできます。
実用的な答えは2つのレベルで監視することです。重要なエンドポイントをWeb API監視で直接監視し、応答時間、エラー率、ペイロードの正確性をデータとして得ます。次にブラウザチェックで同じエンドポイントをコンテキスト内で監視します。300msのエンドポイントがレンダリングをブロックすると800msのエンドポイントよりユーザーに悪影響です。ウォーターフォールチャートは両者が交わる場所です。ページが行ったすべてのリクエストが順にタイミング付きで示され、どの呼び出しがビューを実際に拘束したかがわかります。
実用的なインシデントルール:直接APIチェックが遅くかつブラウザステップも遅いならサービス側から調査開始。APIチェックは正常でブラウザステップが遅いならクライアント側のブロッキングを探す:バンドル実行、ハイドレーション、サードパーティスクリプト、並行すべき呼び出しが直列化されているウォーターフォールなど。両者とも正常でユーザーの苦情があれば、モニターを疑う前に地域差や認証済みのロールを比較します。
重要なブラウザ監視メトリクス
現代ウェブアプリのスコアボードは2つの半分から成ります:Googleが読み込み体験を表すCore Web Vitalsと、VItalsがカバーしないSPA専用のタイミング測定です。
| メトリクス | 意味 | 良好(75パーセンタイル) |
|---|---|---|
| Largest Contentful Paint (LCP) | 主要コンテンツがどれだけ速く表示されるか | ≤ 2.5 秒 |
| Interaction to Next Paint (INP) | 訪問全体を通したクリック、タップ、キー操作に対する応答性 | ≤ 200 ms |
| Cumulative Layout Shift (CLS) | 読み込み中にコンテンツがどれだけ動くか | ≤ 0.1 |
閾値はGoogleの公表ターゲットで、ページ読み込みの75パーセンタイルで評価されています。注目すべき廃止事項:First Input Delay (FID)は2024年3月に廃止され、INPが応答性のバイタルとして置き換えました。INPはより厳しい指標で、最初の操作前の遅延だけでなく訪問中のすべてのインタラクションのレイテンシを測ります。ダッシュボードにまだFIDが表示されていれば、Googleがもはや使用していないメトリクスを示していることになります。
Core Web Vitalsはページロード向けに設計されているため、最初の印象を表現する一方、ユーザーがアプリ内で過ごす時間の多くを占めるソフトナビゲーションによる体験にはほとんど言及しません。SPA固有の計測で全体像を補完します:
- ルート変更時間。 トリガーしたクリックから新しいビューのコンテンツがレンダリングされるまでの時間。重い管理ルートと軽い設定ページでは閾値を共有すべきでないため、ルートごとに追跡します。
- ステップごとのトランザクションタイミング。 スクリプト化されたジャーニー(ログイン、検索、カート追加、支払い)で各ステップのタイミング基準を持ち、遅延がどのステップで起きたかを示します。
- エンドポイントごとのAPI応答時間とエラー率。 アプリ全体の平均ではなくエンドポイントごとに区別し、レンダリングをブロックする1つの遅い呼び出しを隠さないようにします。
- JavaScriptコンソールエラー。 チェック中に発生する未捕捉例外とリソース読み込み失敗は機能が静かに劣化している早期警告です。
- サードパーティのブロッキング時間。 あなたが運用しないスクリプトやサービスにどれだけロードや操作経路の時間を費やしているか。
シングルページアプリを段階的に監視する方法
以下は上記の内容を実践する設定手順です。
ステップ1: 実ブラウザの稼働時間チェックから始める
実ブラウザチェックをアプリの起点URLに対して一定間隔で実行します。HTTPピンとは異なり、バンドルをダウンロードしてJavaScriptを実行し、実ブラウザでページをレンダリングするため、サーバーの不調ではなくアプリの不調で失敗します。これはウェブアプリケーション監視の基盤層であり、安価で頻繁に、アプリ実際に稼働しているかを正直に示します。
ステップ2: 収益やリテンションを生み出すジャーニーをスクリプト化する
サインイン、検索、チェックアウト、製品のコアワークフローなど、3〜5のフローを選びます。EveryStepなどのツールで各ステップをスクリプト化し、ブラウザセッション内の実際のクリック、キーストローク、待機をキャプチャしてスケジュールで再生します。スクリプト化されたジャーニーだけがユーザーの行動通りのクライアントサイドルーティングをテストします。
ステップ3: 安定したセレクターでレンダリングされたコンテンツをアサートする
各ステップで、意味のあるものがレンダリングされたかをアサートします:注文合計が表示され、検索結果行が返り、ダッシュボードのグラフが描画されるなど。存在だけでなく状態を確認します:フォームが有効になると送信ボタンが有効になり、ローディングスピナーがDOMから消えるなど。部署ごとに変わる自動生成のクラス名ではなく、data-testidやARIAロールのような安定属性をターゲットにし、各デプロイ後に誤検知することなくスクリプトを保守可能にします。
ステップ4: その背後のエンドポイントに直接APIチェックを追加する
あなたの重要なビューが依存するすべてのエンドポイントに対して、応答時間の閾値やコンテンツ検証を行う個別チェックを設置します。サードパーティサービスも含みます。ブラウザチェックが失敗した場合、エンドポイントのデータで問題がフロントエンドかAPIかベンダーかを数秒で判別できます。
ステップ5: ユーザーがいる地域から実行する
起点近くでは速いバンドルも海を越えると遅延しがちで、CDNやDNSの問題は地域特有なことが多いです。実際のトラフィックが来る地域からチェックを実行し、シンガポールのユーザーが感じる遅延を捕捉し、データセンターが感じない遅延を見逃さないようにします。
ステップ6: セッションではなくステップ単位でアラートを出す
ジャーニー全体のタイムアウト1つではなく、ステップごとに閾値を設定し、単一の遅い実行より持続的な劣化を通知します。チェックアウトステップが2秒から6秒に遅延した場合は、スクリプトは技術的にはまだ成功していても、誰かを起こす価値がある問題です。適切に調整された監視アラートは、信頼できるシステムとミュートするだけのシステムの違いです。
SPAにおける合成監視と実ユーザー監視の比較
実ユーザー監視(RUM)はアプリにJavaScriptスニペットを組み込み、実際の訪問者が経験したことを報告します。その強みは幅広さで、実際のデバイス、ネットワーク、フィールドデータに基づくCore Web Vitalsを提供します。一方で、トラフィックが必要という構造的制限があります。ユーザーが使う前の午前3時の壊れたチェックアウトは見えず、ログインが必要なフローでは計測不可で、十分なユーザーが体験して初めて劣化を表面化させます。
合成監視はこれを逆転させたモデルで、管理されたスケジュールでスクリプト化されたチェックにより、ユーザーなしで失敗をキャッチし、週次で比較可能なきれいなベースラインを生成します。特にSPAでは、合成ブラウザチェックはルーティング、レンダリング、API依存をユーザーではなくあなたのスケジュールでテストするレイヤーです。SPAではページングアラートを合成で設定し、調査レイヤーとしてRUMを維持します:RUMは何人の実ユーザーがどのデバイスで被害を受けたかを示し、合成はログイン、検索、チェックアウトが今壊れているかどうかを誰も使っていなくても答えます。GoogleのChrome UXレポートのようなフィールドデータは、それらのチェックを実世界のデバイスとネットワークの広がりで補完します。
まとめ
現代のウェブアプリは処理と失敗をブラウザに移しました。初期HTMLは何も証明せず、ナビゲーションはページロードなしに起こり、すべてのビューは連鎖したAPI呼び出しに依存し、それぞれが静かに失敗する可能性があります。監視も変わる必要があります:レンダリングされたコンテンツを検証する実ブラウザチェック、収益を生むルートを通るスクリプト化ジャーニー、その下のエンドポイントを直接チェックし、ユーザーが感じる指標(LCP、INP、CLS、ルート変更、ステップごとのタイミング)に注目。現在の監視がレンダリングされたページと背後に200が返っている空のシェルを区別できなければ、まずそこを埋めるべきギャップです。
実ブラウザであなたのWebアプリを監視
スクリプト化された実ブラウザ合成監視を、グローバルネットワークからReact、Vue、Angularアプリに対して実行し、ユーザーと同じようにすべてのステップ、リクエスト、レンダリングを確認しましょう。無料トライアルを開始。