grunt-contrib-lessでlessファイルのコンパイルを自動化する。

ブログデザインの変更にあたって、lessファイルのコンパイルをgrunt-contrib-lessを使って自動化してみた。

デザインベースは公式のboilerplateを使わせてもらった。

フォルダ構成

boilerplateからboilerplate.lessとlessディレクトリ配下のlessファイルをコピーしてくる。

dist配下にコンパイルしたcssファイルを格納するようにした。

views配下に自分のブログのhtmlファイルをダウロードしてきて、dist配下のcssファイルを読み込むように編集する。

% tree -L 1
 .
├── Gruntfile.js
├── dist
├── less
├── node_modules
├── package.json
├── tachikoma.less
└── views

grunt-contrib-lessのインストール

gruntモジュールのインストールはいつも通り。

% npm install grunt-contrib-less --save-dev

Gruntタスクの編集

lessのoptionsで@importディレティブのディレクトリやソースファイルを指定する。

yuicompressオプションでcssmin.jsを使った圧縮を有効にできる。

% vi Gruntfile.js

module.exports = function (grunt) {
  'use strict';
  var pkg = grunt.file.readJSON('package.json');
  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),
    less: {
      development: {
        options: {
          paths: ["less"]
        },
        files: {
          "dist/tachikoma.css": "tachikoma.less"
        }
      },
      production: {
        options: {
          paths: ["less"],
          yuicompress: true
        },
        files: {
          "dist/tachikoma.min.css": "tachikoma.less"
        }
      }
    },
    connect: {
      livereload: {
        options: {
          port: 9000
        }
      }
    },
    watch: {
      html: {
        files: 'views/*.html',
        tasks: [],
        options: {
          livereload: true,
          nospawn: true
        }
      },
      less: {
        files: ['*.less', 'less/*.less'],
        tasks: ['less:development'],
        options: {
          livereload: true,
          nospawn: true
        }
      }
    }
  });
  var taskName;
  for(taskName in pkg.devDependencies) {
    if(taskName.substring(0, 6) == 'grunt-') {
      grunt.loadNpmTasks(taskName);
    }
  }
  grunt.registerTask('live', ['connect', 'watch']);
  grunt.registerTask('default', ['less:development', 'live']);
};

gruntタスクの実行

% grunt

を実行するとlessファイルがコンパイルされて、lessファイルとhtmlファイルが監視対象になったLiveReloadが有効になる。

lessファイルの編集と画面確認を繰り返してデザインを整え終えたら、

% grunt less:production

で圧縮したcssファイルがdist配下に作成される。

あとはできたmin.cssファイルをブログ管理画面で貼り付けれればアップデート完了。

Grunt便利!!