`@tailwindcss/vite`でSourcemapの警告が出ていた問題を修正

tailwindlabs/tailwindcss

@tailwindcss/viteのtransformフックで、Tailwind CSSのルートファイルでないCSSを処理した際に src をそのまま返していたことが原因で、Sourcemap is likely to be incorrect 警告が大量に出力されていました。変更を加えなかった場合は undefined を返すよう修正し、不要な警告を解消します。

背景

Viteのtransformフックには、変更なしを示すための仕様があります。モジュールのソースを変更しなかった場合、undefined(またはその他のnull値)を返すことでViteに「何も変わっていない」と伝えられます。逆に、変更前と同じ文字列を返してしまうと、ViteはSourcemapの連鎖(sourcemap chain)を照合しようとして不整合を検出し、警告を発します。

#19930では、@tailwindcss/vite@4.2.2 と Nuxt 4.4.2 / Vite 7.3.2 の組み合わせで、ビルド時に [plugin @tailwindcss/vite:generate:build] Sourcemap is likely to be incorrect ... という警告が繰り返し出力されることが報告されていました。この警告はCIログを汚染し、strict な警告ポリシーを採用しているプロジェクトではリリースブロッカーとして扱われるケースもありました。

@tailwindcss/viteのtransformフックは、処理対象のCSSファイルがTailwind CSSのルートファイル@tailwind ディレクティブを持つファイル)かどうかを判定します。ルートでない場合はCSSを変換しないため、受け取った src をそのまま戻り値として返していましたが、これがViteの仕様に反していました。

技術的な変更

packages/@tailwindcss-vite/src/index.ts の serve・build 両フェーズのtransformハンドラで、result が偽値だった場合の戻り値を src から undefined(暗黙の return)に変更しました。

変更前(serve / build 共通パターン):

let result = await root.generate(src, (file) => this.addWatchFile(file), I)
if (!result) {
  roots.delete(id)
  return src
}

変更後(serve / build 共通パターン):

let result = await root.generate(src, (file) => this.addWatchFile(file), I)
if (!result) {
  roots.delete(id)
  return
}

差分としては2箇所(serveフェーズ: 241行目付近、buildフェーズ: 357行目付近)でそれぞれ return srcreturn に置き換えるだけの1行変更です。

あわせて、integrations/vite/source-maps.test.ts に再現テストが追加されました。テストでは、Tailwind CSSルートを持たないViteプロジェクトのproductionビルドを構成し、inspect-source-map-chain という名前のカスタムプラグインを挿入して getCombinedSourcemap() を呼び出すことで、Rollupがビルド中にsourcemapチェーンを強制的に解決するシナリオを再現しています。

設計判断

Viteのtransformフックにおけるnull返却規約を正しく遵守することが、この修正の核心です。Viteは transform の戻り値が null / undefined であれば「変換なし」と解釈し、sourcemapチェーンへの影響を発生させません。一方、同一の文字列を返した場合でも「変換あり」として扱い、前後のsourcemapとの照合を試みます。

この修正はTailwind CSSルートでないCSSファイルへの処理を変えるものではなく、Viteへの「変更なし」シグナルを正しく伝える点のみの修正です。roots.delete(id) による内部状態のクリーンアップは引き続き行われるため、動作上の副作用はありません。

まとめ

return srcreturn に変えるだけの2行の修正ですが、Viteのtransformフック仕様に対する正確な準拠により、Tailwind CSSルートを含まないプロジェクトやモジュールに対する不要なsourcemap警告を根本から除去できます。CIログのノイズ削減やstrict警告ポリシーへの対応として、実用的な影響の大きい修正です。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
feb173eb

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)→背景・技術詳細(各論)→まとめ(結論)という構成が明確で、必要な要素がすべて含まれています。特に「設計判断」セクションが設けられており、変更の核心を深く理解できる構成になっています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```typescript:packages/@tailwindcss-vite/src/index.ts)とGitHubリンク記法([#19930](URL))の両方がガイドライン通りに正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

ViteのtransformフックやSourcemapなど、専門的なトピックを前提知識として扱っており、専門知識を持つエンジニアという対象読者に適合しています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクション、各パラグラフが「総論→各論」の構造で書かれており、すべての段落がトピックセンテンスで始まっています。非常に構造的で読みやすい文章です。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事で引用されている `packages/@tailwindcss-vite/src/index.ts` のコード変更(`return src` から `return` へ)は、提供されたDiff情報と完全に一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「transformフック」「sourcemap chain」「@tailwind ディレクティブ」などの技術用語が正確かつ適切な文脈で使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

「変更がない場合はundefinedを返すべき」というViteの仕様に関する説明は、PR Descriptionの「when nothing changed, you have to return a NullValue such as undefined」という記述に裏付けられており、技術的に正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張は、PRのDescription、Diff、関連Issue番号に基づいており、根拠のない推測や憶測は含まれていません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#20103)およびIssue番号(#19930)が正確に記載され、リンクも正しく設定されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトル「`@tailwindcss/vite`でSourcemapの警告が出ていた問題を修正」は、PRのタイトル「Fix 'Sourcemap is likely to be incorrect' warnings when using `@tailwindcss/vite`」の内容を正確に反映しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

PRに記載のないバージョンサポート情報やリリース日程といった外部知識の捏造は見られません。Viteの仕様に関する説明は、変更内容を理解するための適切な文脈提供の範囲内です。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「警告が出ていた」「報告されていました」など、事象の発生時期を示す時間表現は正確に使用されています。