【ナビゲーションエーピーアイ】

Navigation API とは?

公開:
💡 ブラウザの「進む・戻る」を自分でプログラムできる、SPAの新しい司令塔
📌 このページのポイント
Navigation API — SPAのページ遷移制御 ユーザー操作 リンククリック / ブラウザバック navigate イベント window.navigation event.intercept({}) 非同期処理・データ取得など DOM更新 / 画面切替 URLはそのまま変更 従来 History API popstate イベント 手動でURL書換え スクロール制御なし 複雑な実装が必要 Navigation API navigate イベント統合 intercept で非同期対応 スクロール自動管理 シンプルな実装 Chrome 102+ 対応。Firefox は実装中(2024)
Navigation APIによるSPAのページ遷移インターセプトのイメージ
ひよこ ひよこ
ペンギン先生、SPAってURLが変わるのにページが再読み込みされないじゃない?あれってどうやってるの?
ペンギン先生 ペンギン先生
従来はHistory APIというものを使ってたんだよ。history.pushState()でURLだけ書き換えて、コンテンツの差し替えはJavaScriptで手動でやる、という感じだったんだ。
ひよこ ひよこ
なんか複雑そうなんだね。Navigation APIって新しいものなの?
ペンギン先生 ペンギン先生
そうだよ!Navigation APIはHistory APIの後継として設計されたもので、window.navigation というオブジェクトを通じてページ遷移を管理できるんだ。2023年頃にChromeが実装し始めて、徐々に普及してきたよ。
ひよこ ひよこ
History APIと比べてどこが便利になったの?
ペンギン先生 ペンギン先生
一番大きいのは navigate イベントだよ。ユーザーがリンクをクリックしたり、ブラウザバックをしたりするたびにこのイベントが発火して、event.intercept()で遷移をインターセプトできるんだ。ローディング中の処理や非同期データ取得を自然に書けるんだよ。
ひよこ ひよこ
インターセプトって遷移を途中で止めて自分の処理を挟めるってこと?
ペンギン先生 ペンギン先生
その通り!たとえばページ遷移前にAPIからデータを取得して、完了してからDOMを更新する、みたいな流れをすっきり書けるんだよ。スクロール位置のリセットやフォーカス管理も組み込みでサポートしていて、アクセシビリティへの配慮も楽になるんだ。
ひよこ ひよこ
ReactRouterとかのルーティングライブラリは不要になるの?
ペンギン先生 ペンギン先生
Navigation APIはあくまでブラウザの低レベルAPIだから、フレームワークがその上で実装するイメージだよ。ただ、ライブラリに頼らずネイティブに近い実装ができるようになるから、軽量なSPAを作るときには直接使えるね。まだFirefoxの対応待ちの部分もあるから、プロダクション利用はポリフィルも確認してからがいいよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Navigation API」って出てきたら「SPAの画面切り替えをJSで細かく制御する新しいAPI」と思えればだいたいOK!
📖 おまけ:英語の意味
「Navigation API」 = ナビゲーションAPI
💬 navigate(ナビゲートする・移動する)からきていて、ブラウザの「どこへ移動するか」をプログラムから操れる仕組み、という意味だよ
← 用語集にもどる