GruntとBowerを使ってWeb開発用のテンプレートを作成する
GruntとBowerがおもしろそうだったので試してみました。
はじめに
GruntはSassやCoffeeScriptのコンパイルやテスト実行などのタスクを自動化してくれるツール、BowerはCSS/JavaScriptのパッケージ管理ツールという感じ。Bowerは指定したバージョンのパッケージのダウンロードまではやってくれるけれど、GitHubのリポジトリ毎ダウンロードされるものもあるようで、必要なファイルの抽出とかまではやってくれない。そこで、GruntのタスクでBowerの実行からファイルの抽出までを自動化してみる。
インストール
GruntはNode.js上で動作するので、最初にnvmを使ってNode.jsをインストールする
nvmのインストール
GitHubのリポジトリをクローンして、zshenvに設定を追記する。
% git clone git://github.com/creationix/nvm.git ~/.nvm % vi ~/.zshenv [[ -s $HOME/.nvm/nvm.sh ]] && source $HOME/.nvm/nvm.sh % nvm -v
Node.jsのインストール
nvmを使ってNode.jsをインストールする。最新の安定版を利用した。
% nvm install v0.10.13 % nvm alias default v0.10.13 % node -v v0.10.13
grunt-cliをインストールする
node.jsのパッケージ管理ツールnpmを使ってBowerをインストールする。-gオプション付きだとグローバルでインストールされる。テンプレートごとに管理したいモジュールはオプションなしでローカルにインストールする。
% npm install -g grunt-cli
Bowerのインストール
同じくnpmを使ってBowerをインストールする。
% npm install -g bower
Gruntモジュールのインストール
npm initコマンドを実行すると、package.jsonが作成される。このファイルにインストールするGruntモジュールを記載する。npm innstallコマンドの実行でGruntモジュールがnode_modulesディレクトリ配下にインストールされる。package.jsonを直接編集しなくても、npm install grunt --save-devのようにすると、インストールと同時にpackage.jsonへの追加もしてくれる。
% npm init
いろいろ聞かれるので入力する
% vi package.json
{
"name": "web_template",
"version": "0.0.0",
"description": "",
"main": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yukihir0",
"license": "MIT",
"devDependencies": {
"grunt": "~0.4.1",
"grunt-bower-task": "~0.2.3",
}
}
% npm install
Bowerでパッケージのダウンロード
bower initコマンドを実行すると、bower.jsonファイルが作成される。Gruntと同じ要領で、bower install bootstrap --save-devのようにすると、ダウンロードと同時にbower.jsonへの追加もしてくれる。パッケージはbower_componentsディレクトリにダウンロードされる。
% bower init
いろいろ聞かれるので入力する
% bower install bootstrap --save-dev
% bower install backbone --save-dev
% bower install underscore --save-dev
% bower install jquery --save-dev
% vi bower.json
{
"name": "web_template",
"version": "0.0.0",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"devDependencies": {
"bootstrap": "~3.0.0-rc1",
"backbone": "~1.0.0",
"underscore": "~1.5.1",
"jquery": "~2.0.3"
}
}
Gruntタスクの設定
GruntのタスクはGruntfile.jsに記載する。libディレクトリ配下にファイルをコピーするようにしてみた。コピーするファイルはbower.jsonに記載を追加する。記載が終わったら、gruntコマンドでタスクが実行できる。
% vi Gruntfile.js module.exports = function (grunt) { 'use strict'; grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), bower: { install: { options: { targetDir: './lib', layout: 'byType', install: true, verbose: false, cleanTargetDir: true, cleanBowerDir: false } } }, }); grunt.loadNpmTasks('grunt-bower-task'); grunt.registerTask('default', ['bower:install']); }; % vi bower.json { "name": "web_box", "version": "0.0.0", "ignore": [ "**/.*", "node_modules", "bower_components", "test", "tests" ], "devDependencies": { "bootstrap": "~3.0.0-rc1", "backbone": "~1.0.0", "underscore": "~1.5.1", "jquery": "~2.0.3" }, "exportsOverride": { "bootstrap": { "js": "dist/js/bootstrap.min.js", "css": "dist/css/bootstrap.min.css" }, "backbone": { "js": "backbone-min.js" }, "underscore": { "js": "underscore-min.js" }, "jquery": { "js": "jquery.min.js" } } } % grunt
初期状態から実行する
ここまでで作成したpackage.json、bower.json、Gruntfile.jsをリポジトリに格納しておけば、npm installとgruntコマンドの実行で指定したバージョンの必要なパッケージがしかるべきディレクトリにダウンロードされる。すばらしい!!
% npm install % grunt
まとめ
GruntとBowerを使って、CSS/JavaScriptパッケージのダウンロードと抽出を自動化してみた。こんな感じで必要なパッケージを追加してけば、自分用のWeb開発テンプレートが作成できる。Gruntモジュールにはテスト実行やWebサーバLiveReloadをしてくれるものもあるみたいなので試してみたい。