WebサイトやWebアプリケーションの画面仕様やデザインの検討や確認のために、 モックhtmlを書くことが度々あった。 そのたびに、テキストエディタで、生のhtml、css、Javascriptをガシガシ書いていた。 が、ページ数が多くなるに連れて、DRYじゃないことに憤りを感じ、メンテナンスが面倒になり、 もっと効率良く、メンテナンスが楽にできないものなのか、と考えていた。
node.jsの勉強をしていて、express.jsに出会い、テンプレートエンジンJadeと メタCSS言語LESSに出会った。Railsを使った開発では、CoffeeScriptを使っていた。 そこで、これらを使って静的なページを作るとかなり効率がいいのでは?と思った。
モックをはやく作るための道具
JadeとLESS、CoffeeScriptで静的なHTMLを作れないか。
Jadeは単体で使える。
LESSも単体でコンパイルできる。
もちろんCoffeeSriptも。
で、全部Node.jsの上で動く。
全部一発でビルドできれば、そりゃあ楽ちんだわぁ。
そういえば、Grunt.jsっていうのがあったな、たしか。
Javaのapache antみたいなやつ。
ということで、使うのは、
node.jsとGrunt.jsのインストール
node.jsは予めインストールしておく必要がある。Grunt.jsは、grunt-cliというGrunt.jsのCLIパッケージをnpmでインストールする。
$ npm install -g grunt-cli
ディレクトリとファイル
おそらく、こうしなければよい、という構造はない。 とりあえず、次のようなディレクトリ階層を作成し、2つのファイル、package.jsonとGruntfile.jsを作った。
├── Gruntfile.js
├── package.json
└── src
    ├── coffee
    │   └── jade-de-mock.coffee
    ├── jade
    │   ├── includes
    │   │   └── javascripts.jade
    │   ├── index.jade
    │   └── layout.jade
    └── less
        ├── jade-de-mock.less
        └── reset.less
Grunt.jsのプラグインとタスク
jadeのコンパイルや、lessのコンパイル、coffeeのコンパイルは、Grunt.jsのプラグインを利用する。 そのため、まず、Grunt.jsが動作する環境を整備しないと。
package.jsonを書く
  {
    "name": "jade-de-mock",
    "version": "0.1.0"
  }
gruntとgruntプラグインをnpmでインストールする。
jade、less、coffeeのgruntプラグインは、grunt.jsが提供してくれている。
それと、前回のビルド結果を相違するcleanタスクも欲しいので、これもインストール。 というわけで、上記4つのgruntプラグインを、npmコマンドでインストール。$ npm install grunt --save-dev $ npm install grunt-contrib-jade grunt-contrib-less grunt-contrib-coffee grunt-contrib-clean --save-devこれを実行すると、上述のpackage.jsonにプラグインが追記され、結果、
  {
    "name": "jade-de-mock",
    "version": "0.1.0",
    "devDependencies": {
      "grunt": "~0.4.1",
      "grunt-contrib-coffee": "~0.7.0",
      "grunt-contrib-clean": "~0.5.0",
      "grunt-contrib-jade": "~0.8.0",
      "grunt-contrib-less": "~0.7.0"
    }
  }
となる。
Gruntfile.jsを書く
Gruntfile.jsは、apache-antでいうところのbuild.xmlのようなもの。gruntに実行させるタスクをJavascriptで書く(CoffeeScriptでも良い)。
module.exports = function(grunt) {
  // project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    jade: {
      compile: {
        options: {
          pretty: true
        },
        files: {
          "dst/index.html": ["src/jade/index.jade"]
        }
      }
    },
    less: {
      compile: {
        options: {
          compress: true,
          syncimport: true
        },
        files: {
          "dst/stylesheets/<%= pkg.name %>.min.css": "src/less/jade-de-mock.less"
        }
      }
    },
    coffee: {
      compile: {
        files: {
          "dst/javascripts/<%= pkg.name %>.js": "src/coffee/*.coffee"
        }
      }
    },
    clean: {
      build: ["dst"]
    }
  });
  // load npm tasks.
  grunt.loadNpmTasks('grunt-contrib-jade');
  grunt.loadNpmTasks('grunt-contrib-less');
  grunt.loadNpmTasks('grunt-contrib-coffee');
  grunt.loadNpmTasks('grunt-contrib-clean');
  // define default tasks.
  grunt.registerTask('default', ['clean', 'jade', 'less', 'coffee']);
};
これで準備完了。
モックを書く。
ひたすらモックを書く。Jadeを書く。LESSを書く。CoffeeScriptを書く。
ビルドする。
ビルドはGrundコマンドで実行。先ほどのGruntfile.jsにしたがって、タスクが実行される。
$ gruntこれで、dstディレクトリが生成され、次のようなファイルが出力される。
  dst/
  ├── index.html
  ├── javascripts
  │   └── jade-de-mock.js
  └── stylesheets
       └── jade-de-mock.min.css
モックを作るたびに使えばいい
と思ってgithubに、
を作っちゃった。 
0 件のコメント:
コメントを投稿