MENU

MPA — リクエストごとにHTMLを返す伝統的Web形態

MPA アイキャッチ
MPA

MPA(Multi-Page Application)は、リンクをクリックするたびに新しいリクエストがサーバへ飛び、サーバ側でレンダリングされた完成HTMLでブラウザのページ全体が置き換わる伝統的なWebアプリ形態です。1990年代のCGIから始まり、PHP・Perl・Java Servlet、その後Ruby on Rails(2004年David Heinemeier Hansson氏)やDjango(2005年Lawrence Journal-World社)など、多くのフルスタックフレームワークがMPA前提で発展してきました。SPA全盛期にもECやCMSの現場では現役で、安定運用のしやすさから今も主流の選択肢です。

目次

この記事の目次

  1. MPAの基本動作
  2. MPAが向く用途
  3. 現代的なMPAの拡張
  4. SPAとの比較で見る向き不向き
  5. まとめ

MPAの基本動作

MPAの基本動作

MPAの動作は単純で見通しがよいのが特徴です。ユーザーがリンクをクリックすると、ブラウザは新しいURLに対してGETリクエストを送り、サーバ側のルーターがそのURLに対応するコントローラ(Railsで言うController、Djangoで言うView)を呼び出します。コントローラはDBや外部APIから必要なデータを取得し、テンプレートエンジン(ERB、Twig、Bladeなど)で値を埋め込み、完成したHTMLを返します。

ブラウザはレスポンスを受け取るとページ全体を新しい内容で置き換えるため、JavaScriptの状態は基本的にリセットされ、毎回新しいフォームや一覧から開始する形になります。この明快さがMPAの安定性を支えており、メモリリークやSPA特有の状態破綻が起きにくい一方で、「画面遷移のたびにヘッダもフッタも再描画される」「アニメーションが途切れる」といった見え方の制約が生じます。近年はTurbo(旧Turbolinks)やHTMX、View Transitions APIで滑らかさを補う動きが活発です。

MPAが向く用途

MPAが向く用途

MPAは「ページごとに独立した情報を持つ」サイトと相性が良い構造です。ニュースサイト、ブログ、企業のコーポレートサイト、求人検索、ECの商品ページなど、ユーザーがURLを直接共有したり検索エンジンから流入したりするケースでは、サーバが返した完成HTMLがそのままSEOやSNSプレビューに使われます。WordPress、Shopify、楽天市場、Amazonなど現実の大規模サイトの多くは依然としてMPAをベースに構築されています。

業務系のCRUD画面でもMPAは強力です。社内システムでは複雑なリアルタイム性より、「入力→送信→次の画面」というシンプルな遷移と、サーバ側のセッションでステートを持つ方が事故が少なく、RailsのScaffoldやDjango Adminのように標準機能だけで管理画面を作れます。認証・ロール管理・CSRF対策・監査ログといったセキュリティ要件もフレームワークの土台に組み込まれており、新規メンバーが入っても挙動を追いやすい点が長期運用で効いてきます。

現代的なMPAの拡張

現代的なMPAの拡張

「MPAは古い」というイメージは少しずつ覆っています。Railsチームが提供するHotwireの中核Turboは、リンクやフォーム送信を内部でfetchに置き換え、サーバが返したHTMLの差分だけを置き換えることでフルリロードの体感を抑えます。Carson Gross氏が2020年に公開したHTMXは、属性ベースで「ボタンを押したらこのURLからHTML断片を取りに行き、この要素を差し替える」と書けるライブラリで、JavaScriptを書かずにSPAに近い動きを得る選択肢として注目を集めています。

ブラウザ標準でもView Transitions APIが2023年にChromeで実装され、ページ遷移時にネイティブのアニメーションを差し込めるようになりました。これらの技術を組み合わせると、MPAの長所であるサーバ中心の単純さを保ちながら、見た目の滑らかさやインタラクション速度をSPAに近付けられます。「JSヘビーなSPAは要らないが、画面遷移の白チラつきも避けたい」というプロジェクトでは、MPA + Turbo/HTMX + View Transitionsという構成が現実解として広く採用されています。

SPAとの比較で見る向き不向き

SPAとの比較で見る向き不向き

MPAとSPAは対立概念のように語られがちですが、強みと弱みが綺麗に裏返しの関係にあります。MPAは初回表示が速く、SEOやSNSプレビューが標準で扱え、サーバ側で完結するためデバッグやログの追跡が容易です。対するSPAは初回ロードに時間がかかるものの、その後の画面遷移やインタラクションは滑らかで、ユーザーが数十分以上滞在する管理画面やコラボツールでは生産性に直結します。

判断軸は「ユーザーの主目的が何か」です。コンテンツの閲覧と共有が主目的なメディアやECはMPAが向き、ログイン後の業務遂行や創作が主目的なSaaSやエディタはSPAが向きます。近年はAstroのように「基本はMPA、必要箇所だけSPA的に動く」アイランド型のフレームワークも登場しており、二択ではなくページごとに最適な方式を選ぶ折衷案が増えています。プロジェクト初期にはこのトレードオフを明文化し、運用フェーズで判断が揺れないよう設計指針を残しておくと安心です。

まとめ

MPAはリンクごとにサーバがHTMLを返す伝統的なWebアプリ形態で、PHPやRails、Djangoを土台に長年実績を積んできた安定運用の選択肢です。TurboやHTMX、View Transitions APIといった現代的拡張を組み合わせれば、見た目の滑らかさを犠牲にせずに済み、コンテンツ中心のサイトでは依然として最有力の構成といえます。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次