いまさらながらだけど、Javascriptという言語を甘くみているエンジニアがおおい。Javascriptはもともとはブラウザ上で動作するスクリプト言語だ。これをサーバサイドでも、というかどこでも動くようにしたのがNode.jsである。Node.jsの恩恵によってWEBにおけるフロントエンド開発の世界がものすごく華やかになったのだ。
これまでJavascriptだけでごりごり書いてきたようなことを、コンポーネント開発できるようにしたのがReactだ。
この思想はよいが、実際現実的に部品化していく意味と時間が問われるのは開発規模と納期(予算)に見合うかどうかになるだろうが、こういったものは使いこなせるようにしておくべきだ。
Reactがよいのは、Javascript内に直接HTMLみたいに記述ができることだ。正確にいうと、そこで使っている言語はJSXというHTMLに非常によくにたものだ。この部分はブラウザでは直接読むことができないので、事前にBabelというツールでコンパイルしておくことが必要だ。
直接的にReact自体で開発しつづけていくのは辛いが、さらにそれをパッケージ化したNext.jsというフレームワークをつかうことで便利になる。Next.jsをつかうとページのレンダリングを制御できる。ここまで到達すると、ようやくこのフロントエンドで、これらを利用する意味と価値がはっきりとする。
🌐 Next.js のレンダリング手法と使い分け
📌 実際のページごとの使い分け例
// app/page.tsx
export default async function Home() {
const res = await fetch('https://api.example.com/posts', {
cache: 'force-cache', // ビルド時に生成
});
const posts = await res.json();
return <PostList posts={posts} />;
}
✅ 例2:ISR(5分ごとに再生成)
// app/posts/page.tsx
export default async function Posts() {
const res = await fetch('https://api.example.com/ posts', {
next: { revalidate: 300 }, // 5分ごとに再生成
});
const posts = await res.json();
return ;
}
例3:SSR(リクエストごとに再取得)
// app/dashboard/page.tsx
export default async function Dashboard() {
const res = await fetch('https://api.example.com/user/dashboard', {
cache: 'no-store',
});
const data = await res.json();
return <DashboardView data={data} />;
}
例4:CSR(クライアントでフェッチ)
// app/chat/page.tsx
'use client';
import { useEffect, useState } from 'react';
export default function Chat() {
const [messages, setMessages] = useState([]);
useEffect(() => {
fetch('/api/chat')
.then((res) => res.json())
.then(setMessages);
}, []);
return <ChatWindow messages={messages} />;
}
🔚 まとめ
Next.js 13 以降、App Router(/app
ディレクトリ)とPages Router(/pages
ディレクトリ)は別々のルーティングシステムとして提供されています。
/pages
getStaticProps
/ getServerSideProps
でデータフェッチ✅ 向いているケース
/app
Server Components
/ Client Components
を使い分けられるlayout.tsx
によるネストレイアウトloading.tsx
/ error.tsx
などで自動状態UIが使える✅ 向いているケース
これから新規で始めるのであれば、AppRouterしかない。
Next.js は以下のように設計されています:
同一のURLパスに対して App Router と Pages Router が同時にマッチすることを許可しない
たとえば /
を app/page.tsx
と pages/index.tsx
の両方で定義していた場合、
Next.js は「どちらを使えばいいのか」決定できず、エラーになります。
🔚 結論:選ぶ基準
✅ App Router の主な利点
app/
ディレクトリでの page.tsx
, layout.tsx
, loading.tsx
などの構成が可能。/app/api/
に配置可能。React/Next.jsでフロントエンドを華やかに飾れ!