【ソースマップについて知りたい人】

「Sassをコンパイルした際に生成されるソースマップについて知りたいなぁ。ソースマップに関するgulpの設定方法も知りたい。」
こういった方向けの記事です。
本記事の内容
今回は、 Sassにおけるソースマップの 役割や使い方から gulpでの設定方法までを 過去にWeb制作会社で エンジニアとして勤務していた この僕が解説します。
Sassにおけるソースマップの役割や使い方を解説

そもそもソースマップとは、 コンパイル前のソースが書かれている場所 を知ることが出来るものです。
こちらの具体的な説明は、 文章で説明するよりも 動画を観た方が分かりやすいと思うので、 下記動画の【3:10 ~ 5:56】 あたりを観てください。
ソースマップに関しては この動画を観れば完璧です。
Sassのソースマップをgulpで設定する方法

先ほどのYouTubeでは VSCodeの拡張機能を使った方法 でやっていましたが、 ここではgulpを使った方法を解説します。 (※gulpの場合、何も設定しないと mapファイルが生成されない。)
ちなみにまだ gulpのインストールが済んでいない方は 下記の記事を参考にしてください。
≫【mac版】gulpのインストールから使い方までを解説【Web制作初心者向け】【mac版】gulpのインストールから使い方までを解説【Web制作初心者向け】
macでgulpをインストールする方法が知りたいですか?本記事では、gulpのことを全く知らない人でもインストールできるようにコードや画像を多数掲載して分かりやすく解説しています。これからgulpを導入したいmacユーザーは必見です。
【gulp.watch】Sassの更新を監視して自動でコンパイルする方法
gulpのwatchという機能を使って、Sassを自動でコンパイルする方法が知りたいですか?本記事では、gulpのwatchという機能の導入の仕方から使い方までを解説しています。Sassを自動でCSSに変換したい人は是非ご覧ください。
Sass(scss)のパーシャルファイルの使い方【globで一括読み込み】
Sass(scss)のパーシャルファイルについて知りたいですか?本記事では、Sassのパーシャルファイルの使い方や読み込み方について、基礎から応用レベルまで解説しています。Sass(scss)でパーシャルファイルの機能を使いこなしたい方は必見です。
では、上記の記事を 読み終えたものとして進めていきます。
現在の 『gulpfile.js』内のコードは 下記のようになっているかと思います。
【gulpfile.js】
const gulp = require('gulp');
const sass = require('gulp-sass');
const sassGlob = require('gulp-sass-glob');
const plumber = require('gulp-plumber');
const notify = require('gulp-notify');
gulp.task('sass', function() {
return gulp.src('./sass/**/*.scss')
.pipe(plumber({errorHandler: notify.onError(
"Error: <%= error.message %>"
)}))
.pipe(sassGlob())
.pipe(sass({outputStyle: 'expanded'}))
.pipe(gulp.dest('./css'));
});
gulp.task('watch', function() {
gulp.watch('./sass/**/*.scss', gulp.task('sass'));
});
それではまず 「gulp-sourcemaps」パッケージを インストールします。 下記のコマンドを実行して下さい。
npm i --D gulp-sourcemaps
インストールが出来たら、 gulpfile.jsの下記の3ヶ所に コードを追記します。
const gulp = require('gulp');
const sass = require('gulp-sass');
const sassGlob = require('gulp-sass-glob');
const sourcemaps = require('gulp-sourcemaps'); //①「gulp-sourcemaps」を読み込み
const plumber = require('gulp-plumber');
const notify = require('gulp-notify');
gulp.task('sass', function() {
return gulp.src('./sass/**/*.scss')
.pipe(plumber({errorHandler: notify.onError(
"Error: <%= error.message %>"
)}))
.pipe(sourcemaps.init()) //②追記
.pipe(sassGlob())
.pipe(sass({outputStyle: 'expanded'}))
.pipe(sourcemaps.write()) //③追記
.pipe(gulp.dest('./css'));
});
gulp.task('watch', function() {
gulp.watch('./sass/**/*.scss', gulp.task('sass'));
});
ここまで出来たら、 タスクを実行してみましょう。 下記のコマンドを実行してください。
gulp sass

「あれ、、mapファイルが生成されない。。」
と思ったそこのあなた。 大丈夫です、 cssファイルの最下部を見てください。
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlcyI6WyJzdHlsZS5zY3NzIiwiZm91bmRhdGlvbi9fYmFzZS5zY3NzIiwiZm91bmRhdGlvbi9fcmVzZXQuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J・・・(省略)・・・ */
上記のような文字列が 追記されていると思います。
mapファイルは生成させずに CSSファイル内に書き込みたい という方は、 ここまでの手順で完了です。
mapファイルの書き出し
では次に、 先ほどのように cssファイルに書き込まず、 外部ファイルとして書き出したい という方向けの手順を解説します。
といっても簡単でして、
.pipe(sourcemaps.write())
上記のコードの()内に、
.pipe(sourcemaps.write('./'))
上記のように 書き出し先のパスを指定するだけです。
こちらは cssファイルから見たパス で書き出されるので、 上記の例だと cssファイルと同じ階層 に生成されます。


