1
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で理解する

1
Posted at

はじめに

フロントエンド開発を始めると「ビルド」という言葉に必ず出会います。
npm run build を実行したことはあっても、その裏で何が起きているか気になったことはないでしょうか。

この記事では、以下のことが分かります。

  • ビルドとは何か(なぜ必要なのか)
  • ビルドで何が変換・最適化されるのか
  • Next.js のビルドで実際に何が起きるのか

対象読者: フロントエンド開発を始めたばかりの方、ビルド機能の中身が気になっている方

ビルドとは何か

ビルドとは、「人間が書いたコード」を「ブラウザが実行できる形」に変換するプロセスのことです。

ビルドで何が行われるのか

ビルド機能では、以下の処理が行われています。

トランスパイル(変換)

ブラウザは TypeScriptTSX をそのまま解釈できません。そのため、ビルド時に JavaScript へ変換するトランスパイルという処理が行われます。
例を以下に記載します。

// 書いたコード(JSX)
const Hello = () => <h1>Hello, World!</h1>

// ビルド後(ブラウザが理解できるJS)
const Hello = () => React.createElement("h1", null, "Hello, World!")

バンドル(まとめる)

開発時に複数のファイルに分けて書いたコードを、まとめて配信用のファイルに整理する処理です。webpackVite などのバンドラーがこの役割を担います。

// バンドル前(2つのファイルに分かれている)
// utils.js
export const add = (a, b) => a + b

// main.js
import { add } from './utils'
console.log(add(1, 2))

// バンドル後(1つのファイルにまとまる)
const add = (a, b) => a + b
console.log(add(1, 2))

ミニファイ(圧縮)

人間が読みやすいように入れていた空白や改行、コメントなどを削除してファイルサイズを最適化します。

// ミニファイ前
const greeting = "Hello, World!";
// 挨拶を表示する
console.log(greeting);

// ミニファイ後
const greeting="Hello, World!";console.log(greeting);

Next.js のビルドを覗いてみる

npm run build の出力を読む

npm run build を実行すると、次のような出力が表示されます。

Route (app)                              Size     First Load JS
┌ ○ /                                    5.21 kB         90.3 kB
├ ○ /_not-found                          871 B           85.9 kB
└ ○ /about                              2.11 kB          87.2 kB
+ First Load JS shared by all            85.0 kB
  ├ chunks/framework-xxx.js              45.3 kB
  └ chunks/main-xxx.js                   39.7 kB

○  (Static)   prerendered as static content

「Size」は各ページのファイルサイズ、「First Load JS」はそのページを表示するのに必要な JavaScript の合計サイズです。

.next ディレクトリの構造

ビルドが完了すると、プロジェクトのルートに .next ディレクトリが生成されます。

.next/
├── static/     # CSS・JS・画像などの静的ファイル
├── server/     # サーバーサイドで実行されるコード
└── cache/      # ビルドキャッシュ(再ビルドを高速化するために使われる)

.next ディレクトリの内容は npm run build のたびに再生成されます。.gitignore に追加しておくのが一般的です。

ビルドの重要性

初回デプロイ時にビルドを忘れると、本番環境には配信できるファイルが存在しないためサービスが動きません。

また、コードを修正した後にビルドを実行し忘れた場合、古いビルド結果がそのまま使われ続けます。修正が反映されない原因として、ビルド漏れは意外と多いです。

ビルド後の動作確認も大切です。開発環境では動いていても、本番向けのビルドで問題が発覚するケースがあります。

まとめ

  • ビルドとは「開発者が書いたコード」を「ブラウザが実行できる形」に変換するプロセス
  • ビルドにはトランスパイル・バンドル・ミニファイの3つの主な処理が含まれる
  • Next.js では npm run build でこれらが自動的に実行され、.next ディレクトリに成果物が生成される
  • ビルドを忘れると古いコードがそのまま本番で動き続けるため、デプロイ前の実行は必須
1
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
1
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?