npm-scriptsでSCSSをコンパイルする環境を構築する方法

今まではgulpを使ってきたのですが、最近はnpm-scriptsが流行りつつあります。
というのも、gulpだとどうしてもパッケージを大量に管理する必要があったり、gulpfile.jsがかなり複雑になりがちです。
package.jsonにある程度まとめて記述することで、管理するファイルも少なくなり、開発環境もシンプルになります。
今回はそんなnpm-scriptsで、SCSSのコンパイル方法についてまとめておきます。
npm scriptsを使う準備
gulpを使ったことがある人であれば問題ありませんが、npmを使う必要があるのでNode.jsをインストールしている必要があります。
過去にいくつか記事にしているので、まだインストールしていない人はそちらを参考にインストールしてください。
現時点では、nodenvを使ってインストールするのをオススメしています。
package.jsonの生成と必要パッケージのインストール
ターミナルで作業ディレクトリを開いて、下記のコマンドを入力します。
$ npm init -ypackage.jsonが生成されていればOKです。
次に下記のコマンドでそれぞれ必要となるパッケージをインストールします。
今回はSCSSのコンパイルに必要な最低限のパッケージのみにしています。
## SCSSのコンパイル
$ npm i -D node-sass
## ベンダープレフィックスの付与(Autoprefixer)とCSS圧縮
$ npm i -D postcss-cli cssnano autoprefixer
## ファイル変更の監視
$ npm i -D watch
## タスクを同時に実行する
$ npm i -D npm-run-allこれで必要なパッケージは揃いました。
package.jsonの設定
package.jsonを開いて、"scripts"の部分に下記を追加します。
"scripts": {
"all" : "run-p watch",
"watch": "watch 'run-s scss postcss' ./src/assets/scss",
"scss": "node-sass src/assets/scss/style.scss -o src/assets/css --source-map src/assets/css",
"postcss": "postcss src/assets/css/style.css -o src/assets/css/style.min.css"
},パス部分はフォルダ階層に合わせて調整が必要ですが、これで保存すればOKです。
この"scripts"部分に書くのがnpm scriptです。
基本的には下記の書き方になりますが、その辺はパッケージによって微妙に変わったり、オプションがあったりします。
"タスク名": "パッケージ名 元にするファイル指定 生成後のファイル指定",Post CSSの設定
今回はAutoprefixerやcssnanoといったPost CSSを使用しているので、pakcage.jsonと同じ階層にpostcss.config.jsを作成して、下記のコードを入力しておきます。
module.exports = {
plugins: [
require('cssnano')({
preset: 'default',
})
]
}次に、package.jsonと同じ階層に.browserslistrcを作成して、下記のコードを入力しておきます。
> 0.5%
last 2 versions
ie >= 11
Android >= 4とりあえずこれでAutoprefixerとcssnanoの設定は完了です。
実行方法
ターミナルでpackage.jsonと同じ階層を開いて、下記のコマンドを実行します。
npm run all特定のタスクのみを実行したい場合は、下記のようにnpm runのあとに、設定したタスク名を入力すれば実行できます。
npm run scss


アイコンフォントをPCにインストールしている場合は、コーディング後の確認に注意
アクセス解析ツールの定番!!Googleアナリティクスの登録方法
Visual Studio Codeで英単語のスペルチェックをしてくれる拡張機能「Code Spell Checker」
TwitterとFacebook用のOGP設定方法と表示確認方法
Visual Studio Codeで複数ファイルを編集するときにタブやペインの操作方法
さくらのレンタルサーバで.htaccessが原因で500エラーになってしまう場合のチェックリスト
.gitignoreに含めた方がいいファイル・フォルダが一覧でまとまっている「gitignore.io」
Dart Sassの変数の基本的な使い方|Dart Sass入門
Vue CLIでGA4を導入する方法
JavaScriptのテンプレートリテラル内で条件分岐を行う方法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う