4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

業務でソースマップの設定をすることがあり、何ですかそれ状態だったので調べました。

ソースマップって何?

コンパイル前のコードとコンパイル後のコードの対応関係を表したファイル。

フロントエンド開発においては、Vue.jsなどのフレームワーク特有のファイルがJSにコンパイルされたり、コードがminify(圧縮)されたりしていて、ビルドされたコードは開発時に記述したコードとは似ても似つかないものになります。
そのため、コンパイル後のコードを見ても、どこでエラーが起きているかといったことが特定しづらくなっているのです。

ソースマップを使うことで、コンパイル前の、開発時に記述したコードがコンソールなどに表示されるようになり、コードを追いやすくなります。
開発用のツールの一種ということですね。

試してみる

create-vueで作成できる基本的なVueプロジェクトでソースマップの働きを確認しみてみます。
ビルドツールはViteです!

↓こんなサイトです。
スクリーンショット 2024-11-23 21.47.50.png

デフォルトの設定

まずは普通にビルドしてみます。

以下のファイルが生成されました。

  • index.html
  • assets/index-CUkVw1a.js
  • assets/index-TXLObeWa.css

これをvite preview(ローカルでビルドをプレビューできるViteの機能)してみます。

ビルドされたファイルがそのままデバッグツールのソースタブに表示されました。

スクリーンショット 2024-11-23 21.57.49.png

minifyされていてとても読みづらい(読めない)ことがわかると思います。

ソースマップを生成してみる

vite.config.tsに以下の内容を追記して、ビルド時にソースマップが生成されるようにします。

vite.config.ts
...
export default defineConfig({
    ...
    // 追記
    build:{
        sourcemap: true
    }
})

ビルドしたら、前回のビルド成果物に加えて、assets/index-CUkVw1a.js.mapが生成されています。

スクリーンショット 2024-11-23 23.55.47.png

previewしてみましょう。

スクリーンショット 2024-11-24 0.01.49.png

srcディレクトリ(とnode_modulesディレクトリ)が追加され、コンパイル前のコードがみれるようになっていました!

スクリーンショット 2024-11-24 0.38.48.png

「ソースマップを読み込みました」というメッセージも表示されます。

mapファイルの中身はjson形式になっています。file, sources, sourcesContent, namesといったプロパティがあり、これらのデータをもとに元のソースコードを復元しているようです。

またコンパイルされたJSファイルの末尾に

//# sourceMappingURL=index-CUkVfw1a.js.map

という行が挿入されていて、この行を編集するとコンパイル前のソースコードが見られなくなったので、このコメントでJSファイルとソースマップファイルの対応づけをしているのだと思います。

おわりに

ソースマップを有効にしているとデプロイ先でもコンパイル前のソースコードが見られるようになってしまうので、あまり設定する機会はないかもしれません。(自分はSentryでソースコードを表示させるために使いました)
必要な場合のみ適切に使っていきましょう!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?