SlideShare a Scribd company logo
早く家へ帰るための

Grunt入門

[+gulp紹介]
前川 昌幸
早く家へ帰るための
Grunt入門
[+gulp紹介]
The JavaScript Task Runner
Why use a task runner?
In one word: automation. The less work you have to do when
performing repetitive tasks like minification, compilation, unit
testing, linting, etc, the easier your job becomes. After you've
configured it, a task runner can do most of that mundane work
for you—and your team—with basically zero effort.
Why use a task runner?
一言で自動化。ミニファイ・コンパイル・ユニットテ
スト・文法チェックなどの細々とした作業を簡単に。
設定をしてしまえばタスクランナーが反復作業を基本
労力ゼロにできる。
今日の内容
•

Getting started

•

CSS Preprocessors/CSS Postprocessors

•

JavaScript Concat,Linting,Minify

•

Image Optimization

•

First Step
早く家へ帰るための
Grunt入門
[+gulp紹介]
Getting started
Node.js環境
http://nodejs.org/
早く家へ帰るための
Grunt入門
[+gulp紹介]
Node環境を用意していない人は
まずカレントバージョンを
Windowsの場合は
環境変数でパスを通しておいてください
https://www.npmjs.org/
早く家へ帰るための
Grunt入門
[+gulp紹介]
Getting started
grunt-cliの導入
ターミナル/コマンドプロンプト
(sudo) npm install -g grunt-cli
grunt-cli
Gruntのコマンドラインインターフェース。
Grunt自体は各プロジェクトごとにインストール。
Getting started
プロジェクトの作成
プロジェクトの作成
CLIでディレクトリに
Getting started
ディレクトリ構成の決定(とりあえず)
※あくまで一例
さあGrunt!
の前に…
npm init
プロジェクトの諸情報を記録する
package.jsonを生成
ここにnpmパッケージ群を記録
共有ができるようになる
さあGrunt!
npm install grunt --save-dev
ほぼ必須
npm install grunt-contrib-connect
grunt-contrib-watch grunt-contrib-concat
--save-dev
•

grunt-contrib-connect:簡易サーバー機能

•

grunt-contrib-watch:ファイル更新の監視

•

grunt-contrib-concat:ファイルの結合
Getting started
Gruntfile.jsの作成
基本はココ…
http://gruntjs.com/getting-started#the-gruntfile
module.exports = function(grunt) {
// package.jsonの読み込み
grunt.initConfig({
pkg: grunt.file.readJSON('package.json')
});
!

// Grunt Plaginsの読み込み
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
};
CSS Preprocessors

CSS Postprocessors
環境は構築している前提で
Compass
grunt-contrib-compass
CSSO:CSSの最適化
grunt-csso

CSScomb:CSSプロパティの整列
grunt-csscomb
メディアクエリの整理
grunt-combine-media-queries

プリフィクスの整理
grunt-autoprefixer
タスクの登録
コンパイルものの基本形
csso: { // タスク名
default: { // ターゲット名
src: “asset/css/style.css", // 入力ファイル
dest: "asset/css/style.css" // 出力ファイル
}
}
オプションのあるもの

autoprefixer:{
options: {
browsers: ['last 2 version', 'ie 8', 'ie 9']
},
default: {
src: "asset/css/style.css",
dest: "asset/css/style.css"
}
}
compass: { //切り分ける場合ターゲット名をつける
dist: { // 製品用
options: {
sassDir: "source/sass",
cssDir: "asset/css",
environment: "production"
}
},
dev: { // 開発用
options: {
sassDir: "source/sass",
cssDir: "asset/css"
}
}
}
Compassはconfig.rbを
利用することも可能
(sourcemap使いたい時とか)
実行タスクを登録
// 開発用
grunt.registerTask('default', ['compass:dev']);
!

// 製品用
grunt.registerTask('dist', [‘compass:dist',
'autoprefixer','cmq','csscomb','csso']);
Postprocessorを
製品版だけにするかはお好みで
あと、CSSをそれなりに書けるあなたは…
grunt-contrib-csslint
JavaScript
Concat,Linting,Minify
JSHint:構文チェック
grunt-contrib-jshint
jshint: {
options: { // チェックオプションファイル
jshintrc: 'source/javascript/.jshintrc'
},
src: { // チェック対象ファイル
src: ['source/javascript/*.js']
}
}
{
// "use strict" を強制

"strict" : true,
"indent" : 2,

// インデントの深さ

"maxlen" : 0,

// 一行の最大長
// 宣言したきり使っていない変数を検出

"unused" : true,

!
// グローバル変数へのアクセスの管理
// グローバル変数へのアクセスを禁止

"undef" : true,

// ブラウザ用のやつは許可

"browser" : true,
"dojo" :

true,

// dojo tool kit用のやつは許可

"devel" : true,

//

consoleやalertを許可

"debug"
: true, // debugger を許可
"jquery" : true,
"globals": {
"_": false,
"Backbone": false
},

!
// Relaxing Options - 危険性を認識した上で設定すること
"eqnull" : true,
"expr" : true
}

// == null を許可

// x || (x = 1); とかができるようにする
使いどころ
製品用には使うとして
開発用に入れるとチェックが入りすぎる
要所でgrunt jshint
でのチェックを利用
ライブラリなどは?

私はチェック対象に入れない
別ディレクトリを作成してそこに格納
UglifyJS:ミニファイ
grunt-contrib-uglify
その前に結合
concat: {
default: {
src: [
“source/jslib/jquery-1.11.0.min.js",
“source/jslib/jquery.heightLine.js",
"source/javascript/*.js"],
dest: "asset/js/sitescript.js"
}
}
そしてミニファイ
(実は結合もできる)
uglify: {
default: {
src: [
“source/jslib/jquery-1.11.0.min.js",
“source/jslib/jquery.heightLine.js",
"source/javascript/*.js"],
dest: "asset/js/sitescript.js"
}
}
ライセンスどうしてますか?
私は最後に結合してます
concat: {
(略)
license: {
src: [
“source/license/license.js",
"asset/js/sitescript.js"],
dest: "asset/js/sitescript.js"
}
}
Image Optimization
とりあえず印の…
grunt-contrib-imagemin
あまり圧縮効率が良くないという評判
UNIX系OS(Mac含む)なら
grunt-imageもいいかも
imagemin: {
dynamic: {
files: [{
expand: true,
cwd : "source/img/",
src: "**/*.{png,jpg,gif}",
dest: "asset/img/"
}]
}
}
First Step
ここまでは準備!これから本番!
簡易サーバー
grunt-contrib-connect
connect: {
uses_defaults: {}
}

http://0.0.0.0:8000
更新ファイルの監視
grunt-contrib-watch
watch: {
options: {
livereload: true
},
compassdev: {
files: 'source/**/*.scss',
tasks: ['compass:dev']
},
jsdev: {
files: 'source/**/*.js',
tasks: ['concat:jsdefault']
},
(以下略
defaultに登録
grunt.registerTask(
‘default',['connect','watch']);
アナタはただゴリゴリコードを書くだけ!
さて…
早く家へ帰るための
Grunt入門
[+gulp紹介]
いろいろとありますが
何はともあれ設定ファイルの記述が違う
JSON

JavaScript

宣言型

手続き型
今回のサンプルは
https://github.com/maepon/wdnr-sem-sample
ありがとうございました
@maepon

More Related Content

早く家へ帰るための
Grunt入門
[+gulp紹介]