gulp ことはじめ

29
Gulpことはじめ Kyohei Morimoto

Upload: kyohei-morimoto

Post on 08-Sep-2014

267 views

Category:

Technology


1 download

DESCRIPTION

2014年の4月か5月くらいのLTで使った資料

TRANSCRIPT

Page 1: Gulp ことはじめ

Gulpことはじめ

Kyohei Morimoto

Page 2: Gulp ことはじめ

Gruntの複雑化

• Gruntは色々できそう!

• みんなでプラグインをいっぱい作った!

• おれのかんがえるさいきょうgruntfileが乱立

• gruntfileの複雑化

– 管理できない、読めない

– 動作が重くなる

• Gulpの誕生

Page 3: Gulp ことはじめ

“Speed. Efficiency. Simplicity.”

Page 4: Gulp ことはじめ

Gulpの始め方

sudo npm install -g npm

sudo npm install -g gulp

npm init

npmのアップデート

gulpのインストール

package.jsonの作成(もちろん手動でもOK)

Page 5: Gulp ことはじめ

Gulpの始め方

sudo npm install [email protected] --save-dev

x.x.xのところは、インストールしたCLIのバージョンに合わせる

Page 6: Gulp ことはじめ

gulpfile.jsを書く(タスクを書く)

• 基本的な流れはgruntと一緒

1. 読み込むプラグインを最初に記述

2. 行いたい処理を書く(sassのコンパイルとか)

3. 作ったものを実行する

Page 7: Gulp ことはじめ

gulpfile.jsを書く(タスクを書く)

• 基本的な流れはgruntと一緒

1. 読み込むプラグインを最初に記述

2. 行いたい処理を書く(sassのコンパイルとか)

3. 作ったものを実行する

Page 8: Gulp ことはじめ

処理の書き方

stream形式で書く

Page 9: Gulp ことはじめ

!?

Page 10: Gulp ことはじめ

streamについて

• gulp開発者達による解説書があります

• 詳しくは、substack's stream handbook

Page 11: Gulp ことはじめ

streamについて

• gulp.src() //操作するファイルを指定する

• .pipe(プラグイン名) //行いたい処理を書く

• .pipe(gulp.dest()); //出力したいファイルをしているする

Page 12: Gulp ことはじめ

sassのコンパイル

var gulp = require('gulp');var sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('htdocs/sass/*.scss') .pipe(sass()) .pipe(gulp.dest('./htdocs/css'));});

gulp.task('default', ['sass']);

Page 13: Gulp ことはじめ

sassのコンパイル

var gulp = require('gulp');var sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('htdocs/sass/*.scss') .pipe(sass()) .pipe(gulp.dest('./htdocs/css'));});

gulp.task('default', ['sass']);

Page 14: Gulp ことはじめ

sassのコンパイル

var gulp = require('gulp');var sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('htdocs/sass/*.scss') .pipe(sass()) .pipe(gulp.dest('./htdocs/css'));});

gulp.task('default', ['sass']);

Page 15: Gulp ことはじめ

sassのコンパイル

var gulp = require('gulp');var sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('htdocs/sass/*.scss') .pipe(sass()) .pipe(gulp.dest('./htdocs/css'));});

gulp.task('default', ['sass']);

Page 16: Gulp ことはじめ

sassのコンパイル

var gulp = require('gulp');var sass = require('gulp-sass');

gulp.task('sass', function () { gulp.src('htdocs/sass/*.scss') .pipe(sass()) .pipe(gulp.dest('./htdocs/css'));});

gulp.task('default', ['sass']);

Page 17: Gulp ことはじめ

VS

Page 18: Gulp ことはじめ

プラグイン数

2,828

669

Page 19: Gulp ことはじめ

プラグイン数

• この2カ月でGulpのプラグイン数は倍になっている

• 大抵フロントエンドでやりたいことは、全然できるから大きな無い

Page 20: Gulp ことはじめ

実行処理

• gulpは早いらしい!だが、体感ではそれほど分からなかった!

“By harnessing the power of node's streams you get fast builds that don't write intermediary files to disk. - gulpjs.com”

• GruntもV0.5で早くなるっぽいhttps://github.com/gruntjs/grunt-docs/blob/master/Roadmap.md

Page 21: Gulp ことはじめ

設定ファイルの複雑さ

• CSS– オートプレフィックス

– ファイルの結合

– 圧縮

• 画像

– 圧縮

• ファイルの監視

Page 22: Gulp ことはじめ

Gruntの場合

Page 23: Gulp ことはじめ

module.exports = function(grunt) { grunt.initConfig({ paths: { css: 'htdocs/css/', cssdist: 'htdocs/dist/css/', img: 'htdocs/img/', imgdist: 'htdocs/dist/img/' }, autoprefixer: { options: { browsers: ['last 2 version'] }, files: { expand: true, flatten: true, src: '<%= paths.css %>*.css', dest: '<%= paths.cssdist %>pre/' } }, cssmin: { compress: { files: { '<%= paths.cssdist %>style.min.css': ['<%= paths.cssdist %>pre/*.css'] } } }, imagemin: { dynamic: { files: [{ expand: true, cwd: '<%= paths.img %>', src: '**/*.{jpg,gif}', dest: '<%= paths.imgdist %>' }] } }, pngmin: { compile: { options: { ext: '.png' }, files: [{ expand: true, cwd: '<%= paths.img %>', src: '**/*.png', dest: '<%= paths.imgdist %>' }] } }, watch: { css:{ files: ['<%= paths.css %>*.css'], tasks: ['autoprefixer', 'cssmin'] }, img:{ files: ['<%= paths.img %>**/*.{png,jpg,gif}'], tasks: ['imagemin', 'pngmin'] } } }); grunt.loadNpmTasks('grunt-autoprefixer'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-imagemin'); grunt.loadNpmTasks('grunt-pngmin'); grunt.registerTask('default', ['autoprefixer', 'cssmin', 'imagemin', 'pngmin']);};

Page 24: Gulp ことはじめ

module.exports = function(grunt) { grunt.initConfig({ paths: { css: 'htdocs/css/', cssdist: 'htdocs/dist/css/', img: 'htdocs/img/', imgdist: 'htdocs/dist/img/' }, autoprefixer: { options: { browsers: ['last 2 version'] }, files: { expand: true, flatten: true, src: '<%= paths.css %>*.css', dest: '<%= paths.cssdist %>pre/' } }, cssmin: { compress: { files: { '<%= paths.cssdist %>style.min.css': ['<%= paths.cssdist %>pre/*.css'] } } }, imagemin: { dynamic: { files: [{ expand: true, cwd: '<%= paths.img %>', src: '**/*.{jpg,gif}', dest: '<%= paths.imgdist %>' }] } }, pngmin: { compile: { options: { ext: '.png' }, files: [{ expand: true, cwd: '<%= paths.img %>', src: '**/*.png', dest: '<%= paths.imgdist %>' }] } }, watch: { css:{ files: ['<%= paths.css %>*.css'], tasks: ['autoprefixer', 'cssmin'] }, img:{ files: ['<%= paths.img %>**/*.{png,jpg,gif}'], tasks: ['imagemin', 'pngmin'] } } }); grunt.loadNpmTasks('grunt-autoprefixer'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-imagemin'); grunt.loadNpmTasks('grunt-pngmin'); grunt.registerTask('default', ['autoprefixer', 'cssmin', 'imagemin', 'pngmin']);};

67行

Page 25: Gulp ことはじめ

Gulpの場合

Page 26: Gulp ことはじめ

var gulp = require('gulp');var concat = require('gulp-concat');var prefixer = require('gulp-autoprefixer');var minify = require('gulp-minify-css');var imagemin = require('gulp-imagemin');var plumber = require('gulp-plumber');

gulp.task('css', function () { gulp.src('htdocs/css/**/*.css') .pipe(plumber()) .pipe(prefixer('last 2 version')) .pipe(concat('style.min.css')) .pipe(minify()) .pipe(gulp.dest('htdocs/dist/css'));});

gulp.task('img', function () { gulp.src('htdocs/img/**/*') .pipe(plumber()) .pipe(imagemin()) .pipe(gulp.dest('htdocs/dist/img'));});

gulp.task('watch', function () { gulp.watch('htdocs/css/**/*', ['css']); gulp.watch('htdocs/img/**/*', ['img']);});

gulp.task('default', ['css', 'img']);

Page 27: Gulp ことはじめ

module.exports = function(grunt) { grunt.initConfig({ paths: { css: 'htdocs/css/', cssdist: 'htdocs/dist/css/', img: 'htdocs/img/', imgdist: 'htdocs/dist/img/' }, autoprefixer: { options: { browsers: ['last 2 version'] }, files: { expand: true, flatten: true, src: '<%= paths.css %>*.css', dest: '<%= paths.cssdist %>pre/' } }, cssmin: { compress: { files: { '<%= paths.cssdist %>style.min.css': ['<%= paths.cssdist %>pre/*.css'] } } }, imagemin: { dynamic: { files: [{ expand: true, cwd: '<%= paths.img %>', src: '**/*.{jpg,gif}', dest: '<%= paths.imgdist %>' }] } }, pngmin: { compile: { options: { ext: '.png' }, files: [{ expand: true, cwd: '<%= paths.img %>', src: '**/*.png', dest: '<%= paths.imgdist %>' }] } }, watch: { css:{ files: ['<%= paths.css %>*.css'], tasks: ['autoprefixer', 'cssmin'] }, img:{ files: ['<%= paths.img %>**/*.{png,jpg,gif}'], tasks: ['imagemin', 'pngmin'] } } }); grunt.loadNpmTasks('grunt-autoprefixer'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-imagemin'); grunt.loadNpmTasks('grunt-pngmin'); grunt.registerTask('default', ['autoprefixer', 'cssmin', 'imagemin', 'pngmin']);};

29行

Page 28: Gulp ことはじめ

結局どうなのよ

• 思っていたよりずっと使いやすい

• 処理が圧倒的に見やすい

• チームメンバーによっては導入してみても良いかも

• ビルドツールはあくまで手段なので、目的に合わせて選択をする

Page 29: Gulp ことはじめ

Thank you for your listening.