gulp入門 - コーディングを10倍速くする

49
1 Gulp 入門 ~コーディングを 10 倍速くする

Upload: hayashi-yuichi

Post on 24-Jan-2015

24.490 views

Category:

Technology


2 download

DESCRIPTION

2014/9/12に行われた週末ランサーズでのGulpハンズオンで使用したスライドです。

TRANSCRIPT

Page 1: Gulp入門 - コーディングを10倍速くする

1

Gulp入門 ~コーディングを10倍速くする

Page 2: Gulp入門 - コーディングを10倍速くする

2

@frontainerFront-end Engineer

2014/4 LIG入社 フロントエンドエンジニア

http://github.com/frontainer

現在はWebサイトを作ったりテンプレート作ったり いろいろと活動しています。

最近はAngularJSの勉強会に顔を出していました

林 優一

ng-mtg#6 - ディレクティブパターン

第1回AngularJS勉強会@LIG

GruntからGulpに乗り換えたタイプです

Page 3: Gulp入門 - コーディングを10倍速くする

3

今はGrunt使ってますか?

Page 4: Gulp入門 - コーディングを10倍速くする

4

今日はGulpにしましょう

Page 5: Gulp入門 - コーディングを10倍速くする

Gulpとは

使うことのメリット

Gruntとの違い

5

目次

Let”s hands on

カスタマイズ事例

01

02

03

04

05

Page 6: Gulp入門 - コーディングを10倍速くする

6

01 Gulpとは

The streaming build system

• Node.jsのStreamAPIを利用したビルドシステム

• Gruntが抱えているいくつかの問題を解決する手段として登場

• これからはこっちが主流になりそうな予感

Page 7: Gulp入門 - コーディングを10倍速くする

7

02 Gruntとの違い

プラグインの数 やや少ない 多い

Github Star 8,398 8,439

開始日 2013/6/30 2011/9/18

近い記法 Nodeっぽい JavaScriptっぽい

プラグインタイプ Nodeプラグイン Gruntプラグイン

Page 8: Gulp入門 - コーディングを10倍速くする

8

02 Gruntとの違い

SASS Auto Prefixer

CSS Min

SCSSコンパイル

CSS出力

コンパイル

CSS出力

圧縮 完成

SCSSコンパイル コンパイル 圧縮

完成Stream

Page 9: Gulp入門 - コーディングを10倍速くする

9

03 使うことのメリット

I like gulp.

• Gruntより設定ファイルが記述しやすい

• StreamAPIを利用することでGruntより高速でエコ

• Gruntと同等のプラグインがほぼ出そろってきている

Page 10: Gulp入門 - コーディングを10倍速くする

10

04 Let”s hands on!!

Gulp.jsを使ってコーディング作業を10倍速くしよう

1. Node.jsをインストール

2. Gulp.jsをインストール

3. gulpfile.jsの作成

4. SASSのコンパイル

5. ベンダープレフィックス付与

6. スタイルガイド生成

7. JSの圧縮

8. ファイルの監視と自動化

9. LiveReload環境構築

10.エラー時にwatchを止めない

Page 11: Gulp入門 - コーディングを10倍速くする

11

Node.jsをインストール

Page 12: Gulp入門 - コーディングを10倍速くする

12

http://nodejs.orgNode.js

Page 13: Gulp入門 - コーディングを10倍速くする

13

確認コマンド node -v

Page 14: Gulp入門 - コーディングを10倍速くする

14

Gulp.jsをインストール

Page 15: Gulp入門 - コーディングを10倍速くする

15

package.jsonを作成 npm init

Page 16: Gulp入門 - コーディングを10倍速くする

16

Gulpインストール npm install gulp -g

Page 17: Gulp入門 - コーディングを10倍速くする

17

ローカルGulpインストール npm install gulp --save-dev

Page 18: Gulp入門 - コーディングを10倍速くする

18

gulpfile.jsの作成

Page 19: Gulp入門 - コーディングを10倍速くする

19

gulpfile.js var gulp = require("gulp");

Page 20: Gulp入門 - コーディングを10倍速くする

20

SASSのコンパイル

Page 21: Gulp入門 - コーディングを10倍速くする

21

sass/style.scss

h1 { color: red; &:hover { color: blue; } }

Page 22: Gulp入門 - コーディングを10倍速くする

22

gulp-sass npm install gulp-sass --save-dev

Page 23: Gulp入門 - コーディングを10倍速くする

23

gulpfile.js

var gulp = require("gulp"); var sass = require("gulp-sass"); !

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

Page 24: Gulp入門 - コーディングを10倍速くする

24

var gulp = require("gulp"); var sass = require("gulp-sass"); !

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

gulp.task("タスク名",function() {});

gulp.src("パターン")

.pipe(行いたい処理);

gulp.dest("出力先")

タスクの登録

読み出したいファイルのパターンを指定

srcで取得したファイルに処理実行

出力先に処理済みのファイルを出力

Page 25: Gulp入門 - コーディングを10倍速くする

25

パターン文字列

"sass/style.scss" sass/style.scssだけヒット

!

"sass/*.scss" sassディレクトリ直下にあるscssがヒット

!

"sass/**/*.scss" sassディレクトリ以下にあるすべてのscssがヒット

!

["sass/**/*.scss","!sass/sample/**/*.scss] sass/sample以下にあるscssを除くsassディレクトリ以下のscssがヒット

※ gulp-renameを使うと出力ファイルの名前を簡単に変更することができます。

Page 26: Gulp入門 - コーディングを10倍速くする

26

ベンダープレフィックス付与

Page 27: Gulp入門 - コーディングを10倍速くする

27

gulp-autoprefixer npm install gulp-autoprefixer --save-dev

Page 28: Gulp入門 - コーディングを10倍速くする

28

sass/style.scss

h1 { color: red; transition: 200ms ease-out transform; &:hover { color: blue; transform: translate(10px,0); } }

Page 29: Gulp入門 - コーディングを10倍速くする

29

gulpfile.js

var gulp = require("gulp"); var sass = require(“gulp-sass"); var autoprefixer = require("gulp-autoprefixer"); !

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

Page 30: Gulp入門 - コーディングを10倍速くする

30

gulp-frontnote npm install gulp-frontnote --save-dev

Page 31: Gulp入門 - コーディングを10倍速くする

31

gulpfile.js

var gulp = require("gulp"); var sass = require(“gulp-sass"); var autoprefixer = require(“gulp-autoprefixer"); var frontnote = require("gulp-frontnote"); !

gulp.task("sass", function() { gulp.src("sass/**/*scss") .pipe(frontnote({ css: '../css/style.css' })) .pipe(sass()) .pipe(autoprefixer()) .pipe(gulp.dest(“./css”)); });

Page 32: Gulp入門 - コーディングを10倍速くする

32

sass/style.scss

/* #overview Gulp入門サンプル !

サンプルファイルです */ /*#styleguide サンプル見出し1 !

サンプルの見出しスタイル hoverすると青くなって10px動く ``` <h1>見出し1</h1>

``` */

Page 33: Gulp入門 - コーディングを10倍速くする

33

JSを圧縮

Page 34: Gulp入門 - コーディングを10倍速くする

34

gulp-uglify npm install gulp-uglify --save-dev

Page 35: Gulp入門 - コーディングを10倍速くする

35

gulpfile.js

var gulp = require("gulp"); //..(略 var uglify = require("gulp-uglify"); !

gulp.task("js", function() { gulp.src(["js/**/*.js","!js/min/**/*.js"]) .pipe(uglify()) .pipe(gulp.dest("./js/min")); }); !

// (略

Page 36: Gulp入門 - コーディングを10倍速くする

36

ファイルの監視

Page 37: Gulp入門 - コーディングを10倍速くする

37

gulpfile.js

var gulp = require("gulp"); //..(略 !

gulp.task("default", function() { gulp.watch([“js/**/*.js”,"!js/min/**/*.js"],["js"]); gulp.watch(“sass/**/*.scss”,["sass"]); });

Page 38: Gulp入門 - コーディングを10倍速くする

38

LiveReload

Page 39: Gulp入門 - コーディングを10倍速くする

39

gulp-browser-sync npm install browser-sync --save-dev

Page 40: Gulp入門 - コーディングを10倍速くする

40

gulpfile.js

var gulp = require("gulp"); //..(略 var browser = require("browser-sync"); !

gulp.task("server", function() { browser({ server: { baseDir: "./", directory: true } }); }); !

// (略

Page 41: Gulp入門 - コーディングを10倍速くする

41

gulpfile.js

var gulp = require("gulp"); //..(略 gulp.task("js", function() { gulp.src([“js/**/*.js”\”,”!js/min/**/*.js"]) .pipe(uglify()) .pipe(gulp.dest(“./js/min")) .pipe(browser.reload({stream:true})) }); !

gulp.task("sass", function() { gulp.src("sass/**/*scss") .pipe(frontnote()) .pipe(sass()) .pipe(autoprefixer()) .pipe(gulp.dest(“./css")) .pipe(browser.reload({stream:true})) }); // (略

Page 42: Gulp入門 - コーディングを10倍速くする

42

gulpfile.js

var gulp = require("gulp"); //..(略 gulp.task("default",['server'], function() { gulp.watch(["js/**/*.js","!js/min/**/*.js"],["js"]); gulp.watch("sass/**/*.scss",["sass"]); }); // (略

Page 43: Gulp入門 - コーディングを10倍速くする

43

エラー時にwatchを止めない

Page 44: Gulp入門 - コーディングを10倍速くする

44

gulp-plumber npm install gulp-plumber --save-dev

Page 45: Gulp入門 - コーディングを10倍速くする

45

gulpfile.js

var gulp = require("gulp"); //..(略 var plumber = require(“gulp-plumber"); !

gulp.task("js", function() { gulp.src(["js/**/*.js","!js/min/**/*.js"]) .pipe(plumber()) .pipe(uglify()) // (略 !

gulp.task("sass", function() { gulp.src("sass/**/*scss") .pipe(plumber()) .pipe(frontnote()) // (略

Page 46: Gulp入門 - コーディングを10倍速くする

HTML/JSのバリデーション(gulp-htmlhint, gulp-jshint)

スプライト画像生成(gulp-spritesmith,gulp-sprite-glue)

HTMLテンプレート(gulp-ejs,gulp-ect,gulp-jade)

46

その他の便利プラグイン

FTP/SFTPアップロード(gulp-sftp,gulp-ftp)

設定ファイル支援(gulp-load-tasks)

Page 47: Gulp入門 - コーディングを10倍速くする

47

05 カスタマイズ事例

frontplate

1. SASS 2. ベンダープレフィックス付与

3. LiveReload 4. スタイルガイド生成

5. EJS(HTMLテンプレート)

6. JSの依存関係解決 & 結合 & 圧縮(Browserify)

7. 画像の最適化

8. スプライト画像の生成

9. スプライトSCSS出力

10.CSSの最適化 & 圧縮

11.エラーの通知

12.HTML/JSのバリデーション

https://github.com/frontainer/frontplate

Page 48: Gulp入門 - コーディングを10倍速くする

いつもやる作業は自動化しよう

GulpはGruntよりも短く設定を書くことができる

オリジナルのgulpfile.jsを作り上げてさらに効率を高めよう!

48

まとめ

Page 49: Gulp入門 - コーディングを10倍速くする

49

ご清聴ありがとうございました