0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

微経験エンジニアが学ぶ「本気のNextJS」 part4

Last updated at Posted at 2025-10-16

本PJではNext.js公式チュートリアルを元に実施します。
今回はchapter5の内容となります!

🚀 もう待たせない!Next.jsの爆速ページ移動とナビゲーションの秘密

Webサイトを見ていて、「次のページに移るとき、一瞬画面が真っ白になる…」と感じたことはありませんか?従来のWebサイトでは、それが当たり前でした。

しかし、Next.jsを使えば、まるでスマホアプリのように「サクッ」とページが切り替わる、ストレスフリーな体験を実現できます。

今回は、その"魔法"の正体であるページ間ナビゲーションの最適化について、裏側の賢い仕組みと一緒に見ていきましょう!

🔗 ページ移動の基本:<a>タグから<Link>コンポーネントへ

😫 従来の<a>タグの問題点

普通のHTMLでは、<a href="...">というタグを使ってページをリンクします。しかし、これには大きな弱点がありました。

それは、リンクをクリックするたびにページ全体をゼロから読み込み直す(フルページリフレッシュ)ことです。

これは、お店を出て、また隣の新しいお店に完全に入り直すようなもの。毎回「いらっしゃいませ!」からやり直すので、どうしても少し時間がかかってしまいます。これでは、現代のアプリのような滑らかな体験は提供できません。

✨ Next.jsの解決策:魔法のコンポーネント

この問題を解決するのが、Next.jsのヒーロー、コンポーネントです。

  • 使い方: next/linkからインポートして、従来の<a><Link href="...">置き換えるだけ

  • 効果: ページ全体をリロードせず、変更があった部分だけをJavaScriptで賢く入れ替えてくれます。

これは、同じ建物(アプリ)の中で、隣の部屋に移動するようなイメージです。建物自体はそのままなので、移動は一瞬で完了します。この仕組みをクライアントサイドナビゲーションと呼び、ユーザーに高速で滑らかな体験を提供します。

🤖 <Link>が超高速な2つの秘密

では、なぜコンポーネントはこんなにも賢く、速いのでしょうか?その背景には、Next.jsに標準装備された2つの強力な最適化機能があります。

🛍️ 必要なものだけお届け!「自動コード分割」

従来のWebアプリでは、最初にサイトを開いたときに、すべてのページのプログラムコードを一度に読み込んでいました。これは、コース料理を注文したのに、前菜からデザートまで全品が一度にテーブルに並べられるようなものです。最初の読み込みが非常に重くなってしまいます。

一方、Next.jsはページごとにコードを自動で分割(コード分割)してくれます。

つまり、ユーザーがアクセスしたページの分だけを最初に読み込むのです。これにより、初期表示が非常に高速になり、たとえどこか一つのページでエラーが起きても、サイト全体がダウンするのを防いでくれます。

🔮 未来予知でおもてなし!「プリフェッチ機能」

Next.jsの"おもてなし"はさらに続きます。本番環境では、こんな未来予知のような機能が自動で働きます。

動作: ユーザーの画面(ビューポート)にコンポーネントで設置されたリンクが見えた瞬間、Next.jsは「この人は次にこのページへ移動するかもしれないな」と予測し、リンク先のページのコードを裏側でこっそり読み込み始めます。

これをプリフェッチ(事前読み込み)と呼びます。

まるで、あなたがレストランでメニューを眺めている間に、シェフが次に注文されそうな人気メニューの下ごしらえを済ませておくようなものです。

結果: ユーザーが実際にリンクをクリックする頃には、もうページの準備は万端。クリックした瞬間に「お待たせしました!」とばかりに、ページがほぼタイムラグなしで表示されるのです。

📍 今どこにいるか一目瞭然!「アクティブリンク」の実装

優れたWebサイトでは、「今、自分がどのページにいるか」がナビゲーションメニューを見ればすぐにわかります。これをアクティブリンクと呼びます。地図アプリで現在地がハイライトされるのと同じですね。

Next.jsでは、usePathname()というフックを使うことで、これを驚くほど簡単に実装できます。

実装の3ステップ

1. 'use client';のおまじない:
usePathname()はユーザーのブラウザ上で現在のURLをチェックする機能なので、コンポーネントのファイルの先頭に'use client';と記述して、「この部品はブラウザ側で動かしますよ!」とNext.jsに教えてあげます。

  1. usePathname()で現在地を取得:
    usePathnamenext/navigationからインポートし、コンポーネント内で呼び出すだけで、現在のURLパス(例:/dashboard/invoices)を取得できます。

  2. スタイルを動的に変更:
    取得した現在のパスと、各リンクのパス(href)を比較します。もし両者が一致すれば、特別なCSSクラス(例:背景色を青にするクラス)を適用します。これにはclsxのようなライブラリを使うと便利です。

この簡単な実装だけで、ユーザーがページを移動するたびに、対応するリンクが自動でハイライトされる、直感的で親切なナビゲーションが完成します。


今回はここまで!
ご覧いただきありがとうございます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?