Next.jsの書き方そのままで、ビルド4倍速・バンドル57%減。Vinextの仕組みを全部調べた

に公開1

Next.js は素晴らしいフレームワークだ。みんな使ってるし、自分も使っている。

ただ、2つだけ「これはもうしょうがないよね」とみんなが諦めている問題がある。Vercel 以外でまともに動かないことと、ビルドが遅いことだ。

2026年2月24日、Cloudflare が Vinext を発表した。Vite 上に Next.js の API をゼロから再実装したフレームワークだ。既存の app/pages/next.config.js がそのまま動いて、ビルドは4倍速、バンドルサイズは57%減

この記事では Vinext が何をやっているのか、なぜ速いのか、そして本当に使えるのかを全部調べた。

なぜ「しょうがない」だったのか

この2つの問題の根っこは同じだ。Next.js のビルドツールが完全に独自ということ。

覚えている人もいると思うが、かつて React の入門といえば create-react-app(CRA)だった。CRA は内部で Webpack を使っていたが、2023年に非推奨になり、React 公式は Vite を推奨するようになった。

その Vite は今やフロントエンドのデファクトスタンダードになりつつある。

フレームワーク ビルドツール
TanStack Start Vite
Remix / React Router Vite
Nuxt(Vue) Vite
SvelteKit Vite
Astro Vite
Next.js Turbopack(独自)

主要フレームワークがほぼ全て Vite に集まる中、Next.js だけが独自路線を走っている

Next.js は Webpack の後継として Turbopack を開発中だ。皮肉なことに、Turbopack を作っているのは Webpack の作者本人(Tobias Koppers)で、Vercel が彼を雇っている。Turbopack は確かに速い。だが Vercel のエコシステムに最適化されていて、他のプラットフォームでは使えない。

ビルドが遅いのも、Vercel 以外でまともに動かないのも、この「独自ビルドツール」に縛られていることが原因だ。

これまでも OpenNext というプロジェクトが、Next.js を AWS Lambda や Cloudflare Workers にデプロイできるようにしてきた。だがこれは Next.js のビルド出力をラップする方式で、Next.js の内部実装が変わるたびに追従しなければならない。根本的な解決ではなかった。

Vinext はまったく違うアプローチを取った。ラップするのではなく、Next.js の公開 API を Vite 上にゼロから再実装した。世の中の流れに合流させた、とも言える。

# OpenNext のアプローチ
Next.js でビルド → 出力を変換 → 他のプラットフォームにデプロイ

# Vinext のアプローチ
Next.js の API を Vite で再実装 → 最初から Vite としてビルド

具体的には、33以上のシムモジュールnext/* のインポートをインターセプトする。next/linknext/routernext/navigationnext/servernext/headers—— これらを全部、Vinext 独自の実装に差し替える。

// コードは変わらない
import Link from 'next/link';
import { useRouter } from 'next/navigation';

// ↑ Vite の resolveId フックが next/* をインターセプトして
// Vinext のシム実装にリダイレクトする

既存の app/pages/next.config.js がそのまま動く。移行コマンドも用意されている。

npm install vinext
# package.json の scripts を書き換えるだけ
# "dev": "vinext dev"
# "build": "vinext build"

対応している機能(API の94%)

  • ファイルシステムルーティング(App Router / Pages Router 両対応)
  • SSR、ストリーミング、React Server Components
  • Server Actions("use server"
  • getStaticPropsgetServerSideProps、ISR
  • Middleware、Rewrites、Redirects
  • Metadata API
  • "use cache" ディレクティブ
  • 環境変数(.env*NEXT_PUBLIC_*

対応していないもの

  • Vercel 固有機能(Analytics、KV/Blob/Postgres バインディング)
  • 画像の最適化next/image は動くが、ビルド時の最適化は Unpic CDN に委譲)
  • フォントのサブセット化(CDN ベースのロードのみ)
  • Webpack / Turbopack の設定(代わりに Vite プラグインを使う)

100%の互換性は意図的にゴールにしていない。Cloudflare のエンジニア自身が「動作は完全に同じではない」と明言している

なぜ速いのか

ベンチマーク結果から見てみよう。テスト条件は33ルートの共通アプリケーション。

ビルド時間

実装 ビルド時間 倍率
Next.js 16.1.6(Turbopack) 7.38秒 ベースライン
Vinext + Vite 7 / Rollup 4.64秒 1.6倍高速
Vinext + Vite 8 / Rolldown 1.67秒 4.4倍高速

クライアントバンドルサイズ(gzip後)

実装 サイズ 削減率
Next.js 16.1.6 168.9 KB ベースライン
Vinext(Rollup) 74.0 KB 56%削減
Vinext(Rolldown) 72.9 KB 57%削減

※ Cloudflare 公式ブログは「方向性を示すものであり、決定的なものではない」と注記している。

なぜこの差が出るのか

ポイントは Vite のアーキテクチャにある。

開発時(dev server)

Next.js(Webpack ベース)は、開発サーバー起動時にアプリケーション全体をバンドルする。ファイルが増えるほど起動が遅くなる。Turbopack はこれを改善しているが、アーキテクチャの根本は変わらない。

Vite は違う。ESM(ES Modules)をネイティブに活用して、ブラウザが必要とするモジュールだけをオンデマンドで変換する。アプリが100ページあっても、開いたページに必要なモジュールしか処理しない。

# Webpack 系のアプローチ
全ファイル → バンドル → ブラウザ
(起動時に全部処理する)

# Vite のアプローチ
ブラウザがリクエスト → そのファイルだけ変換 → 返す
(必要になるまで何もしない)

本番ビルド時

Vinext は Vite 8 から搭載される Rolldown(Rust 製バンドラー)を活用できる。Rolldown は Rollup の API 互換を保ちながら、Rust のパフォーマンスで動く。これがビルド4.4倍速の主因だ。

バンドルサイズの差

57%の削減は大きい。これは Vite / Rollup のツリーシェイキングが Next.js の内部実装より効率的に不要コードを除去できるためだ。Next.js は内部でフレームワーク固有のランタイムコードを含むが、Vinext は Vite のエコシステムをそのまま使うため、余計なランタイムが少ない。

AI で1週間で作れた理由

800以上のセッションで Claude を使い、ほぼ全てのコードを AI が書いた。コストは$1,100。これが可能だった理由を、開発者の Steve Faulkner(Cloudflare Workers org のディレクター)自身が公式ブログで分析している。

1. テストスイートが「機械読み取り可能な仕様書」になった

Next.js のリポジトリには2,000のユニットテストと400のE2Eテストがある。Vinext チームはこれをそのまま移植して、「テストが通るまで AI に書かせる」アプローチを取った。

Hacker News のコメントで的確に表現されていた。

「AI は人間の意図を理解する必要がなかった。アサーションを通過させる必要があっただけ」

テストがあることで、AI の出力を客観的に検証できる。「なんとなく動いてそう」ではなく「2,400のテストケースが通っている」と言える。これはAI開発との相性が極めていい。

2. Vite という堅牢な基盤

Hacker News で「Vinext の95%は純粋な Vite だ」という指摘があった。AI がゼロからバンドラーを書いたわけではない。Vite のプラグインシステム、HMR、モジュール解決といった基盤の上に、Next.js 固有のロジック(ルーティング、RSC、ISR など)を載せた形だ。

3. モデルの進化

公式ブログでの Faulkner 自身の言葉:

「以前のモデルではこのサイズのコードベースで一貫性を維持できなかっただろう」

AI がフレームワーク全体のアーキテクチャをコンテキストに保持し、モジュール間の相互作用を推論し、十分な頻度で正しいコードを生成できるようになった——というのが彼の見解だ。

テスト駆動 × AI という新パラダイム

この事例が示唆するのは、テストスイートがあれば AI は大規模ソフトウェアを再実装できるということだ。

逆に言えば、テストスイートが公開されているプロジェクトは、同じ手法で再実装されるリスクがある。実際に Hacker News では、SQLite がまさにこのシナリオを防ぐためにテストスイートを非公開にしていることが指摘されていた。

コミュニティの反応

海外のエンジニア向けニュース掲示板 Hacker News では激しい議論が起きている。両方の意見を紹介する。

肯定的な声

「本番アプリを4倍高速にビルドし、クライアントバンドルを57%小さくする。これは無視できない」

「Next.js チームがユーザーの 0.1% のためのファンシーな機能に集中し、残り 99.9% のパフォーマンスを犠牲にしてきた。これはその問題に答える」

TanStack の作者 Tanner Linsley もプロジェクトを公式に支持している。

批判的な声

「基本的な hello world の例が動かないのに、何かを『再実装した』と言えるのか」

「コードベースはほぼ全てAI生成で、人間のレビューが追いついていない」

「Cloudflare がやることはすべて半焼けだ」

実際、GitHub では hello world が動かない Issue が報告されている。出たばかりのプロジェクトであることは間違いない。

「このプロジェクトは本気か?」

GitHub の Issue #21 で直接この質問がされた。Faulkner は「我々は間違いなくこれに投資する」と回答し、既存顧客による本番利用を根拠に挙げた。実際に CIO.gov(米国政府サイト)がベータ版で Vinext を本番稼働させている。

まとめ

Next.js Vinext
ビルドツール Turbopack(独自) Vite / Rolldown
ビルド速度 7.38秒 1.67秒(4.4倍)
バンドルサイズ 168.9 KB 72.9 KB(57%減)
デプロイ先 Vercel 最適化 Cloudflare Workers(現状)
API カバレッジ 100% 94%
成熟度 安定 実験的

Vinext は「Next.js を殺す」ものではない。Next.js の書き方はそのまま、ビルドとデプロイの自由度を取り戻すプロジェクトだ。

技術的には、Vite のアーキテクチャが Next.js の独自バンドラーより効率的にビルド・バンドルできることを数値で証明した。AI 開発の観点では、テストスイートが「機械読み取り可能な仕様書」として機能するという発見が、今後のソフトウェア開発に大きな示唆を与えている。

ただし、出て1週間のプロジェクトだ。hello world が動かない Issue がある現実を考えると、今すぐ本番に持ち込むものではない。まずは動向を追いつつ、Vite 8 / Rolldown のエコシステムの成熟を見守るのが現実的だろう。

個人的に一番刺さったのは、**「テストがあれば AI はフレームワークを再実装できる」**という事実だ。Next.js を使っている身としては、フレームワーク選択の基準が「エコシステムの囲い込み」から「API の良さ」に移っていく未来を感じた。

Discussion

T2フォックスT2フォックス

「API カバレッジ:94%」なのですが、これに対してVercel社のNext.js開発者のJimmy Lai氏が「これはCloudflare社が52項目のチェックリストを自分たちで作成し、自分たちで付けた点数では94%という意味」「本物のNext.jsテストスイートでのVinextの通過率は dev 13%、e2e 20%、production 10%」と投稿していました😮。テスト×AIでのフレームワーク再実装の可能性はまだ議論の余地があるかもです😮。
https://x.com/feedthejim/status/2027156055617364272