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?

Next.jsがフルスタックと言われる一つの理由

0
Posted at

はじめに

Next.jsについて勉強中の初学者です。
勉強する中で、疑問に思った点を記述します。

問題

Next.jsはフルスタックフレームワークというけど、何がフルスタックなの?Reactベースの他のフレームワークと何が違うの?何が嬉しいの?

解決方法

普通にReactでアプリを作る場合、こうなる。
・フロントエンド:Reactアプリ(例:create-react-appで作ったプロジェクト)で、ブラウザで動くJavaScriptを書く。
・バックエンド:別のプロジェクトとして、Express.js(Node.js)やDjango、Railsなどでサーバーを立てる。データベースへのアクセスや認証処理はここに書く。

この2つは別のプロジェクト(別のフォルダやリポジトリ)でデプロイされ、別々に動く。

Next.jsでは、同じプロジェクトの中に両方を入れられる。

my-app/
  pages/
    index.tsx      ← これがフロントエンド(画面)
    api/
      hello.ts      ← これがバックエンドAPI

何が嬉しいのか。
1、プロジェクトが1つで完結する。
2、プロジェクトは1つだが、pages/api下のコードはサーバー側で実行されるので、安全な情報の取り扱いができる(クライアント側にブラウザを通じて不要な情報が渡らない)。
3、1つの言語(JavaScript/TypeScript)でフロントエンドとバックエンドを書くことができる。

例えば、AWSのEC2上にアプリのDockerコンテナを立ち上げる場合で考えてみます。

Next.jsを使わない従来の構成

# docker-compose.yml
services:
  frontend:
    build: ./frontend  # Reactアプリ
    ports:
      - "3000:3000"
  backend:
    build: ./backend   # Express.jsなど
    ports:
      - "8000:8000"
  db:
    image: postgres

Next.jsを使う場合

services:
  app:
    build: .   # Next.jsプロジェクト全体(フロントもバックエンドAPIも含む)
    ports:
      - "3000:3000"
  db:
    image: postgres

docker compose upすると、Next.jsのコンテナが1つ立ち上がり、そのコンテナの中で http://localhost:3000/(画面)http://localhost:3000/api/hello(API)も両方動きます。コンテナを分ける必要がないわけです(DBは別コンテナにするのが普通ですが、それはフロント/バックエンドの分離とは別の話なので割愛します)。

フロントエンドとバックエンドAPI(pages/api)は「同じプロジェクト」です。つまりDockerコンテナも基本的には1つで済むことになります。

おわりに

ReactやVueなどの、他のフロントエンドのフレームワークは画面を作るだけですが、Next.jsは「画面を作る機能」と「簡易的なバックエンドサーバーを作る機能」が1つのプロジェクトに同梱されていること(フルスタック)が分かりました。
Next.jsの特徴を一つ理解することができました。

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?