Next.jsとフルスタック開発:バックエンドからフロントエンドまで網羅

Next.jsを使ったフルスタック開発について、バックエンドからフロントエンドまでの概要とコード例を紹介します。Next.jsはReactアプリケーションの開発を効率化するためのフレームワークです。いくつかの特徴を持っています:サーバーサイドレンダリング、静的サイト生成、APIルーティング、デプロイの容易さなどです。

目次

  1. Next.jsの概要
  2. プロジェクトのセットアップ
  3. ページの作成とナビゲーション
  4. サーバーサイドレンダリングと静的サイト生成
  5. APIルーティングとバックエンド機能の統合
  6. デプロイと環境設定
  7. まとめ

1. Next.jsの概要

Next.jsはReactをベースにしたフルスタック開発フレームワークです。従来のReactアプリケーションをより効率的に開発できるように、以下のような機能が用意されています。

  • シンプルなプロジェクト構成とディレクトリ構造
  • サーバーサイドレンダリング(SSR)と静的サイト生成(SSG)
  • APIルーティングとバックエンドの統合
  • デプロイの簡単さ

2. プロジェクトのセットアップ

Next.jsプロジェクトを初期化する方法はいくつかありますが、最も一般的な方法は、次のコマンドを使ってプロジェクトを作成します。

npx create-next-app my-app

このコマンドを実行すると、my-appというディレクトリが作成されます。その中には、Next.jsアプリケーションの基本的な構造が入っています。

次に、このプロジェクトをVSCodeなどのエディターで開きます。

code my-app

次に、開発サーバーを起動します。

npm run dev

ブラウザで http://localhost:3000 を開くと、作成されたNext.jsアプリケーションが表示されます。

3. ページの作成とナビゲーション

Next.jsでは、pages ディレクトリ内にあるファイルを基にルートが自動で生成されます。例えば、 pages/about.js を作成すると、 /about というルートが生成されます。

コード例

// pages/about.js
import Link from "next/link";
import React from "react";

const About = () => (
  <div>
    <h1>About</h1>
    <p>Next.jsフルスタック開発のサンプルです。</p>
    <Link href="/">
      <a>ホームに戻る</a>
    </Link>
  </div>
);

export default About;

next/link を使って、ページ間のナビゲーションを実現します。これにより、効率的なページ間の遷移が可能になります。

4. サーバーサイドレンダリングと静的サイト生成

Next.jsでは、サーバーサイドレンダリングや静的サイト生成によって、SEOや初期表示速度の改善ができます。getServerSidePropsgetStaticProps といったAPIを利用することで、サーバーサイドでデータを取得し、ページに表示することができます。

コード例

// pages/posts/[id].js
import React from "react";
import { useRouter } from "next/router";
import { getPostById } from "../../lib/api";

const Post = (props) => {
  const router = useRouter();
  const { id } = router.query;

  return (
    <div>
      <h1>Post #{id}</h1>
      <p>{props.post.content}</p>
    </div
  );
};

export async function getServerSideProps(context) {
  const post = await getPostById(context.params.id);

  return { props: { post } };
}

export default Post;

5. APIルーティングとバックエンド機能の統合

Next.jsでは pages/api ディレクトリを使って、独自のAPIルートを作成できます。これにより、バックエンドとフロントエンドをシームレスに連携させることができます。

コード例

// pages/api/posts.js
import { getAllPosts } from "../../lib/api";

export default async (req, res) => {
  const posts = await getAllPosts();
  res.status(200).json(posts);
};

このAPIルートは、Next.jsアプリケーション内で以下のように呼び出すことができます。

import React from "react";
import fetch from "isomorphic-unfetch";

const Posts = () => {
  const [posts, setPosts] = useState([]);

  useEffect(() => {
    const fetchPosts = async () => {
      const res = await fetch("/api/posts");
      const data = await res.json();
      setPosts(data);
    };

    fetchPosts();
  }, []);

  // レンダリング
};

6. デプロイと環境設定

Next.jsはデフォルトでVercelをデプロイプラットフォームとしてサポートしていますが、他のプラットフォームでもデプロイが可能です。環境変数は、.env ファイルや next.config.js を使って設定することができます。

7. まとめ

この記事では、Next.jsを使ったフルスタック開発について紹介しました。バックエンドからフロントエンドまでの開発プロセスを効率化できるため、Next.jsは現代のWeb開発で非常に有用なフレームワークです。