- SPAとSSRは「ログの意味」がまったく違います
- 従来のWeb(MPA/SSR)のログ構造
- SPAで起きる変化
- なぜ障害調査が難しくなるのか
- 必要になる新しいログ:フロントエンドログ
- 重要になる「画面遷移ログ」
- SSRでもログ設計は変わる
- よくある失敗
- 結局ログとは何か
SPAとSSRは「ログの意味」がまったく違います
Webシステムを運用し始めてから、初めて気づくことがあります。
それは「ログが読めない」という問題です。
特にSPA(Single Page Application)へ移行した直後、多くのチームが同じ混乱を経験します。
- アクセスは増えているはずなのにログが減る
- ユーザがどのページを見たかわからない
- 障害が再現できない
結論から言うと、これは異常ではありません。
SPAではアクセスログがアプリケーションログとして機能しなくなるためです。
SSRとSPAは描画方法の違いだけでなく、「観測できるイベント」が根本的に変わります。
従来のWeb(MPA/SSR)のログ構造
まずSSRや従来のMPA(Multi Page Application)のログを見てみます。
サーバのアクセスログには次の情報が記録されます。
- URL
- ステータスコード
- レスポンス時間
- ユーザエージェント
- リファラ
例えば:
/products/1
/products/2
/cart
/checkout
これだけでユーザの行動がほぼ追跡できます。
なぜなら、ページ遷移=HTTPリクエストだからです。
つまりアクセスログは単なる通信ログではなく、ユーザ行動ログとして機能していました。
SPAで起きる変化
SPAではページ遷移が発生しません。
ブラウザ内でルーティングが行われます。
サーバに届くリクエストは次のようになります。
- 初回:GET /
- 以降:APIリクエストのみ
つまり、ユーザが10ページ移動してもアクセスログは1行です。
その代わり増えるのがAPIログです。
/api/products
/api/cart
/api/user
ここで問題が発生します。
APIログは「機能の呼び出し」であって「画面遷移」ではありません。
カートAPIが呼ばれても、それが
- カート画面表示
- 数量変更
- 自動同期
のどれか判断できません。
なぜ障害調査が難しくなるのか
SSRでは、エラー発生時に次がわかりました。
- どのURLで
- 誰が
- いつ
- どの画面で
SPAではこれが消えます。
代わりに残るのは
- どのAPIが失敗したか
だけです。
結果として「ユーザが何をしていたか」が追えません。
必要になる新しいログ:フロントエンドログ
SPAではサーバログだけでは足りません。
ブラウザ側のログ収集が必要になります。
例えば:
window.addEventListener('error', e => { sendLog({ message: e.message, url: location.pathname, stack: e.error?.stack }) })
これにより
- どの画面で
- どの操作中に
- 何が起きたか
を取得できます。
重要になる「画面遷移ログ」
SPAでは明示的に画面遷移を記録します。
router.afterEach((to) => { sendLog({ type: 'pageview', path: to.path }) })
これはアクセスログの代替です。
これを行わないと、分析も障害調査も困難になります。
SSRでもログ設計は変わる
SSRだから安心、というわけでもありません。
最近のSSRはAPI中心の構成です。
- BFF(Backend for Frontend)
- GraphQL
- マイクロサービス
この構成では1ページ表示の裏で複数APIが動きます。
単一のアクセスログでは原因を追えません。
そのため必要になるのがリクエストIDです。
const requestId = crypto.randomUUID() res.setHeader('x-request-id', requestId)
そしてすべてのログに含めます。
- CDNログ
- SSRログ
- APIログ
これで初めて1回の表示を追跡できます。
よくある失敗
APIログだけで分析しようとする
SPAではほぼ必ず失敗します。
APIはユーザ操作と1対1対応しません。
エラー監視をサーバだけに置く
実際のエラーの多くはブラウザで発生します。
- JavaScript例外
- Hydrationエラー
- ネットワーク失敗
これらはサーバログに残りません。
結局ログとは何か
SSR時代、ログは「サーバの記録」でした。
SPA時代、ログはユーザ体験の記録になります。
重要なのはリクエスト数ではなく、
- どの画面で
- 何をしようとして
- どこで失敗したか
です。
ログ設計はインフラの話ではありません。
アプリケーション設計の一部です。
SPAへ移行するとき、レンダリングや状態管理は議論されますが、ログ設計は後回しにされがちです。
しかし運用が始まると、最初に困るのはログです。
画面が動いていても、観測できなければ運用できません。
SPAとSSRの違いを本当に理解するとは、「表示方法」ではなく観測方法の違いを理解することです。