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

    intlayerMinify

    intlayerMinifyは、本番ビルド(production build)時にコンパイルされた辞書JSONファイルを圧縮するViteプラグインです。不要な空白をすべて取り除き、intlayerPruneと組み合わせることで、コンテンツフィールド名を短いアルファベットのエイリアス(abc、…)にオプションで変更し、バンドルサイズをさらに削減します。

    intlayer()を使用する場合、このプラグインはすでに自動的に含まれ、設定されています。プラグインのスタックをご自身で構成する場合にのみ、手動で登録する必要があります。

    使用方法

    ts
    // vite.config.tsimport { defineConfig } from "vite";import { intlayerMinify, intlayerPrune } from "vite-intlayer";import { createPruneContext } from "@intlayer/babel";const pruneContext = createPruneContext();export default defineConfig({  plugins: [    intlayerPrune(intlayerConfig, pruneContext),    intlayerMinify(intlayerConfig, pruneContext),  ],});

    有効化の条件

    intlayerMinifyは、以下の3つの条件がすべて満たされている場合にのみ有効になります:

    1. Viteコマンドがbuildである(serve / devではない)。
    2. build.optimizetrueである(またはundefinedであり、ビルド時のデフォルトであるtrueになる)。
    3. Intlayer設定でbuild.minifytrueである。

    エディタは完全で人間が読める辞書コンテンツを必要とするため、editor.enabledtrueの場合、プラグインは自動的に無効になります。

    圧縮される対象

    プラグインは、2つの辞書の場所(intlayer.systemから解決される場所)をターゲットにします:

    • dictionariesDir — 静的な全言語共通の辞書(例:.intlayer/dictionaries/*.json
    • dynamicDictionariesDir — 言語ごとの動的な辞書
    フェッチモード辞書(fetchDictionariesDir)は、実行時に元のフィールド名を使用してリモートAPIから提供されるため、決して圧縮されません。フィールド名を変更すると、サーバーの応答とクライアント側のプロパティアクセスとの間に不一致が生じるためです。

    フィールド名の難読化(プロパティの圧縮)

    intlayerPruneがコードベースを分析し、pruneContext.dictionaryKeyToFieldRenameMapにデータを入力すると、intlayerMinifyはコンテンツフィールド名を短いエイリアスに変更します。例えば:

    json
    // 変更前{ "key": "myDict", "content": { "title": "Hello", "description": "World" } }// 変更後(難読化あり){ "key": "myDict", "content": { "a": "Hello", "b": "World" } }

    対応するソースファイルのプロパティアクセスは、intlayerOptimize内のBabelパスによって変更されるため、実行時の動作は変わりません。

    Intlayerの内部フィールド(nodeTypetranslationなど)の名前が変更されることはありません。

    エッジケースの辞書

    pruneContext.dictionariesWithEdgeCasesでフラグが立てられた辞書(クリーンアップ(prune)フェーズで検出された構造的な異常)は、破損したデータを配信するのを防ぐために完全にスキップされ、圧縮も難読化もされません。

    修飾子グループ(コレクション / バリアント / メタレコード)

    qualifierTypes配列を持つ辞書(コレクション、バリアント、メタレコード)について、プラグインはqualifierTypes配列とmetaサイドマップをそのまま保持します。contentエントリのフィールド名のみが難読化されます。実行時のセレクターマッチングに使用される複合キーが変更されることはありません。