Upgrade to Pro — share decks privately, control downloads, hide ads and more …

フロントエンド制作向けビルド ツールGruntがバックエンド 開発でも意外と使える! @M_Ishikawa #yapcasia

M_Ishikawa
September 21, 2013

フロントエンド制作向けビルド ツールGruntがバックエンド 開発でも意外と使える! @M_Ishikawa #yapcasia

YAPC::Asia Tokyo 2013 発表資料
#yapcasia
grunt, yapc, perl, yapcasia

M_Ishikawa

September 21, 2013
Tweet

More Decks by M_Ishikawa

Other Decks in Technology

Transcript

  1. • grunt-‐‑‒contrib(公式プラグイン:25個)でどんなことができるか https://github.com/gruntjs/grunt-‐‑‒contrib • grunt-‐‑‒contrib-‐‑‒clean Clean  files  and  folders. •

    grunt-‐‑‒contrib-‐‑‒coffee Compile  CoffeeScript  files  to  JavaScript. • grunt-‐‑‒contrib-‐‑‒compass Compile  Compass  to  CSS • grunt-‐‑‒contrib-‐‑‒compress Compress  files  and  folders. • grunt-‐‑‒contrib-‐‑‒concat Concatenate  files. • grunt-‐‑‒contrib-‐‑‒connect Start  a  connect  web  server. • grunt-‐‑‒contrib-‐‑‒copy Copy  files  and  folders. • grunt-‐‑‒contrib-‐‑‒cssmin Compress  CSS  files. • grunt-‐‑‒contrib-‐‑‒csslint Lint  CSS  files. • grunt-‐‑‒contrib-‐‑‒handlebars Precompile  Handlebars  templates  to  JST  file. • grunt-‐‑‒contrib-‐‑‒htmlmin Minify  HTML • grunt-‐‑‒contrib-‐‑‒imagemin Minify  PNG  and  JPEG  images • grunt-‐‑‒contrib-‐‑‒jade Compile  Jade  files  to  HTML. • grunt-‐‑‒contrib-‐‑‒jasmine Run  jasmine  specs  headlessly  through  PhantomJS. • grunt-‐‑‒contrib-‐‑‒jshint Validate  files  with  JSHint. • grunt-‐‑‒contrib-‐‑‒jst Precompile  Underscore  templates  to  JST  file. • grunt-‐‑‒contrib-‐‑‒less Compile  LESS  files  to  CSS. • grunt-‐‑‒contrib-‐‑‒nodeunit Run  Nodeunit  unit  tests. • grunt-‐‑‒contrib-‐‑‒qunit Run  QUnit  unit  tests  in  a  headless  PhantomJS  instance. • grunt-‐‑‒contrib-‐‑‒requirejs Optimize  RequireJS  projects  using  r.js. • grunt-‐‑‒contrib-‐‑‒sass Compile  Sass  to  CSS • grunt-‐‑‒contrib-‐‑‒stylus Compile  Stylus  files  to  CSS. • grunt-‐‑‒contrib-‐‑‒uglify Minify  files  with  UglifyJS. • grunt-‐‑‒contrib-‐‑‒watch Run  predefined  tasks  whenever  watched  file  patterns  are  added,  changed  or  deleted. • grunt-‐‑‒contrib-‐‑‒yuidoc Compile  YUIDoc  Documentation. 2013/9/24 (Ր)
  2. • 開発、運⽤用において、「コードを書く以外」でやっている⼿手間ありま せんか? • コンパイル、ビルドのコマンド実⾏行行 • Sass(SCSS,less)を変換、CoffeeScriptを変換 • 本番配布⽤用に画像の圧縮、JSの難読化、CSSのミニファイ •

    規則正しく予想できるファイル名(card1.png,card2.png,...) へ直接アクセスされないように隠蔽するのにハッシュのリネーム • CDNのキャッシュをクリアするために⾛走らせているコマンド • srcにパラメータ付与、ファイル名変更更、等 • テストの実⾏行行 • Lint,  シンタックスチェック,  UNITテスト,等 • その他、無限の可能性が...!!! Gruntの使いどころ 2013/9/24 (Ր)
  3. # node͕ೖ͍ͬͯΔલఏ % npm -g install grunt-cli % mkdir ~/hoge

    % cd ~/hoge % npm install grunt --save 1.開発環境へGruntを導⼊入 npmのお作法により、プロジェクトごとにインストールする 2013/9/24 (Ր)
  4. Gruntのデモ • Catalistに載せたBootswatch(Bootstrap)で作ったサンプル試 します • 今回使⽤用するプラグイン • Gruntで構⽂文チェック • grunt-‐‑‒contrib-‐‑‒csslint

    • grunt-‐‑‒contrib-‐‑‒jshint • Gruntでミニファイ • grunt-‐‑‒contrib-‐‑‒cssmin • grunt-‐‑‒contrib-‐‑‒uglify • grunt-‐‑‒contrib-‐‑‒imagemin • GruntでPerl! • grunt-‐‑‒perllint 2013/9/24 (Ր)
  5. Gruntでミニファイ • プラグイン例例 • grunt-‐‑‒contrib-‐‑‒cssmin cssのミニファイ • grunt-‐‑‒contrib-‐‑‒uglify JSのミニファイ •

    grunt-‐‑‒contrib-‐‑‒imagemin png,jpgのミニファイ • ファイル構成例例 • htdocs/{css,js,img}/ DocmentRoot • assets/{css,js,img}/ オリジナルファイル ※開発⽤用と本番⽤用でDocumentRootまたは staticディレクトリを切切り替えるようにすると捗ります。 2013/9/24 (Ր)
  6. 開発確認⽤用 ・読みやすいJS ・読みやすいCSS デプロイ⽤用 ・難読化したJS ・圧縮化したCSS Write  Code ・CoffeeScript ・Sass(SCSS)

    ࢀরઌͱ͔%PDVNFOU3PPUΛ੾Γସ͑ /** * Grunt Sample SCSS */ $text_color: #121c00; #sample { h1 { margin: 10px; } p { color: $text_color; } } /** * Grunt Sample SCSS */ #sample h1 { margin: 10px; } #sample p { color: h1 {#121c00; } #sample h1{margin:10px}#sample p{color:#121c00} 2013/9/24 (Ր)
  7. • まずgruntプラグインを漁った • grunt-‐‑‒hash • grunt-‐‑‒md5 • grunt-‐‑‒hashmap • grunt-‐‑‒rev

    • grunt-‐‑‒rev-‐‑‒md5 • ちょっと違った • 作って公開した • そしたら… grunt-‐‑‒md5filename 開発の経緯 IUUQTHJUIVCDPNJTIJLBXBNHSVOUNEpMFOBNF 2013/9/24 (Ր)
  8. Gruntプラグインのファイル構成例例 • Gruntfile.js • package.json • README.* • LICENSE-‐‑‒* •

    tasks/ • node_̲modules/ • .git • .gitignore • .npmignore • .travis.yml • test/ • tmp/ 2013/9/24 (Ր)
  9. % npm init #package.jsonΛੜ੒ % npm publish #ެ։ʂ % npm

    info hoge #npmʹొ࿥͞ΕͨͷΛ֬ೝ ⾃自作gruntプラグインをnpmに\公開/ たったこれだけ! 2013/9/24 (Ր)