blog

これからはじめる Gulp シリーズこれからはじめるGulp(2):gulp-sassを使ってSCSSをコンパイルするタスクを作ってみる

    • Ryuichi Nonaka
    この記事は書かれてから1年以上経過しており、内容が古い場合があります。

    はじめに

    この記事はGulp.js(全俺) Advent Calendar 2014です。

    前回のこれからはじめるGulp:bundler, rbenv, nodebrewでGulp環境を作ってみる(1)でGulp自体を動かすことができたので今回はgulp-sassを使ってSCSSファイルをCSSにコンパイルするタスクを作ってみます。

    gulp-sassについて

    gulp-sassはSassのGulpプラグインです。gulp-sassはnode-sassを使っています。代わりにgulp-ruby-sassを使うことで細かなオプション設定が行えます。

    ディレクトリとサンプルSCSS

    先にディレクトリとSCSSを作っておきます。

    src, destディレクトリを作る

    ソースとなるSCSSファイルはsrcディレクトリに、コンパイル後のCSSはprod(dist)ディレクトリとします。これは一例なのでディレクトリ名は好みに合わせて作ってください。

    $ mkdir src
    $ mkdir src/scss
    $ mkdir prod
    $ mkdir prod/css
    

    SCSSのサンプル

    作成したディレクトリにSCSSのサンプルファイルを作ります。

    $ vi src/scss/style.scss
    

    SCSSがしっかりコンパイルされているかチェックしたいので変数を使った簡単なSCSSを用意します。

    $color: #555;
    
    body {
      background: $color;
    }
    

    gulp-sassのインストール

    --save-devを付けてgulp-sassをインストールします。

    $ sudo npm install gulp-sass --save-dev
    Password:
    -
    > node-sass@0.9.6 install /Users/nukos/Projects/test.io/vccw/www/wordpress/wp-content/themes/test.io/node_modules/gulp-sass/node_modules/node-sass
    > node build.js
    
    `darwin-x64-v8-3.14` exists; testing
    
      ․․․․․․․․․․․․․․․․․․․․․․․․․․
    
      26 passing (43ms)
    
    Binary is fine; exiting
    gulp-sass@1.1.0 node_modules/gulp-sass
    ├── map-stream@0.1.0
    ├── vinyl-sourcemaps-apply@0.1.4 (source-map@0.1.40)
    ├── gulp-util@3.0.1 (lodash._reinterpolate@2.4.1, minimist@1.1.0, vinyl@0.4.5, chalk@0.5.1, through2@0.6.3, lodash.template@2.4.1, multipipe@0.1.2, dateformat@1.0.11, lodash@2.4.1)
    └── node-sass@0.9.6 (get-stdin@3.0.2, object-assign@1.0.0, node-watch@0.3.4, node-sass-middleware@0.3.1, nan@1.3.0, shelljs@0.3.0, mkdirp@0.5.0, chalk@0.5.1, yargs@1.3.3, sinon@1.10.3, mocha@1.21.5)
    

    タスクを作る

    gulpfile.jsにsassのタスクを作ります。タスクの設定方法の詳細はAPIドキュメントを参考に。

    モジュールの読み込み

    require()を使ってgulp-sassモジュールを読み込みます。 Node.jsのモジュールについてはこちらを参照

    var sass = require('gulp-sass');
    

    タスクの記述

    gulp.task(name[, deps], fn)でタスクを作ります。

    gulp.task('sass', function(){
      // stream
    });
    

    gulp.task()の関数内にSassの処理を書きます。処理はgulp.src(globs[, options])を使ってstreamをつくりpipe()でstreamから受け取ったファイルのパス名パターン(globs)を処理します。最後にgulp.dest(path[, options])で宛先(保存先)を指定します。

    gulp.task('sass', function(){
      gulp.src('./src/scss/*.scss') //タスクで処理するソースの指定
        .pipe(sass()) //処理させるモジュールを指定
        .pipe(gulp.dest('./prod/css')); //保存先を指定
    });
    

    最後にdefaultのタスクでsassが処理されるよう指定します。

    gulp.task('default', ['sass']);
    

    gulpfile.js

    すべて合わせるとこのようになります。

    var gulp = require('gulp');
    var sass = require('gulp-sass');
    
    gulp.task('sass', function(){
      gulp.src('./src/scss/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('./prod/css'));
    });
    
    gulp.task('default', ['sass']);
    

    これを保存してコンパイルを実行する準備ができました。

    SCSSをコンパイルする(gulp-sassの実行)

    最後にgulp-sassを実行しコンパイルを試します。

    $ gulp sass
    [18:55:36] Using gulpfile ~/Projects/test.io/vccw/www/wordpress/wp-content/themes/test.io/gulpfile.js
    [18:55:36] Starting 'sass'...
    [18:55:36] Finished 'sass' after 5.19 ms
    
    $ tree prod
    prod
    └── css
        └── style.css
    

    prod/cssの中にstyle.cssが保存されていれば成功です。
    これでSassのコンパイルまで行えたので今回はここまで。明日はファイルの変更を監視しタスクを実行するwatchについて紹介します。

    シリーズ

    1. これからはじめるGulp(0):アドベントカレンダースケジュール
    2. これからはじめるGulp(1):bundler, rbenv, nodebrewでGulp環境を作ってみる
    3. これからはじめるGulp(2):gulp-sassを使ってSCSSをコンパイルするタスクを作ってみる
    4. これからはじめるGulp(3):gulp.watchでファイルの変更を監視しタスクを実行する
    5. これからはじめるGulp(4):gulp-connectモジュールを使ったローカルサーバの起動
    6. これからはじめるGulp(5):gulp-connectモジュールを使ったLiveReload
    7. これからはじめるGulp(6):gulp-plumberとgulp-notifyを使ったデスクトップ通知
    8. これからはじめるGulp(7):require-dirモジュールを使ったタスク単位のファイル分割
    9. これからはじめるGulp(8):delモジュールとvinyl-pathsモジュールを使ったファイルの削除
    10. これからはじめるGulp(9):Ruby版Sassが使えるgulp-ruby-sassへの乗り換え
    11. これからはじめるGulp(10):deprecatedになっていたgulp-connectからgulp-webserverへ乗り換える
    12. これからはじめるGulp(11):ブラウザ間でスクロールやクリック操作を同期できるBrowserSync
    13. これからはじめるGulp(12):gulp-imageminプラグインを使ったJPEG,PNG,GIF,SVGの最適化
    14. これからはじめるGulp(13):gulp-changedプラグインで変更されたファイルだけを処理させる
    15. これからはじめるGulp(14):gulp-cachedプラグインで変更されたSCSSファイルだけを処理させる
    16. これからはじめるGulp(15):gulp-responsiveプラグインを使ったレスポンシブイメージ作成の自動化
    17. これからはじめるGulp(16):gulp-image-resizeプラグインを使ってサムネイルやレスポンシブイメージを作る
    18. これからはじめるGulp(17):SketchTool(Sketch 3 command line tool)を使ったアートボード・スライスの書き出しとgulp-execプラグインを使ったSketchtoolの呼び出し
    19. これからはじめるGulp(18):SketchToolで何ができるのかコマンドと主要なオプションを使ってみる
    20. これからはじめるGulp(19):gulp-sketchとgulp-execを使ったSketch 3デザインデータの画像書き出し
    21. これからはじめるGulp(20):Node.jsのChild Processモジュールを使ってgulpからjekyllのbuildコマンドを実行する
    22. これからはじめるGulp(21):gulp-awspublishプラグインを使ったAmazon S3への静的Webサイトパブリッシュ
    23. これからはじめるGulp(22):gulp-iconfontとgulp-sketchを使ったアイコンフォント作成の自動化
    24. これからはじめるGulp(23):gulp-consolidateでgulp-iconfontで作ったアイコンフォントのシンボル一覧HTMLを作る
    25. これからはじめるGulp(24):gulp.spritesmithプラグインでSpriteイメージを作る
    26. これからはじめるGulp(25):Hologramとgulp-hologramでスタイルガイドを作る
    27. これからはじめるGulp(26):Sketch3のサブディレクトリ書き出しに対応したgulp-sketchを試す

    コメント・フィードバック