ClaudeNext.js2018/09/19 16:05

Next.js 7

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

claudejamodel: claude-sonnet-4-20250514

Next.js 7リリース - パフォーマンス向上とDX改善

Key Points

  • 起動時間57%高速化、再コンパイル42%高速化
  • Webpack 4とBabel 7への完全対応
  • react-error-overlayによる詳細エラー表示

Summary

Next.js 7が正式リリースされました。26回のcanaryリリースと340万ダウンロードを経て、大幅なパフォーマンス向上と開発者体験の改善を実現しています。

Key Points

  • パフォーマンス向上: 起動時間57%高速化、再コンパイル42%高速化
  • エラー報告改善: react-error-overlayによる詳細なエラー表示
  • コンパイルパイプライン更新: Webpack 4とBabel 7への対応
  • Dynamic Imports標準化: webpack標準のimport()構文をフルサポート
  • 静的CDNサポート: .nextディレクトリ構造がURL構造と一致
  • HTMLペイロード削減: 初期HTML容量を7.4%削減(1.62kB → 1.5kB)
  • CSS Imports改善: mini-extract-css-pluginによる20の既存問題解決
  • styled-jsx v3: React Suspense対応とcss.resolve API追加
  • WebAssembly対応: サーバーサイドレンダリングも可能

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

claudejamodel: claude-sonnet-4-20250514

Next.js 7

Next.js 7

26回のcanaryリリースと340万回のダウンロードを経て、本番環境対応のNext.js 7をリリースできることを誇りに思います。主な機能は以下の通りです:

  • DX改善: 起動時間57%高速化、再コンパイル42%高速化
  • react-error-overlayによる改善されたエラー報告
  • アップグレードされたコンパイルパイプライン: Webpack 4とBabel 7
  • 標準化されたDynamic Imports
  • 静的CDNサポート
  • より小さな初期HTMLペイロード
  • AppとPages間でのSSRを使用したReact Context

そして最後に、全く新しいNextjs.orgでこのニュースを共有できることを嬉しく思います。

DX改善

Next.jsの主要な目標の一つは、最高の本番環境パフォーマンス可能な限り最高の開発者体験を提供することです。このリリースでは、ビルドとデバッグパイプラインに多くの重要な改善をもたらします。

コンパイル速度

webpack 4、Babel 7、そして私たちのコードベースに対する多くの改善と最適化のおかげで、Next.jsは開発時に最大57%高速で起動するようになりました。新しいインクリメンタルコンパイルキャッシュのおかげで、コードに加えた変更は40%高速でビルドされるようになります。

以下は収集したサンプル数値です:

6.07.0差分
起動時間(基本アプリケーション)1947ms835ms57%高速化
コード変更(基本アプリケーション)304ms178ms42%高速化

ボーナスとして、開発とビルド時にwebpackbarによるより良いリアルタイムフィードバックが表示されるようになります。

React Error Overlayによる改善されたエラー報告

正確で役立つエラーをレンダリングすることは、優れた開発とデバッグ体験にとって重要です。これまでは、エラーメッセージとそのスタックトレースをレンダリングしていました。今後は、react-error-overlayを使用してスタックトレースを以下で充実させます:

  • サーバーとクライアントエラーの両方に対する正確なエラー位置
  • コンテキストを提供するソースのハイライト
  • 完全なリッチスタックトレース

ボーナスとして、react-error-overlayにより、特定のコードブロックをクリックするだけでテキストエディタを簡単に開くことができます。

Webpack 4

最初のリリース以来、Next.jsはコードのバンドルとプラグインや拡張機能の豊富なエコシステムの再利用のためにwebpackを使用してきました。Next.jsが最新のwebpack 4で動作することを発表できて嬉しく思います。webpack 4には多数の改善とバグ修正が含まれています。

これらの中には以下が含まれます:

  • .mjsソースファイルのサポート
  • コード分割の改善
  • より良いtree-shaking(未使用コードの削除)サポート

もう一つの新機能はWebAssemblyサポートです。Next.jsはWebAssemblyをサーバーレンダリングすることもできます。

注意: このアップグレードは完全に後方互換性があります。ただし、next.config.js経由でカスタムwebpackローダーやプラグインを使用している場合は、それらをアップグレードする必要があるかもしれません。

CSSインポート

webpack 4では、バンドルからCSSを抽出する新しい方法としてmini-extract-css-pluginが導入されました。@zeit/next-css@zeit/next-less@zeit/next-sass@zeit/next-stylusは現在mini-extract-css-pluginで動作しています。

これらのNext.jsプラグインの新バージョンは、CSSインポートに関連する20の既存の問題を解決します。例として、動的import()でのCSSインポートがサポートされるようになりました:

// components/my-dynamic-component.js
import './my-dynamic-component.css';

export default function MyDynamicComponent() {
  return <h1>My dynamic component</h1>;
}

// pages/index.js
import dynamic from 'next/dynamic'

const MyDynamicComponent = dynamic(import('../components/my-dynamic-component'))

export default function Index() {
  return (
    <div>
      <MyDynamicComponent/>
    </div>
  )
}

主要な改善点は、pages/_document.jsに以下を追加する必要がなくなったことです:

<link rel="stylesheet" href="/_next/static/style.css" />

代わりに、Next.jsが自動的にCSSファイルを注入します。本番環境では、Next.jsはCSSのURLにコンテンツハッシュも自動的に追加するため、変更があった場合にエンドユーザーが古いバージョンのファイルを取得することがなく、不変の永続キャッシュを導入する能力を持ちます。

標準化されたDynamic Imports

Next.jsはバージョン3以来、next/dynamicを通じて動的インポートをサポートしてきました。この技術の早期採用者として、import()を処理するための独自のソリューションを書く必要がありました。その結果、Next.jsはwebpackが後に導入したサポートから分岐し始め、いくつかの機能が欠けていました。

Next.js 7以降、デフォルトのimport()動作には手を加えません。これは、完全なimport()サポートをそのまま利用できることを意味します。この変更も完全に後方互換性があります。

Babel 7

Next.js 6ではまだベータ版だったBabel 7を導入しました。それ以来、Babel 7の安定版がリリースされ、Next.js 7では現在このバージョンを使用しています。

変更の完全なリストについては、Babelのリリースノートを参照してください。主な機能のいくつかは:

  • TypeScriptサポート(Next.jsでは@zeit/next-typescriptを使用可能)
  • フラグメント構文<>サポート
  • babel.config.jsサポート
  • ファイルやディレクトリのサブセットにのみプリセット/プラグインを適用するoverridesプロパティ

Next.jsプロジェクトでカスタムBabel設定がない場合、破壊的変更はありません。

より小さな初期HTMLペイロード

Next.jsはHTMLを事前レンダリングするため、<html><head><body>とページをレンダリングするために必要なJavaScriptファイルを含むデフォルト構造でページをラップします。この初期ペイロードは以前約1.62kBでした。

Next.js 7では初期HTMLペイロードを最適化し、現在1.5kBで、7.4%の削減となり、ページをより軽量にしています。

6.07.0差分
ドキュメントサイズ(サーバーレンダリング)1.62kb1.50kb7.4%小さく

静的CDNサポート

Next.js 5ではassetPrefixサポートを導入しました。これは、Next.jsが特定の場所(通常はCDN)からアセットを自動的に読み込む方法です。

Next.js 7では、.nextのディレクトリ構造をURL構造に合わせて変更しました:

https://cdn.example.com/_next/static/<buildid>/pages/index.js
// マップ先:
.next/static/<buildid>/pages/index.js

プロキシタイプのCDNの使用を推奨しますが、この新しい構造により、異なるタイプのCDNのユーザーが.nextディレクトリをCDNにアップロードできるようになります。

Styled JSX v3

styled-jsx 3の導入を嬉しく思います。Next.jsにデフォルトで含まれるCSS-in-JSソリューションが、React Suspenseに対応しました。

styled-jsx 3では、新しいAPI css.resolveを導入することでこの問題を解決しました。これは、指定されたstyled-jsx文字列に対してclassName<style>タグ(stylesプロパティ)を生成します:

import css from 'styled-jsx/css';

const ChildComponent = ({ className }) => (
  <div>
    <p className={className}>some text</p>
  </div>
);

const { className, styles } = css.resolve`
  p {
    color: black;
  }
`;

export default function Index() {
  return (
    <div>
      <ChildComponent className={className} />
      {styles}
    </div>
  );
}

この新しいAPIにより、子コンポーネントにカスタムスタイリングを透過的に渡すことができます。

Next.js 7 | Next.js | DocsDigest