shiftB
instagramyoutube
運営会社プライバシーポリシー特定商取引法に基づく表記JavaScript学習サイト JS Gym
お問い合わせ
©2025 bubekichi inc.

【Next.js】router.push?router.replace?window.location.href?どれ使えばいいのか調べてみた

0
XThreads
受講生ブログ

【Next.js】router.push?router.replace?window.location.href?どれ使えばいいのか調べてみた

icon
tamu

【Next.js】router.push?router.replace?window.location.href?どれ使えばいいのか調べてみた

公開: 2025年10月19日

学習振り返り
要約
  • Next.jsのページ遷移には、router.push(履歴に残る)、router.replace(履歴を上書き)、window.location.href(ページを完全リロード)の3つの方法がある。
  • router.pushは一般的なページ移動、router.replaceは戻れない移動に、window.location.hrefは外部サイトや完全リロードに適している。
  • <Link>コンポーネントはユーザークリックによる移動に適し、事前読み込み機能があるため、ユーザビリティ向上に寄与する。
音声で記事を再生

はじめに

11章の実装に入るまでに、画面遷移のコードをいくつかのパターンで書いてきました。

「router.pushとrouter.replaceって何が違うの?」
「window.location.hrefも使えるけど、どう使い分ければいいんだろう?」

と思ったので、今回は、自分の備忘録として、この3つの方法の違いと、使い分けのポイントをまとめてみました。

それぞれの使い方をざっくり紹介

router.push

普通のページ移動に使います。履歴に残るので、ブラウザの「戻る」ボタンで前のページに戻れます。

import { useRouter } from 'next/navigation'; // App Routerの場合

function MyComponent() {
  const router = useRouter();
  
  const handleClick = () => {
    router.push('/about');
  };
  
  return <button onClick={handleClick}>Aboutページへ</button>;
}

router.replace

移動するけど、履歴を上書きします。つまり「戻る」ボタンで戻れません。

const handleLogin = async () => {
  // ログイン処理
  await login();
  
  // ログイン画面には戻らせない
  router.replace('/dashboard');
};

window.location.href

Next.jsの機能を使わず、ブラウザそのものでページ移動します。 ページ全体をリロードして移動するので、Next.jsの高速な遷移は使えません。

const handleExternalLink = () => {
  window.location.href = 'https://example.com';
};

どんな場面で、どれを使うべきか

僕がまとめた使い方はこんな感じです。

router.push:通常のページ遷移に使う

もっともよく使う基本の遷移方法です。
履歴に残るので、ユーザーが「戻る」ボタンで前のページに戻れます。

画面遷移が一瞬です。ページ全体を読み込み直さずにスムーズに切り替わるのが特徴です。

使う場面:

  • 一般的なページ移動

  • 投稿一覧 → 投稿詳細 など、自然な前後関係がある遷移

例:

const handleClick = () => {
  router.push('/posts/1');
};

一覧から詳細ページへ進み、戻るボタンで戻れるようにしたい時に最適です。

router.replace : 戻らせたくない遷移に使う

router.push と似ていますが、履歴を上書きするため、ユーザーが「戻る」で前のページへ戻れません。
特にログイン後など「一方通行で進ませたい」フローで便利です。

使う場面:

  • ログイン後にダッシュボードへ遷移(ログイン画面には戻らせない)

  • フォーム送信完了後、完了ページへ一方通行で遷移したい時

例:

// ログイン処理後に一方通行で遷移
const handleLogin = async () => {
  await login();
  router.replace('/dashboard');
};

このように、戻ると混乱する画面や、同じページに戻す必要がないケースで使います。

window.location.href :ページを完全にリロードしたい時に使う

ブラウザ標準の遷移を行うため、Next.jsの差分描画は行われません。
その代わり、ページ全体がリロードされ、状態を完全にリセットできます。

ページ全体を再読み込みする分、Next.jsの差分描画や事前読み込みが効かず、 router.push や router.replace に比べてパフォーマンス面で不利になります。

使う場面:

  • Next.jsの外(外部サイトや別アプリ)へ遷移する時

  • 認証情報を確実に破棄したい(ログアウト時など)

例:

// 外部サイトへ移動
window.location.href = 'https://example.com';

// ログアウト後に完全リロード
await supabase.auth.signOut();
window.location.href = '/';

Next.jsの高速遷移は効かないものの、状態を強制的にリセットしたいときには便利です。

おまけ:<Link>との違い

ここまでrouter.pushなどの話をまとめながら、ふと「じゃあ<Link>は何者?」って思ったのでおまけとして追記しておきます。

どちらもNext.jsでページを移動させるための手段ですが、使いどころと仕組みが少し異なるようです。

import Link from 'next/link';

<Link href="/about">Aboutページへ</Link>

使い分けはシンプル:

  • <Link> → ユーザーがクリックして移動する時

  • router.push → ボタンを押したり、処理が終わった後に自動で移動させたい時

例えば:

// ユーザーがクリック → <Link>を使う
<Link href="/profile">プロフィール</Link>

// フォーム送信後に自動で移動 → router.pushを使う
const handleSubmit = async () => {
  await saveData();
  router.push('/complete'); // 保存後に自動で移動
};

また、<Link>は自動でページをprefetch(事前読み込み)してくれるので、クリックした時の遷移がさらに速くなります。これもNext.jsの便利な機能です。

prefetch(事前読み込み)とは?

<Link> には、Next.js が自動で行う プリフェッチ(prefetch)機能 が備わっています。
これは「リンク先のページデータやJSを、あらかじめバックグラウンドで読み込んでおく」仕組みです。
そのリンクが画面内(ビューポート内)に表示されたタイミングでNext.jsが自動的に動作します。

結果、クリックしたときにはすでに必要なデータが揃っており、遷移が一瞬で完了します。

⚙️ プリフェッチは 本番環境のみ有効
開発中では無効化されているため、動いていないように見えても正常です。

まとめ

Next.jsのページ遷移、最初は「なにが違うんだろう」と思っていましたが、調べてみると奥が深かったです。

覚えておきたいポイント:

  • 基本はrouter.pushか<Link>を使う

  • 戻らせたくない時はrouter.replace

  • Next.jsの外(外部サイトや完全リロード)はwindow.location.href

もっと奥深いものなのかもしれませんが、今のところ、この使い分けを意識していこうと思っています!


参考リンク:

  • useRouter - Next.js

  • next/link - Next.js

0

シェア!

XThreads
ShiftB Logo
icon
tamu
プロフィールを見る
Loading...
記事一覧に戻る
ShiftB Logo
XThreads
0

関連記事

TAの使い方とマインドセット

icon
tomoe

MBTI×学習スタイル 巨匠の私が約4ヶ月で完走した学習戦略

user
吉本茜

【実録Q&A】初学者に伝授したデバッグ思考の体系化

user
吉本茜

AIが教えてくれるけど理解するのは自分です〜

user
吉本茜

初心者向け!3つのパターンのコード比較で理解するNext.jsのコンポーネント分割

icon
タマネギ

みんな真面目過ぎん?まぁええか精神のすすめ

user
吉本茜

最新記事

【1章】事前準備の振り返り

user
大西晴空

【2章】Webアプリケーション概要の振り返り

user
大西晴空

【React 初心者向け】データ取得がもっと分かりやすくなる。TanStack Query の紹介

icon
さかした

図で理解!!並列(Concurrency)並行(Parallelism)の違い

user
吉本茜

「レイテンシって何???」から始めた調査が楽しかった話

user
吉本茜

5章振り返りと12月の目標設定

user
大橋健太