用語解説

SPAとは?HTML共有・AI生成サイトでの意味をやさしく解説

AIでWebアプリを生成してチームに共有しようとしたとき、URLを渡しただけでは動かない、あるいはビルドフォルダをそのまま送ったら相手が開けなかった、という経験はないだろうか。その原因の多くはSPA(Single Page Application)の仕組みにある。SPAの特性を知ることで、共有の落とし穴を避けられる。

ひとことで言うと

SPA(Single Page Application)とは、最初の読み込み時に1枚のHTMLとJSバンドルをすべてダウンロードし、以降のページ遷移はJavaScriptがURLを書き換えて画面を切り替える方式のアプリだ。React Router、Vue Router、Tanstack Routerなどがこのルーティングを担う。

ユーザーが体感するのはネイティブアプリに近い画面遷移の滑らかさだが、その裏でHTTPリクエストは1回しかサーバーに送られていない。この構造が「HTMLを1枚共有すれば動く」という期待と実態のギャップを生む。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

HTML共有で関係する場面

SPAをビルドしてできた`index.html`をファイルとして相手に渡すと、`file://`プロトコルでの動作制限に加え、画像やCSSなどのアセットパスが合わずに表示が崩れることが多い。さらに内部リンクをクリックすると`file://`のままURLが変わってファイルが存在しないと判断され、何も表示されなくなる。

ギガサイト便でSPAをアップロードする際は、ビルドフォルダ(distやbuild)全体をzipにして送るだけでよい。配信側がHTTPS URLを発行するため、JSルーターが正常にURLを書き換えられ、ページ遷移も機能する状態でレビューしてもらえる。

よくある誤解

「SPAはサーバーが必要」という誤解がある。実際にはSPAのビルド成果物は完全な静的ファイルであり、サーバーサイドの処理は不要だ。ただし、どのURLへの直接アクセス(ディープリンク)でも`index.html`を返すよう設定する必要があり、それができない環境では404が出る。

「SPAは1ページしか作れない」という勘違いも多い。ページ数に制限はなく、複数のURLに見えるページを実装できる。ただし実態は全ページが同一のHTMLファイルから生成されており、検索エンジンからのアクセスや共有URLの扱いがMPAとは異なる。

安全に使うための注意点

SPAのビルドに含まれるJSバンドルには、開発中に使ったAPIのエンドポイントURLや`REACT_APP_`プレフィックスの環境変数が含まれることがある。共有前に`strings dist/assets/*.js | grep -i key`などのコマンドでバンドル内の文字列を確認し、機密情報が含まれていないかをチェックする。

SPAは認証前のルーティングをJS側で制御するため、認証ページをスキップするURLを直接入力されても、ガードロジックが未実装なら保護されないリスクがある。共有URLを受け取った人が認証不要でアクセスできる範囲を事前に確認し、機密コンテンツがある画面は共有URLに含まれないよう設計する。

よくある質問

SPAをアップロードしたが、ページ内リンクをクリックすると404になる。どう対処すればいいですか?

配信先がすべてのパスに対して`index.html`を返す設定(フォールバック)になっていないことが原因です。ギガサイト便はこれを自動で処理します。Netlifyなら`_redirects`ファイルに`/* /index.html 200`と書けば解決します。

SPAと静的HTMLサイトでは、共有URL発行の速さに違いがありますか?

配信の速さはファイルサイズ次第です。SPAはJSバンドルが大きくなりがちなためアップロードに数秒余分にかかることがありますが、ギガサイト便は静的ファイル配信なのでURLが発行されてからの表示速度に差はほぼありません。

AI生成のSPAにはどのフレームワークが多く使われていますか?

v0やBoltはNext.js(App Router)、LovaはReact+Vite、GeminiのCanvas出力はReact CDNが多い傾向です。フレームワークによってビルドコマンドと出力先フォルダが異なるため、確認してからzipを作ってください。

関連記事

「用語解説」の記事をもっと見る →