Skip to content
Latchkey

ソースマップとは?ミニファイされたコードのデバッグ

ソースマップは、変換されミニファイされた出力内の位置を、元のソースの正確な行と列にマッピングする JSON ファイルです。

本番 JavaScript は、書いたものにほとんど似なくなるまでトランスパイル、バンドル、ミニファイされます。エラーが発火すると、スタックトレースはそのごちゃ混ぜになった出力を指し、デバッグには役立ちません。ソースマップは接続を復元し、ブラウザの dev tools や error tracker が実際のソースを表示できるようにします。マップをどこでどう生成しアップロードするかは CI の判断です。

ソースマップに含まれるもの

ソースマップは、元のファイル名、(オプションで)元のソース内容、そして各生成位置からそのソース位置へのマッピングのコンパクトなセットを含む JSON ドキュメントです。build ツールはそれを出力ファイルと並べて出力します。

ブラウザがそれをどう使うか

出力ファイルの末尾にあるコメントがマップを指します。dev tools が開いているとき、ブラウザはマップを取得し、実行中のコードがミニファイされていても、デバッガーとスタックトレースに元のソースを表示します。

プライバシーのトレードオフ

  • 公開マップは、本番コードを読みやすく、リバースエンジニアリングしやすくする。
  • 多くのチームは、公開配信する代わりにマップを error tracker にアップロードする。
  • hidden source map は、公開参照コメントなしでファイルを出力する。

ソースマップとエラートラッキング

Sentry のようなツールは、アップロードされたマップを使ってミニファイされたスタックトレースをシンボリケートします。pipeline はマップ付きで build し、それを error サービスにアップロードし、それからユーザーに配信せずに deploy するため、ソースを漏らすことなくトレースが読みやすいままになります。

CI/CD でのソースマップ

マップの生成は build 時間と出力サイズを増やすため、本番 build はしばしばそれらを別の artifact として出力し、アップロードしてから deploy から除外します。CI ステップは build commit に紐づいたマップをアップロードするので、エラーが正確なリリースにマッピングされます。

重要なポイント

  • ソースマップは、ミニファイされた出力を元のソースの位置にマッピングします。
  • 公開マップはソースを露出させるため、多くのチームは代わりに error tracker にアップロードします。
  • CI は通常マップを生成し、リリースごとにアップロードし、それを deploy から除外します。

関連ガイド