著者:
    作成:2026-06-25最終更新:2026-06-25

    intlayerProxy

    intlayerProxyは、開発サーバー、プレビューサーバー、および本番SSR(Nitro / TanStack Start)のすべての環境に対応する言語ルーティングミドルウェアを登録するViteプラグインです。

    Intlayer v9以降intlayerProxyは自動的にメインのintlayer()プラグインに含まれ、routing.enableProxy: trueを介してデフォルトで有効になります。より低レベルな制御が必要な場合や、標準のintlayer()セットアップ以外で使用する場合にのみ、個別に登録する必要があります。

    使用方法

    intlayer()の一部として(推奨、v9+)

    intlayerProxyを個別に登録する代わりに、メインプラグインにproxyオプションを渡します:

    ts
    // vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({  plugins: [    intlayer({      proxy: {        ignore: (req) => req.url?.startsWith("/api"),      },    }),  ],});

    スタンドアロン(必要な場合)

    ts
    // vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({  plugins: [intlayer()],});

    オプション

    ts
    import type { IntlayerProxyPluginOptions } from "vite-intlayer";

    すべてのオプションは任意であり、単一のオブジェクトとして渡されます:

    オプション 説明
    ignore (req: IncomingMessage) => boolean リクエストを言語ルーティングから除外する述語。リクエストをスキップするにはtrueを返します(例:APIルート、ヘルスチェック)。
    configOptions GetConfigurationOptions getConfiguration()に転送されるIntlayer設定のオーバーライド。プロキシに特定の設定ファイルを読み込ませたり、値を上書きしたりする必要がある場合に使用します。

    ts
    intlayerProxy({  ignore: (req) => req.url?.startsWith("/api"),  configOptions: { configFile: "./config/intlayer.config.ts" },});

    createIntlayerProxyHandler

    createIntlayerProxyHandlerは、すべての言語ルーティングロジックを含む、特定のフレームワークに依存しないNode.jsの(req, res, next)スタンドアロンミドルウェアを作成します。ViteプラグインAPIが使用できない環境(例:純粋なNode.jsサーバーやカスタムNitroモジュール)で有用です。

    ts
    import { createIntlayerProxyHandler } from "vite-intlayer";const handler = createIntlayerProxyHandler({  ignore: (req) => req.url?.startsWith("/api"),  configOptions: { configFile: "./config/intlayer.config.ts" },});// Express / Connectapp.use(handler);

    本番SSR(TanStack Start / h3を介した Nitro)

    ts
    // server/middleware/intlayerProxy.tsimport { fromNodeMiddleware } from "h3";import { createIntlayerProxyHandler } from "vite-intlayer";export default fromNodeMiddleware(  createIntlayerProxyHandler({    ignore: (req) => req.url?.startsWith("/api"),  }));

    ルーティングの動作

    ミドルウェアは、next-intlayerミドルウェアのルーティングロジックを反映しており、すべてのIntlayerルーティングモードをサポートしています。

    ルーティングモード

    モード ブラウザに表示されるURL 動作
    prefix /ja/about デフォルト。URLの言語プレフィックス。prefix-allが有効でない限り、デフォルト言語はプレフィックスなしのURLにリダイレクトします。
    prefix-all /en/about, /ja/about デフォルト言語を含むすべての言語が常にプレフィックス付きになります。
    no-prefix /about URLに言語は含まれません。言語はCookieにのみ保存され、内部的にURLの書き換えが行われます。
    search-params /about?locale=ja クエリパラメータとして渡される言語。パラメータがない、または古い場合に、localeパラメータを追加/更新するためにリダイレクトします。

    検出の優先順位

    1. URLパスのプレフィックス(例:/ja/aboutja)。
    2. Cookie / localStorageの値(intlayer-locale)。
    3. Accept-Languageヘッダー。
    4. 設定ファイル内のdefaultLocale

    自動バイパス

    ミドルウェアは、言語処理を行うことなく、常に以下のリクエストをそのまま通します:

    • ignore述語に一致するリクエスト。
    • /node_modules/**
    • /@** – Viteの内部処理(@vite/@fs/@id/など)。
    • /_** – サーバーの内部処理(__vite_ping__manifestなど)。
    • パスがファイル拡張子で終わるリクエスト(静的アセット)。静的アセットのパスに言語プレフィックスが存在する場合(例:/ja/logo.png)、ファイルが正しく提供されるようにプレフィックスが削除されます。

    ドメインルーティング

    Intlayer設定でrouting.domainsが構成されている場合、ミドルウェアはドメインをまたぐ言語ルーティングを処理します:

    • domains.zh = "intlayer.zh"のとき、intlayer.org上の/zh/aboutに対するリクエストはhttps://intlayer.zh/aboutにリダイレクトされます。
    • intlayer.zh/aboutへのリクエストは、[locale]ルートパラメータが入力されるように、内部的に/zh/aboutに書き換えられます。

    リダイレクトループ防止

    ミドルウェアは、2秒のスライディングウィンドウ内で、originalUrl → newUrlのペアごとのリクエストに対するリダイレクト回数を追跡します。ウィンドウ内で10回を超えるリダイレクトが発生した場合、無限ループに陥るのを防ぐために、説明的なエラーを含む500応答を返します。

    Nitro / 本番SSR(自動注入、v9+)

    intlayerProxyがViteプラグインとして使用される場合、.nitroプロパティを保持します。nitro/viteビルドプラグインはこのプロパティを読み取り、nitroConfig.modulesにプッシュします。これにより、intlayerNitroHandlerが自動的にNitroサーバーミドルウェアとして登録されます。本番SSRのための手動設定は不要です。

    Nitroハンドラーは、h3 v2のWeb Fetch APIイベントモデルを使用しているため(fromNodeMiddlewareではない)、Node、Bun、Deno、エッジランタイムなど、すべてのNitroプリセットと互換性があります。

    非推奨のエイリアス

    非推奨のシグネチャ 代替品
    intlayerMiddleware intlayerProxy
    intLayerMiddlewarePlugin intlayerProxy