Top Banner
Gulpことはじめ Kyohei Morimoto
29

Gulp ことはじめ

Sep 08, 2014

Download

Technology

Kyohei Morimoto

2014年の4月か5月くらいのLTで使った資料
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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.