これからはじめる Gulp シリーズこれからはじめるGulp(9):Ruby版Sassが使えるgulp-ruby-sassへの乗り換え
はじめに
この記事はGulp.js(全俺) Advent Calendar 2014です。
前回のこれからはじめるGulp(8):delモジュールとvinyl-pathsモジュールを使ったファイルの削除でタスクの同期とディレクトリ・ファイルの削除について勉強しました。今回はgulp-sassからgulp-ruby-sassに乗り換えてみます。
gulp-sassとgulp-ruby-sassの違い
gulp-sassはnode-sassのwrapperでruby版のSassがなくても動作しコンパイルも早いようです。ただし、.sass
だとコンパイルに問題もあるとか。gulp-ruby-sassはRuby版のSassを使うのでコンパイルがやや遅いという点はありますが安心して利用できます。言うまでのことでもありませんがこれからはじめるGulp(1):bundler, rbenv, nodebrewでGulp環境を作ってみるで紹介した通りRuby環境とGemのインストールが必要です。
Sassプラグインの入れ替え
インストール済みのgulp-sassをアンインストールしてgulp-ruby-sassをインストールします。
gulp-sassのアンインストール
$ sudo npm uninstall gulp-sass --save-dev
Password:
unbuild gulp-sass@1.2.3
gulp-ruby-sassのインストール
$ sudo npm install gulp-ruby-sass --save-dev
gulp-ruby-sass@0.7.1 node_modules/gulp-ruby-sass
├── dargs@0.1.0
├── slash@0.1.3
├── each-async@0.1.3
├── win-spawn@2.0.0
├── chalk@0.5.1 (escape-string-regexp@1.0.2, ansi-styles@1.1.0, supports-color@0.2.0, has-ansi@0.1.0, strip-ansi@0.3.0)
├── glob@4.3.1 (inherits@2.0.1, once@1.3.1, inflight@1.0.4, minimatch@2.0.1)
└── gulp-intermediate@3.0.1 (rimraf@2.2.8, uuid@1.4.2, mkdirp@0.5.0, through2@0.5.1, gulp-util@2.2.20)
gulp-ruby-sassのオプション指定
require('gulp-sass')
をrequire('gulp-ruby-sass')
に置き換えます。gulp-ruby-sassはオブジェクトsass({})
でオプションを渡します。bundlerを使っている場合、bundleExecオプションを有効{ bundleExec: true }
にします。bundleExecを省略できるようにしている場合はbundleExecオプションは不要です。
var gulp = require('gulp');
var sass = require('gulp-ruby-sass'); //<-
var connect = require('gulp-connect');
var plumber = require('gulp-plumber');
var notify = require('gulp-notify');
var paths = {
srcDir : 'src',
prvDir : 'prv',
dstDir : 'prd'
}
gulp.task('sass:prv', function(){
var srcGlob = paths.srcDir + '/assets/_scss/*.scss';
var dstGlob = paths.prvDir + '/assets/css';
var errorMessage = "Error: <%= error.message %>";
var sassOptions = {
//bundleExec : true,
style : 'nested'
}
gulp.src( srcGlob )
.pipe(plumber({
errorHandler: notify.onError( errorMessage )
}))
.pipe(sass( sassOptions )) //<-
.pipe(gulp.dest( dstGlob ))
.pipe(connect.reload());
});
オプションの詳細はgulp-ruby-sassのAPIの項に載っています。
bourbonやneatを読み込む
bourbonやneatを読み込むにはSassオプションのrequireを使います。requireには配列で読み込むLibraryを指定します。
var gulp = require('gulp');
var sass = require('gulp-ruby-sass');
var connect = require('gulp-connect');
var plumber = require('gulp-plumber');
var notify = require('gulp-notify');
var paths = {
srcDir : 'src',
prvDir : 'prv',
dstDir : 'prd'
}
gulp.task('sass:prv', function(){
var srcGlob = paths.srcDir + '/assets/_scss/*.scss';
var dstGlob = paths.prvDir + '/assets/css';
var errorMessage = "Error: <%= error.message %>";
var sassOptions = {
style : 'nested',
require : ['bourbon', 'neat'] //<-
}
gulp.src( srcGlob )
.pipe(plumber({
errorHandler: notify.onError( errorMessage )
}))
.pipe(sass( sassOptions ))
.pipe(gulp.dest( dstGlob ))
.pipe(connect.reload());
});
これで、bourbonやneatが@import
して使えるようになります。
@import 'bourbon';
@import 'neat';
ちなみにboubonやneatをgulp-sassで使いたい場合はnode-bourbon、node-neatが使えるようです。
loadPathを指定して読み込む
bourbonプロジェクトにbittersというLibraryがあります。このLibraryはrequire
には対応していないためパスを指定してロードするか$ bitters install
で作られたファイルをインポートする方法があります。bundlerでインストールしたbittersであれば下記のようにloadPathを指定して読み込むことができます。
var sassOptions = {
style : 'nested',
require : ['bourbon', 'neat'],
loadPath : ['vendor/bundle/ruby/2.1.0/gems/bitters-0.10.1/app/assets/stylesheets']
}
SCSSにインポートするには@import 'base'
を指定します。 以上、gulp-ruby-sassの使い方でした。明日はgulp-connectからgulp-webserverへの移行を試してみたいと思います。
シリーズ
- これからはじめるGulp(0):アドベントカレンダースケジュール
- これからはじめるGulp(1):bundler, rbenv, nodebrewでGulp環境を作ってみる
- これからはじめるGulp(2):gulp-sassを使ってSCSSをコンパイルするタスクを作ってみる
- これからはじめるGulp(3):gulp.watchでファイルの変更を監視しタスクを実行する
- これからはじめるGulp(4):gulp-connectモジュールを使ったローカルサーバの起動
- これからはじめるGulp(5):gulp-connectモジュールを使ったLiveReload
- これからはじめるGulp(6):gulp-plumberとgulp-notifyを使ったデスクトップ通知
- これからはじめるGulp(7):require-dirモジュールを使ったタスク単位のファイル分割
- これからはじめるGulp(8):delモジュールとvinyl-pathsモジュールを使ったファイルの削除
- これからはじめるGulp(9):Ruby版Sassが使えるgulp-ruby-sassへの乗り換え
- これからはじめるGulp(10):deprecatedになっていたgulp-connectからgulp-webserverへ乗り換える
- これからはじめるGulp(11):ブラウザ間でスクロールやクリック操作を同期できるBrowserSync
- これからはじめるGulp(12):gulp-imageminプラグインを使ったJPEG,PNG,GIF,SVGの最適化
- これからはじめるGulp(13):gulp-changedプラグインで変更されたファイルだけを処理させる
- これからはじめるGulp(14):gulp-cachedプラグインで変更されたSCSSファイルだけを処理させる
- これからはじめるGulp(15):gulp-responsiveプラグインを使ったレスポンシブイメージ作成の自動化
- これからはじめるGulp(16):gulp-image-resizeプラグインを使ってサムネイルやレスポンシブイメージを作る
- これからはじめるGulp(17):SketchTool(Sketch 3 command line tool)を使ったアートボード・スライスの書き出しとgulp-execプラグインを使ったSketchtoolの呼び出し
- これからはじめるGulp(18):SketchToolで何ができるのかコマンドと主要なオプションを使ってみる
- これからはじめるGulp(19):gulp-sketchとgulp-execを使ったSketch 3デザインデータの画像書き出し
- これからはじめるGulp(20):Node.jsのChild Processモジュールを使ってgulpからjekyllのbuildコマンドを実行する
- これからはじめるGulp(21):gulp-awspublishプラグインを使ったAmazon S3への静的Webサイトパブリッシュ
- これからはじめるGulp(22):gulp-iconfontとgulp-sketchを使ったアイコンフォント作成の自動化
- これからはじめるGulp(23):gulp-consolidateでgulp-iconfontで作ったアイコンフォントのシンボル一覧HTMLを作る
- これからはじめるGulp(24):gulp.spritesmithプラグインでSpriteイメージを作る
- これからはじめるGulp(25):Hologramとgulp-hologramでスタイルガイドを作る
- これからはじめるGulp(26):Sketch3のサブディレクトリ書き出しに対応したgulp-sketchを試す