mcpField
N
nextjs-16-proxy

nextjs-16-proxy

github.com/blink-new開発56 回インストール
リポジトリ

nextjs-16-proxy について

Next.js 開発者向けに、middleware から Next.js 16 の `proxy` 規約への移行と、ルーティング前のリライト方法を説明するスキルです。

主な機能

  1. 01`middleware.ts` から `proxy.ts` への変更点
  2. 02ファイルの配置場所の説明
  3. 03ルーティング前に行う proxy リライト
  4. 04middleware 移行コマンド

活用シーン

  1. 01Next.js 15 の middleware ファイルの移行
  2. 02動的ルートと競合するパスのリライト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/blink-new/claude --skill nextjs-16-proxy

インストール後、Claude Code で/nextjs-16-proxyを入力して読み込まれたか確認します。

詳細

Next.js 16 の Proxy 規約

Next.js 16 では、ネットワーク境界としての役割をより適切に表すため、middleware が proxy に名称変更されました。

Middleware からの主な変更点

旧(Next.js 15)新(Next.js 16 以降)
middleware.tsproxy.ts
export function middleware()export function proxy()
同じ場所同じ場所

ファイルの場所

proxy.ts は app または pages と同じ階層に配置します。

src/
├── proxy.ts      ← Correct location
├── app/
│   └── ...

app/ の中には配置しません。

src/
├── app/
│   ├── proxy.ts  ← Wrong location
│   └── ...

基本テンプレート

import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";

export function proxy(request: NextRequest) {
  const { pathname } = request.nextUrl;

  // Example: rewrite /uploads/* to /api/uploads/*
  if (pathname.startsWith("/uploads/")) {
    const newUrl = request.nextUrl.clone();
    newUrl.pathname = pathname.replace("/uploads/", "/api/uploads/");
    return NextResponse.rewrite(newUrl);
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/uploads/:path*"],
};

よくある問題:動的ルートがパスを捕捉する

ルートに [teamSlug] のような動的ルートがある場合、next.config.ts のリライトが適用される前にパスを捕捉することがあります。

問題:

  • リクエスト:/uploads/image.png
  • 動的ルート [teamSlug] が teamSlug = "uploads" として捕捉する
  • 404 になります

解決策: next.config.ts のリライトではなく、proxy.ts を使用します。Proxy はルーティングの前に実行されます。

移行コマンド

npx @next/codemod@canary middleware-to-proxy .

これにより、次の処理が自動的に行われます。

  • middleware.ts を proxy.ts に名称変更する
  • 関数名を middleware から proxy に更新する

コメント