【えすぴーえー(しんぐるぺーじあぷりけーしょん)】

SPA(シングルページアプリケーション) とは?

💡 ページを丸ごと読み直さず、必要な部分だけ書き換えるウェブアプリ
📌 このページのポイント
SPA vs 従来型の通信の違い 従来型(MPA) ブラウザ サーバー リクエスト HTML全体 ページ遷移1 HTML全体 ページ遷移2 HTML全体 毎回HTML全体を再読み込み → 画面がちらつく SPA ブラウザ サーバー 初回リクエスト HTML + JS JSがページ構築 画面遷移1 JSONのみ 画面遷移2 JSONのみ 2回目以降はデータだけ取得 → 高速で滑らか SPAは初回にまとめて読み込み、以降はAPIでデータだけやり取りする 例:Gmail・Googleマップ・Slack
SPAは初回にJSを読み込み、以降はAPIでデータのみ取得して画面を更新する
ひよこ ひよこ

SPAって普通のウェブサイトと何が違うの?

ペンギン先生 ペンギン先生

従来のウェブサイトはページを移動するたびに「新しいHTMLサーバーからもらう→画面を丸ごと再描画」を繰り返す。SPAは最初の1回だけHTMLを読み込んで、あとはJavaScriptが必要な部分だけを書き換えるんだ。だから画面の切り替えがスムーズで、スマホアプリのような操作感になるよ。

ひよこ ひよこ

どんなサービスがSPAを使っているの?

ペンギン先生 ペンギン先生

Twitterの旧UI・Gmail・Googleマップなどが代表例だよ。タイムラインスクロールしても画面全体が再読み込みされないし、メールを開いても白い画面にならない。あの「アプリっぽい使い心地」がSPAの特徴なんだ。

ひよこ ひよこ

SEOに弱いって聞いたけど?

ペンギン先生 ペンギン先生

昔の検索エンジンJavaScriptを実行しないから「画面が空」に見えていた。今はGoogleJavaScriptを実行してインデックスするけど、タイムラグや制限がある。だからSEOが重要なコンテンツはSSRHTMLを返す手法と組み合わせることが多いんだよ。

ひよこ ひよこ

SPAの初回表示が遅いのってどうにかならないの?

ペンギン先生 ペンギン先生

いくつか対策があるよ。コード分割(Code Splitting)でページごとにJavaScriptを分けて最初のダウンロード量を減らす方法、SSR/SSGとSPAを組み合わせるハイブリッド方式、Service Workerキャッシュする方法などがある。Next.jsNuxtはこのあたりの最適化を自動でやってくれるんだ。

ひよこ ひよこ

SPAだとブラウザの戻るボタンがうまく動かないことがあるけど、なぜ?

ペンギン先生 ペンギン先生

SPAはページ遷移してもURLが変わらない可能性があるからだね。これを解決するのがHistory API(pushStateやreplaceState)で、React RouterやVue RouterなどのSPAルーターは内部でこれを使って疑似的なページ遷移を実現している。ルーターの設定が不十分だと「戻るボタンでアプリのトップに戻ってしまう」という問題が起きるから、SPAのルーティング設計は意外と奥が深いんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SPA」って出てきたら「ページ全体を読み直さずJavaScriptで画面を切り替えるウェブアプリの方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Single Page Application」 = 単一ページのアプリケーション
💬 「Single(単一の)+ Page(ページ)+ Application(アプリケーション)」。HTMLファイルは1枚だけで、その中身をJavaScriptが動的に書き換えることから命名されたよ
← 用語集にもどる