SPA
ページ遷移なしに動的にコンテンツを更新する Web アプリケーションのアーキテクチャ
SPA とは
SPA (Single Page Application) は、最初に 1 つの HTML ページを読み込み、以降のページ遷移をブラウザ側の JavaScript で処理する Web アプリケーションのアーキテクチャである。サーバーからは API (JSON) でデータだけを取得し、画面の描画はクライアント側で行う。Gmail、Google Maps、Twitter が代表的な SPA だ。
MPA との比較
MPA との主な違いを以下に比較する。
| 観点 | SPA | MPA (Multi Page Application) |
|---|---|---|
| ページ遷移 | JavaScript で画面を切り替え (高速) | サーバーから新しい HTML を取得 (遅い) |
| 初期ロード | 遅い (JS バンドルのダウンロード) | 速い (HTML だけ) |
| SEO | 対策が必要 (SSR/SSG) | 問題なし |
| UX | ネイティブアプリに近い操作感 | ページ遷移のたびに白画面 |
| サーバー負荷 | API のみ (軽い) | HTML 生成 (重い) |
SPA の動作フロー
SPA の動作フローを図で示す。
1. ブラウザが index.html を取得 (ほぼ空の HTML)
2. JavaScript バンドル (main.js) をダウンロード・実行
3. React/Vue が DOM を構築し、画面を表示
4. ユーザーがリンクをクリック
5. JavaScript が URL を変更 (History API)
6. 対応するコンポーネントを表示 (サーバーへのリクエストなし)
7. データが必要な場合は API (fetch) でサーバーに問い合わせ
S3 + CloudFront でのホスティング
SPA は静的ファイル (HTML, JS, CSS) だけで構成されるため、S3 + CloudFront でホスティングできる。サーバーが不要でコストが最小限だ。
SPA の課題と対策
SEO
SPA の初期 HTML は空 (<div id="root"></div>) のため、検索エンジンがコンテンツを認識できない。
対策:
初期ロードの遅さ
JavaScript バンドルが大きいと、初期表示が遅くなる。
対策:
メモリリーク
SPA はページ遷移でリロードされないため、イベントリスナーやタイマーの解除忘れがメモリリークの原因になる。React の useEffect のクリーンアップ関数で適切に解除する。
実践的な知識は関連書籍でも得られる。
この記事は役に立ちましたか?
関連用語
SSR/SSG
サーバーサイドレンダリングと静的サイト生成 - Web ページの生成タイミングと場所を制御するレンダリング戦略
SPA ルーティング
SPA でブラウザの URL とコンポーネントの表示を同期させ、ページ遷移なしで画面を切り替える仕組み
React
コンポーネントベースの UI ライブラリで、宣言的な記法と仮想 DOM で効率的な UI 構築を実現する
Next.js
React ベースのフルスタックフレームワークで、SSR、SSG、API Routes を統合的に提供する
バンドラー
複数の JavaScript モジュールを 1 つまたは複数のファイルにまとめるビルドツール
ページネーション
大量のデータを複数のページに分割して返し、API のレスポンスサイズとレイテンシを制御する手法
関連する記事
技術書の帯コピーの世界 - 煽り文句に隠されたマーケティング
「10 万部突破」「現場で使える」「これ 1 冊で完璧」。技術書の帯に書かれた煽り文句の法則と、帯が売上に与える影響を解説します。
チーム開発・マネジメント本ガイド - 技術リーダーが読むべき本
チーム開発、1on1、技術マネジメントを学べる技術書の選び方を紹介。メンバー時代からマネージャーまで、段階別の読書ロードマップを解説します。
深夜 3 時のデプロイ前に読み返したい 1 ページ
本番デプロイの直前、最終確認のチェックリストとして技術書の特定のページが役立つことがあります。緊張の場面で頼りになる「お守りの 1 ページ」の見つけ方と活用法。