High Performance Gulp

33

Transcript of High Performance Gulp

Page 1: High Performance Gulp
Page 2: High Performance Gulp

井村 圭介KEISUKE IMURA

ファンタラクティブ株式会社 CEO / デザイナー / エンジニア

フリーランスを経てWeb制作会社を設立。CMS案件やWebサービス開発に多数関わる。Webに関することならデザイン・フロントエンド・バックエンドと幅広くこなすオールラウンダー。2015年はDjangoを使った自社サービスを開発中。

Page 3: High Performance Gulp

デザイン、フロントエンド、WordPressを中心としたCMS構築などWeb制作全般を行なっています。2週間に1度、ファンタラクティブ・オープンミーティングを開催中。

https://funteractive.co.jp/

Page 4: High Performance Gulp

株式会社LiB チーフデザイナー

WordBench東京モデレータ

書籍の執筆、登壇などもしています

Page 5: High Performance Gulp

極度にフロントエンドに偏った内容です。

過度な期待はしないでください。

WARNING!!

Page 6: High Performance Gulp

入力 処理 出力

gulpの基本

Page 7: High Performance Gulp

入力

gulp.src .pipe gulp.dest

処理

プラグインNode.js パッケージオリジナルタスク

出力

gulpの基本

Page 8: High Performance Gulp

gulpfile.jsの例

//  モジュールの読み込み  

var  gulp  =  require('gulp');  var  csso  =  require('gulp-­‐csso');  

//  $  gulp  cssminコマンドで実行するタスクの登録  

gulp.task('cssmin',  function()  {  

   gulp.src('app.css')  //  入力ファイル  

       .pipe(csso())  //  処理をpipeで記述  

       .pipe(gulp.dest('app.min.css'));  //  出力ファイル  

});

Page 9: High Performance Gulp

gulp-load-pluginsが便利

//  モジュールの読み込み  

var  gulp                        =  require('gulp');  var  gulpLoadPlugins  =  require('gulp-­‐load-­‐plugins')({          pattern:  ['gulp-­‐*',  'gulp.*']      });  

//  $  gulp  cssminコマンドで実行するタスクの登録  

gulp.task('cssmin',  function()  {  

   gulp.src('app.css')  //  入力ファイル  

       .pipe(gulpLoadPlugins.csso())  //  処理をpipeで記述  

       .pipe(gulp.dest('app.min.css'));  //  出力ファイル  

});

Page 10: High Performance Gulp

入力 処理 出力

色々な処理をgulpを通して実行

Page 11: High Performance Gulp

• 実行手順の自動化

• 実行手順の一元化 / 単純化

gulpを通して実行するメリット

Page 12: High Performance Gulp

やりたいことがたくさん!

Page 13: High Performance Gulp

HTMLをパーツ化して読み込みたい

SCSS使いたい

脱compass

foundation大好き!

Bowerでライブラリ管理したい(若干滅びそうな雰囲気あるけど)

かっこ良くて見やすいスタイルガイド作りたい

レスポンシブ実機で確認しながら進めたい

JSモジュール化したい

スプライト画像の生成やサイズ縮小は勝手にやって欲しい

WordPressテーマにも使いたい

Page 14: High Performance Gulp

foundation-start-kit

https://github.com/funteractive/foundation-start-kit

できました!

Page 15: High Performance Gulp

require

npm installbower install

@include

gulp-jade browserify gulp.spritesmith

BrowserSync

jade scss app.js

bower_components

└─ foundation

node_modules

sprite/*.png

触るファイル

出力されるファイル

html style.css styleguide build.js sprite.png

gulp-ruby-sass gulp-kss

Page 16: High Performance Gulp

• BowerでFoundation 5をインストール

• KSSでスタイルガイド作成

• BrowserifyでJSを結合

gulpで楽にしているポイント

Page 17: High Performance Gulp

Foundationの設定ファイルをコピー

bower_components

└─ foundation

└─ scss

├─ foundation.scss

└─ foundation

└─ _settings.scss

shared

└─ scss

└─ core

├─ _foundation.scss

└─ __settings.scss

コピーBowerでインストール

コピー

Page 18: High Performance Gulp

Foundationの設定ファイルをコピー

//  Foundationのファイルをコピーgulp.task('copy:foundation',  function()  {    return  gulp.src([        foundationScssPath  +  'foundation.scss',        foundationScssPath  +  'foundation/_settings.scss'    ])        .pipe(gulpLoadPlugins.rename({            prefix:  '_'        }))        .pipe(gulp.dest(scssPath  +  'core/'));});  

Page 19: High Performance Gulp

他のファイルはbower_componentsから直接読み込む

gulp.task('sass', function() { return gulpLoadPlugins.rubySass(scssPath, { loadPath: [bowerPath + 'foundation/scss'], style: 'nested', bundleExec: false, require: 'sass-globbing', sourcemap: false }) .pipe(gulp.dest(cssPath)); });

Page 20: High Performance Gulp

gulp-kssでスタイルガイドをコマンド一発で作成

styleguide

├─ styleguide.md

├─ template

├─ public

├─ index.html

├─ section-1.html

└─ section-2.html

shared

└─ scss

└─ module

├─ _hoge.scss

└─ _fuga.scss

生成

生成

$ gulp styleguide

Page 21: High Performance Gulp
Page 22: High Performance Gulp

minimal-kss-node-template

https://github.com/funteractive/minimal-kss-node-template

シンプルなkss-nodeテンプレート配布してます。

Page 23: High Performance Gulp

css(scss)のコメントとしてスタイルガイドを記述

// Button

//

// Your standard button suitable for clicking.

//

// Markup: <a href="#" class="button {$modifiers}">CLICK</a>

//

// :hover - Highlights when hovering.

// .shiny - Do not press this big, shiny, red button.

//

// Style guide 1

.button {

...

}

.button.shiny {

...

}

Page 24: High Performance Gulp

//  KSSでスタイルガイドを生成するタスクgulp.task('styleguide',  function()  {    //  CSSをスタイルガイド内にコピー    gulp.src(cssPath  +  'style.css')        .pipe(gulp.dest(styleGuidePath));    //  スタイルガイドを生成    gulp.src([scssPath  +  '*.scss',  scssPath  +  '**/*.scss'])        .pipe(gulpLoadPlugins.kss({            overview:  styleGuidePath  +  'styleguide.md',            templateDirectory:  styleGuidePath  +  'template/'        }))        .pipe(gulp.dest(styleGuidePath));});

gulp-kssでスタイルガイドをコマンド一発で作成

Page 25: High Performance Gulp

BrowserifyでJSを結合

Bower でインストール

npmでインストール

オリジナルで制作

bower_components

└─ packages...

node_modules

└─ packages...

shared

└─ js

├─ package.js

├─ app.js

└─ build.js 生成

require

Page 26: High Performance Gulp

var  browserify      =  require('browserify');  var  buffer              =  require('vinyl-­‐buffer');var  source              =  require('vinyl-­‐source-­‐stream');  

gulp.task('js',  function()  {    browserify(jsPath  +  'src/app.js')        .bundle()        .pipe(source('build.js'))        .pipe(buffer())        .pipe(gulpLoadPlugins.uglify())        .pipe(gulp.dest(jsPath));});

BrowserifyでJSを結合

Page 27: High Performance Gulp

var jQuery = require('jquery'); (function($) { $(document).ready(function() { $('#hello').text('hello'); }); })(jQuery);

app.jsの例

Page 28: High Performance Gulp

Jasmine & Karmaでテスト回したい

やりたいけどやれてないこと

Page 29: High Performance Gulp

gulpfileにタスクを追加するときの思考

1. 目的に合ったgulpプラグインがあるか探す

2. 目的に合ったnpmパッケージがあるか探す

3. 何もなければ自分で書く

Page 30: High Performance Gulp

gulp単体で価値はない

Page 31: High Performance Gulp

gulpfileは何をどの順番で動かすかの

仕様書みたいなもの

Page 32: High Performance Gulp

やりたいこと全部書こう!

Page 33: High Performance Gulp

Let’s try writing your own gulpfile.js!!