ClaudeNext.jsDec 22, 2022, 4:00 PM

Next.js 13.1

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

claudeenmodel: claude-sonnet-4-20250514

Next.js 13.1 Release: Enhanced App Directory, Built-in Module Transpilation, and Edge Runtime Stability

Key Points

  • App directory now ships 9.3kB less client-side JavaScript
  • Built-in module transpilation replaces next-transpile-modules
  • Edge Runtime for API routes is now stable

Summary

Next.js 13.1 brings significant improvements to both the stable pages/ and beta app/ directories, focusing on reliability, performance, and developer experience enhancements.

Key Points

App Directory (Beta) Improvements

  • Reduced JavaScript bundle size: 9.3kB less client-side JavaScript compared to pages directory
  • No layout divs: Eliminated extra <div> elements while preserving scroll behavior
  • TypeScript plugin: New IDE integration with suggestions and Server/Client Component usage hints
  • Reliability fixes: Improved CSS modules support, cache deduplication, and memory leak patches

Built-in Module Transpilation (Stable)

  • Replaces next-transpile-modules package with native support
  • Configure via transpilePackages in next.config.js
  • Supports local monorepo packages and external dependencies

SWC Import Resolution

  • New modularizeImports transform for optimizing barrel file imports
  • Automatically converts barrel imports to direct imports
  • Reduces bundle size and compilation time for libraries like MUI and Lodash

Edge Runtime Stability

  • Edge Runtime for API routes is now stable (no more experimental- prefix)
  • Uses lightweight Node.js API subset compatible with edge platforms
  • Runs globally on Vercel, single-region when self-hosted

Turbopack Updates

  • Added support for Tailwind CSS, next/image, @next/font
  • Improved CSS source maps, error handling, and memory usage
  • Enhanced HMR reliability and chunking algorithm
  • Collaboration with Vite team for accurate benchmarking

Middleware Enhancements

  • Return responses directly from middleware
  • Set request headers without experimental flags
  • More flexible routing lifecycle customization

Full Translation

Translations

A translation section that keeps the flow of the original article.

claudejamodel: claude-sonnet-4-20250514

Next.js 13.1

Next.js 13.1

2022年12月22日(木)

投稿者:OJ Kwon @ _ojkwon、Tim Neutkens @ timneutkens

Next.js 13.1では、pages/(安定版)とapp/(ベータ版)の両方のディレクトリに改善が含まれています:

  • app Directory(ベータ版)の改善:信頼性とパフォーマンスの向上
  • 組み込みモジュール変換:next-transpile-modulesの機能をコアに統合
  • Edge Runtime(安定版):Edge向けの軽量Node.jsランタイム
  • Turbopackの更新:Tailwind CSS、next/image、@next/font等のサポート
  • Middlewareの改善:レスポンスの返却とリクエストヘッダーの設定
  • SWCインポート解決:バレルファイル使用時のJavaScriptバンドルサイズ削減
  • メモリ使用量の改善、新しいテンプレート等

今すぐ以下のコマンドで更新してください:

npm i next@latest react@latest react-dom@latest eslint-config-next@latest

appディレクトリの信頼性とサポートの向上

Next.js 13では、新しいappディレクトリ(ベータ版)を発表しました。この新しいルーティングとデータフェッチシステムは、既存のpagesディレクトリと並行して段階的に採用できます。

appディレクトリは、拡張されたレイアウト、コンポーネント・テスト・スタイルの共存、コンポーネントレベルのデータフェッチなど、多くの利点を提供します。

フィードバックと早期テストのおかげで、appディレクトリの信頼性にいくつかの改善を行いました:

  • レイアウトDivの削除:以前は、appディレクトリがナビゲーション時にレイアウトをビューにスクロールするために追加の<div>要素を追加していました。13.1では、これらの余分な要素は作成されなくなりました。スクロール動作は保持されます。

  • TypeScriptプラグイン:ページとレイアウトの設定オプションの提案を提供し、ドキュメントを直接IDEに取り込み、ServerとClient Componentsに関する有用な使用ヒント(ServerコンポーネントでのuseStateの使用を防ぐなど)を提供する新しいTypeScriptプラグインを構築しました。詳細はこちら

  • 信頼性の改善:CSSモジュールサポートの改善、レイアウトとページのcache()fetch()の重複排除の修正、メモリリークなど、多数のバグを修正しました。

  • クライアントサイドJavaScriptの削減:appディレクトリは、pagesディレクトリよりも9.3kB少ないクライアントサイドJavaScriptを含むようになりました。このベースラインは、アプリケーションに1つまたは1000のServerコンポーネントを追加しても増加しません。

pages/app/差分
Total First Load JSベースライン-9.3kB12.1%削減
Next.js Runtimeベースライン-12kB56.8%削減
React Runtimeベースライン+2.7kB5.2%増加

Reactランタイムは一時的にわずかに大きくなっています。この増加は、Next.jsが以前処理していたメカニズムを処理するReact Server Componentsランタイムによるものです。これをさらに削減するよう取り組んでいます。

組み込みモジュール変換(安定版)

ローカルパッケージ(monoreposなど)や外部依存関係(node_modules)からの依存関係を変換およびバンドルするようにマークできるようになりました。この組み込みサポートは、人気のnext-transpile-modulesパッケージを置き換えます。

/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['@acme/ui', 'lodash-es'],
};

module.exports = nextConfig;

このパッケージでの作業と、組み込みサポートがコミュニティのニーズを満たすことを確実にするための支援について、Pierre de la Martinière(@martpie)に感謝します。

より小さなバンドルのためのインポート解決

多くの人気のnpmパッケージは、他のモジュールを再エクスポートする単一ファイルを提供するために「バレルファイル」を使用しています。例:

// @acme/ui/index.ts
export { default as Button } from './dist/Button';
export { default as Slider } from './dist/Slider';
export { default as Dropdown } from './dist/Dropdown';

これにより、パッケージの利用者は単一行で名前付きエクスポートを使用できます:

import { Button, Slider, Dropdown } from '@acme/ui';

バンドラーはこれらのバレルファイルを理解し、未使用の再エクスポートを削除できますが(「デッドコード除去」と呼ばれる)、このプロセスには再エクスポートされたすべてのファイルの解析/コンパイルが含まれます。

Next.jsに組み込まれた新しいSWC変換であるmodularizeImportsを追加しました。この新しい設定により、定義されたパターンに基づいてインポート文を変更するSWC変換が有効になります。

// 変換前(バレルファイル使用)
import { Button, Slider, Dropdown } from '@acme/ui';

// 変換後(プラグインによるモジュール化されたインポート)
import Button from '@acme/ui/dist/Button';
import Slider from '@acme/ui/dist/Slider';
import Dropdown from '@acme/ui/dist/Dropdown';

この変換は、next.config.jsmodularizeImportsオプションで可能です:

// next.config.js
module.exports = {
  modularizeImports: {
    '@acme/ui': {
      transform: '@acme/ui/dist/{{member}}',
    },
  },
};

@mui/icons-materiallodashでこの変換を活用することで、未使用ファイルのコンパイルをスキップできます。詳細はこちらデモを見る

Edge向けの軽量Node.jsランタイム、API Routes向けに安定版に

Next.js内のEdge Runtimeは、VercelやセルフホスティングなどのEdgeコンピューティングプラットフォームと互換性のあるNode.js APIの厳密なサブセット(RequestResponseなど)を使用します。

// pages/api/hello.ts
// "experimental-"プレフィックスは不要になりました
export const config = {
  runtime: 'edge',
};

export default function handler(req: Request) {
  return new Response('Hello World');
}

Next.js Middlewareは、より良いパフォーマンスのためにデフォルトでこの軽量エッジランタイムを既に使用しています。13.1では、Next.js内のEdge RuntimeがAPI Routes向けに安定版になりました。

Turbopackの改善

Next.js 13でTurbopack alphaをリリースした後、信頼性の向上、最も要求された機能のサポート追加、プラグインと他のフレームワークでの使用計画の定義に焦点を当ててきました。

Next.js 13.0.0以降、Turbopackは以下をサポートします:

  • PostCSS(Tailwind CSSを含む)
  • next/image
  • @next/font(Google Fonts)
  • 動的import()文からのCSS読み込み
  • CSSソースマップ(@ahabhgkの貢献に感謝)
  • next devエラーオーバーレイでのエラーハンドリング改善
  • メモリ使用量の改善
  • CSSモジュールサポートの改善
  • HMR更新のチャンキングアルゴリズム改善
  • HMRソースマップの信頼性向上

Turbopackベンチマークを可能な限り正確にするためのフィードバックと貢献について、Evan YouとViteコミュニティに感謝します。

next dev --turboでNext.js 13のTurbopack alphaバージョンを今すぐお試しください。フィードバックがあればGitHub Discussionでお知らせください。

Next.js高度なMiddleware

フィードバックのおかげで、Next.js Middlewareをこれまで以上に強力にしています。13.1では、Middlewareからレスポンスを返すことや、リクエストにヘッダーを設定することができるようになりました。

next.config.js内のexperimental.allowMiddlewareResponseBody設定オプションは不要になりました。

// middleware.ts
import { NextResponse } from 'next/server';

export function middleware(request: Request) {
  // ユーザーがアクセス権を持っているかチェック...
  if (!isAuthorized(request)) {
    return NextResponse.json({ message: 'Unauthorized' });
  }

  // 新しいヘッダーを追加、これによりgetServerSidePropsとAPI routesで
  // 読み取れる受信リクエストヘッダーが変更されます
  const requestHeaders = new Headers(request.headers);
  requestHeaders.set('x-version', '13.1');

  return NextResponse.next({
    request: {
      // 新しいリクエストヘッダーを適用
      headers: requestHeaders,
    },
  });
}

Next.js高度なMiddlewareについて詳しく学ぶ

その他の改善

  • @next/fontが同じフォント宣言で複数のフォントウェイトとスタイルの追加をサポートするようになりました。詳細はこちら
  • next/dynamicがReactプリミティブのlazy()<Suspense>を使用するようになりました。以前のsuspenseオプションは不要になりました。これらの変更により、next/dynamicはappディレクトリと互換性があります。
  • create-next-appが新しいデザインで更新され、レイアウトシフトゼロでフォントの自動セルフホスティングを行う@next/fontがデフォルトで含まれるようになりました。npx create-next-app@latestで試すか、テンプレートをデプロイ
  • Next.js 13のappディレクトリ(ベータ版)の最新機能と規約を紹介するApp Directory Playgroundに多数の改善を行いました。独自にデプロイ
  • 画像プレースホルダー、遅延読み込み、自動最適化、キーボードサポートなどを含む高性能画像ギャラリーテンプレートを作成しました。独自にデプロイ
  • 詳細なウォークスルーと特定のコミットへのリンクを含む、大規模なオープンソースReactとExpress.jsアプリケーションをNext.jsに移行する方法を理解するためのリソースを作成しました。

コミュニティ

Next.jsは、2,400人以上の個人開発者、GoogleやMetaなどの業界パートナー、そしてVercelのコアチームの共同作業の結果です。週に360万回以上のnpmダウンロードと97,900以上のGitHubスターを持つNext.jsは、Webを構築する最も人気のある方法の一つです。

GitHub DiscussionsRedditDiscordでコミュニティに参加してください。

このリリースは以下の方々によってもたらされました:

Next.jsチーム:Balazs、Hannes、Jan、Jiachi、Jimmy、JJ、Josh、Sebastian、Shu、Steven、Tim、Wyatt

Turbopackチーム:Alex、Donny、Justin、Leah、LongYinan、Maia、OJ、Tobias、Will

貢献者:@aarnadlr、@aaronbrown-vercel、@aaronjy、@abayomi185、@ademilter、@adictonator、@adilansari、@adtc、@alantoa、@aleksa-codes、@alfred-mountfield、@alpha-xek、@andarist、@andykenward、@anujssstw、@artdevgame、@artechventure、@arturbien、@aziyatali、@bennettdams、@bertho-zero、@blue-devil1134、@bot08、@brkalow、@brvnonascimento、@chanceaclark、@chibicode、@chrisipanaque、@chunsch、@colinking、@craigwheeler、@ctjlewis、@cvolant、@danmindru、@davidnx、@delbaoliveira、@devvspaces、@dtinth、@ducanhgh、@duncanogle、@ethomson、@fantaasm、@feugy、@fomichroman、@gruz0、@haschikeks、@hughlilly、@idoob、@iiegor、@imranbarbhuiya、@ingovals、@inokawa、@ishaqibrahimbot、@ismaelrumzan、@jakemstar、@janicklas-