カテゴリ: Next.js 更新日: 2026/03/23

Next.jsでShared UIを整理するLayoutとTemplateの使い方!初心者向けNext.jsディレクトリ構成解説

Next.jsのShared UIをLayoutで整理するディレクトリ構成例
Next.jsのShared UIをLayoutで整理するディレクトリ構成例

先生と生徒の会話形式で理解しよう

生徒

「Next.jsで共通部分のUIを整理したいんですが、どうしたら良いですか?」

先生

「Next.jsではLayoutとTemplateを使って、HeaderやFooterなどのShared UIをまとめる方法があります。」

生徒

「LayoutとTemplateって何が違うんですか?」

先生

「簡単に言うと、Layoutはページ全体の骨組み、Templateはその骨組みを使った個別ページの雛形です。」

1. Next.jsでLayoutを作るメリット

1. Next.jsでLayoutを作るメリット
1. Next.jsでLayoutを作るメリット

Next.jsでは複数のページで同じHeaderやFooter、ナビゲーションを使うことがよくあります。毎回同じコードを書くとミスが増えたり、修正が大変です。Layoutを使うと共通部分を1か所で管理でき、メンテナンスが楽になります。

2. ディレクトリ構成の基本例

2. ディレクトリ構成の基本例
2. ディレクトリ構成の基本例

Next.jsのShared UIを整理する基本的なディレクトリ構成の例です。


/app
  /layout
    MainLayout.jsx
  /components
    Header.jsx
    Footer.jsx
  /pages
    index.jsx
    about.jsx

この構成では、HeaderやFooterなどの共通部分はcomponentsにまとめ、MainLayoutでページ全体の構造を定義しています。

3. Layoutの作り方

3. Layoutの作り方
3. Layoutの作り方

Layoutは関数コンポーネントとして作ります。以下はシンプルなMainLayoutの例です。


import Header from "../components/Header";
import Footer from "../components/Footer";

export default function MainLayout({ children }) {
  return (
    <div>
      <Header />
      <main>{children}</main>
      <Footer />
    </div>
  );
}
(HeaderとFooterが共通で表示され、main部分にページごとの内容が入ります)

4. ページでLayoutを使う方法

4. ページでLayoutを使う方法
4. ページでLayoutを使う方法

作ったLayoutをページで使うには、以下のようにchildrenをラップします。


import MainLayout from "../layout/MainLayout";

export default function HomePage() {
  return (
    <MainLayout>
      <h1>ホームページへようこそ</h1>
      <p>Next.jsでLayoutを使う基本の例です。</p>
    </MainLayout>
  );
}
(画面上部にHeader、下部にFooter、中央に「ホームページへようこそ」と表示されます)

5. Templateの使い方

5. Templateの使い方
5. Templateの使い方

TemplateはLayoutを使ったページの雛形として作ります。Templateを作ることで、特定のページの構成を再利用しやすくなります。


import MainLayout from "../layout/MainLayout";

export default function AboutTemplate({ title, content }) {
  return (
    <MainLayout>
      <h2>{title}</h2>
      <p>{content}</p>
    </MainLayout>
  );
}
(AboutTemplateを使うと、タイトルと内容だけ変更して簡単に複数ページを作れます)

6. Templateをページに適用する例

6. Templateをページに適用する例
6. Templateをページに適用する例

import AboutTemplate from "../layout/AboutTemplate";

export default function AboutPage() {
  return (
    <AboutTemplate
      title="私たちについて"
      content="Next.jsのLayoutとTemplateを使うと共通UIを簡単に管理できます"
    />
  );
}
(画面に「私たちについて」と表示され、下に内容が表示されます)

7. 複数Layoutを使い分ける方法

7. 複数Layoutを使い分ける方法
7. 複数Layoutを使い分ける方法

Next.jsではサイトの一部で別のLayoutを使うことも可能です。例えば管理者用ページと一般ユーザー用ページでLayoutを分けます。


import AdminHeader from "../components/AdminHeader";
import Footer from "../components/Footer";

export default function AdminLayout({ children }) {
  return (
    <div>
      <AdminHeader />
      <main>{children}</main>
      <Footer />
    </div>
  );
}
(AdminLayoutを使うと管理者専用のHeaderが表示され、他の部分は共通Footerになります)

8. まとめとしての使い方のポイント

8. まとめとしての使い方のポイント
8. まとめとしての使い方のポイント

Next.jsでLayoutとTemplateを使うと、共通UIを1か所で管理でき、コードの重複を減らせます。複数ページで同じデザインを使う場合に非常に便利です。ディレクトリはcomponentsとlayoutを分けることで整理しやすくなります。

また、Templateを作ることでページごとに変更する部分だけを簡単に差し替えられ、開発効率が向上します。複雑なサイトでもLayoutとTemplateを組み合わせることで保守性が高くなります。

まとめ

まとめ
まとめ

本記事ではNext.jsでのShared UI管理におけるLayoutとTemplateの使い方について詳しく解説しました。Next.jsはReactベースのフレームワークであり、複数ページを持つウェブサイトやアプリケーションの開発に非常に便利です。特に共通部分であるHeaderやFooter、ナビゲーションメニューなどを毎ページで個別に実装すると、コードの重複や保守性の低下、修正時のミスなどが発生しやすくなります。そこでLayoutとTemplateを活用することで、共通部分を一か所でまとめて管理できるだけでなく、ページごとの変更箇所を明確に分離して効率的に開発できます。

Layoutはページ全体の骨組みとしてHeader、Footer、サイドバーなどの共通UIをまとめるコンポーネントです。Reactコンポーネントとして関数形式で作成し、childrenプロパティで個別ページの内容を挿入します。これにより、共通UIの修正が必要になった場合もLayoutを修正するだけで全ページに反映されるため、開発の効率化と保守性向上に直結します。

TemplateはLayoutを利用したページ雛形として機能します。Templateを作成することで、タイトルや本文などページごとに変わる部分だけをpropsで渡して簡単に複数ページを作成できます。これにより、似た構成のページを迅速に作成でき、再利用性を高めることができます。Templateを活用することで、例えばAboutページやContactページ、商品詳細ページなど、内容が異なるが構造は共通のページを効率的に生成できます。

また、Next.jsでは複数のLayoutを使い分けることも可能です。例えば一般ユーザー向けのページと管理者専用のページで異なるLayoutを適用すれば、表示内容やUIを柔軟に変更できます。AdminLayoutを作り、専用のHeaderを設置しつつFooterなど共通部分を維持することで、サイト全体の統一感を保ちながら特定ページに個別デザインを適用できます。

ディレクトリ構成としては、componentsフォルダにHeaderやFooterなどの再利用可能なコンポーネントを配置し、layoutフォルダに各LayoutやTemplateをまとめるのが基本です。このように分離しておくことで、コードの見通しが良くなり、開発者がどこに何があるかを直感的に把握できます。ページフォルダにはLayoutやTemplateをラップした個別ページコンポーネントを配置することで、構造が明確でメンテナンスしやすいディレクトリ構成になります。

さらに、Reactの関数コンポーネントであるLayoutやTemplateは、StateやHooksを組み合わせることも容易です。例えば、ヘッダーにログイン情報を表示したり、テーマ切替ボタンを配置する場合もLayoutに実装すれば全ページに適用されます。Templateを使えば、ページ固有の機能や動作を個別に実装しつつ、共通UIはLayoutに委ねることで、コードの重複を避けながら柔軟なページ構成が可能です。

実際にNext.jsでLayoutとTemplateを使ったサンプルコードを振り返ると、MainLayout.jsxでHeaderとFooterを共通化し、childrenでページごとの内容を表示しています。AboutTemplate.jsxではMainLayoutを利用し、タイトルや本文をpropsとして渡すだけで複数ページを簡単に生成できます。さらにHomePage.jsxやAboutPage.jsxでは、それぞれMainLayoutやTemplateをラップすることで、共通UIと個別内容が明確に分離されています。


import MainLayout from "../layout/MainLayout";

export default function HomePage() {
  return (
    <MainLayout>
      <h1>ホームページへようこそ</h1>
      <p>Next.jsでLayoutを使う基本の例です。</p>
    </MainLayout>
  );
}
(画面上部にHeader、下部にFooter、中央に「ホームページへようこそ」と表示されます)

import AboutTemplate from "../layout/AboutTemplate";

export default function AboutPage() {
  return (
    <AboutTemplate
      title="私たちについて"
      content="Next.jsのLayoutとTemplateを使うと共通UIを簡単に管理できます"
    />
  );
}
(画面に「私たちについて」と表示され、下に内容が表示されます)

このようにNext.jsでLayoutとTemplateを組み合わせることで、ページごとの内容と共通UIの分離、再利用性の向上、保守性の向上が実現できます。複数ページを持つウェブサイトや管理画面、ブログ、ECサイトなどの開発でも大変有効な手法です。

先生と生徒の振り返り会話

生徒

「LayoutとTemplateの違いや使い分けがよく分かりました。共通部分を一か所で管理できるので修正も簡単ですね。」

先生

「そうです。特にTemplateを使うとページごとの内容だけ差し替えれば良いので、複数ページの開発効率が格段に上がります。」

生徒

「複数Layoutを使う場合はどう工夫すればいいですか?」

先生

「管理者専用のLayoutを作るなど、ユーザーの種類やページの種類ごとにLayoutを分けると良いでしょう。共通部分はFooterなどで維持できます。」

生徒

「ディレクトリ構成も整理するのが大事ですね。componentsとlayoutを分けておくと分かりやすいです。」

先生

「その通りです。こうすることで、チーム開発でもどこに何があるか迷わずに済み、保守性も高まります。」

生徒

「ReactのStateやHooksもLayoutに組み込めば全ページに適用できるのも便利ですね。」

先生

「はい。テーマ切替やログイン情報の表示など、全ページに影響するUIはLayoutに実装すると効率的です。」

カテゴリの一覧へ
新着記事
New1
Next.js
Next.jsのダッシュボード構造におけるLayout設計を徹底解説!初心者でも理解できるLayoutとTemplateの使い方
New2
Next.js
Next.jsでShared UIを整理するLayoutとTemplateの使い方!初心者向けNext.jsディレクトリ構成解説
New3
React
React.jsのメリットとデメリットを完全解説!初心者にもわかるReactの魅力と注意点
New4
React
Reactでネストしたコンポーネントにデータを渡す方法を完全解説!Context APIで深い階層も簡単に
人気記事
No.1
Java&Spring記事人気No1
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
ReactのJSXとJavaScriptの違いを完全ガイド!初心者でもわかるReactのJSX入門
No.4
Java&Spring記事人気No4
Next.js
Next.jsのRoute Groupの使い方を完全ガイド!App Routerでフォルダ構成を整理する方法
No.5
Java&Spring記事人気No5
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.6
Java&Spring記事人気No6
React
ReactのJSXはどうやって動く?Babelによるコンパイルの仕組みをやさしく解説
No.7
Java&Spring記事人気No7
Next.js
Next.js Pages Routerのメリット・デメリットを完全解説!初心者でも理解できるNext.jsルーティングの基本
No.8
Java&Spring記事人気No8
Next.js
Next.js Pages Routerでページごとのレイアウトを簡単に実現する方法!初心者向け完全ガイド