SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
1
フロント開発をがんば
るためにGulpとGrunt
に入門してみた
Shou Takenaka
Nov 24, 2015
2
Table of Contents
Gulpとは
Gulpの基本
Gruntとの比較
まとめ
3
GulpとはNode.jsで動くビルドツール(The streaming build
system)
4
ビルドツールシステムをリリースするのに必要なタスク(コンパイ
ル、リンク、静的解析、テスト、デプロイ、etc...)の
実行をアシストしてくれるツール
GNU Make、Ant、Gradle、MSBuild、Rake、Grunt、
Gulp、etc...
5
タスク定義と実行タスクはgulpfile.jsに定義
JavaScriptで書く
gulpコマンドでタスク実行
6
タスク定義と実行gulpfile.js
var gulp = require("gulp");
gulp.task("hello", function() {
console.log("Hello Gulp !!");
});
gulp.task("default", ["hello"]);
実行すると
$ gulp
Hello Gulp !!
7
Gulp API (1)
gulp.task(name, deps, fn): タスク定義
name: タスク名
deps: 依存タスク
fn: タスクの処理内容
8
少し本格的なタスクvar gulp = require("gulp");
var uglify = require("gulp-uglify");
gulp.task("default", function() {
gulp.src("foo.js")
.pipe(uglify())
.pipe(gulp.dest("dest"));
});
9
pipe?
どこかで見たことある
| シェルのこれ
gulp.src() | uglify() | gulp.dest()
のようなイメージ
10
Gulpの動作イメージ
11
Gulpの動作イメージプラグインをpipeでチェイン
pipeで徐々に加工していって目的の出力を得る
UNIX的な考え方で処理を書ける
Node.js のStream API
12
Gulp API (2)
gulp.src(globs): 入力ファイルを取得
globs: 入力ファイルのパターン(src/**/*.jsみたいに
書ける)
13
Gulp API (3)
gulp.dest(path): ファイルへ書き込み
path: 出力先ディレクトリ
14
変更監視ファイルの変更監視もできる
特定のパターンにマッチするファイルが変更されたら
特定のタスクを実行
コールバック関数を実行
15
変更監視gulp.watch("src/**/*.js", ["build"]);
gulp.watch("src/**/*.js", function(event) {
console.log("File " + event.path + " was changed.");
});
16
Gulp API (4)
gulp.watch(glob, tasks), gulp.watch(glob, fn): 変更監視
glob: 監視対象のファイルのパターン
tasks: 変更時に実行したいタスクリスト
fn: 変更時に実行したいコールバック関数
17
基本的には以上4つのGulp API+プラグインでタスクを作っていく
Webアプリの開発に必要になりそうなものは大抵プラ
グインがある
→ 作る前に探す
18
Gruntとの比較同じくNode.jsで動くビルドツールGrunt と比較してみ
る
19
基本的な書き方Gruntfile.js
module.exports = function(grunt) {
grunt.registerTask("hello", "description", function() {
grunt.log.writeln("Hello Grunt !!");
});
grunt.registerTask("default", ["hello"]);
};
20
ちょっと複雑な例module.exports = function(grunt) {
grunt.loadNpmTasks("grunt-contrib-uglify");
grunt.initConfig({
uglify: {
target1: {
src: "foo.js",
dest: "foo.min.js"
}
}
});
grunt.registerTask("default", ["uglify"]);
};
21
Gruntの動作イメージ
22
Gruntの動作イメージプラグインで入力ファイルを処理して、結果をファイ
ルに出力
処理結果をテンポラリファイルに出力し、後続タスク
でそれを読み込んで別の処理... を繰り返して、最終目
的の出力を得る
プラグインの動作は設定で調整
23
GulpとGruntの比較コードベースのGulp、設定ベースのGrunt
Gulpはプラグインを組み合わせて「どうやって目的
の出力を得るか」をコードで記述
Gruntはプラグインに対して「何から何を出力する
か」を設定ベースで記述
24
GulpとGruntの比較プラグインの粒度が違う
Gulpのプラグインは単機能
Gulp plugin guideline says "plugin should only do
one thing".
プラグインを組み合わせてタスクを作る
Gruntはプラグイン=タスク
25
GulpとGruntの比較Gruntは遅いらしいけど本当?
Gruntでプラグインをつないで処理する場合、プラ
グイン毎にディスクI/Oが発生
Gulpはインメモリで処理できるのでその分早い
ただ、トータルでどっちが早いかは状況(使ってる
プラグインなど)による
Grunt next version (0.5) では、Gulpと同じようにディ
スクI/Oなしでタスクの入出力をつなげるようにな
る
26
GulpとGruntの比較先発のGruntの方がユーザーベースが大きい?
Gulp: 1,595,761 DL in last month
Grunt: 1,495,772 DL in last month
27
結局どっちを使う?
できることはどっちも変わらない
一般論でどっちがいい、とは言い難い
コードベースと設定ベース、どっちがプロジェクト
に適しているかという話
28
我々はどっちを使う?
コードベースで手続きが書いてある方が、どういう順
番で何をやっているのかわかりやすい
単機能の処理をパイプでつないでいくという思想がし
っくりくる
必要そうなプラグインは一通り揃ってる
↓
ということでGulp使います

Contenu connexe

Tendances

Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
Taku Unno
 

Tendances (20)

Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
 
Gulp ことはじめ
Gulp ことはじめGulp ことはじめ
Gulp ことはじめ
 
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Chef
ChefChef
Chef
 
Quartzでcronを範囲検索したい
Quartzでcronを範囲検索したいQuartzでcronを範囲検索したい
Quartzでcronを範囲検索したい
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
kunibiki.rb #5 発表資料
kunibiki.rb #5 発表資料kunibiki.rb #5 発表資料
kunibiki.rb #5 発表資料
 
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
 
Chef
ChefChef
Chef
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
 
ひとりアドベントカレンダーのご紹介
ひとりアドベントカレンダーのご紹介ひとりアドベントカレンダーのご紹介
ひとりアドベントカレンダーのご紹介
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えて
 
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_CodeChef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
 
イマドキのコーダー環境構築2016
イマドキのコーダー環境構築2016イマドキのコーダー環境構築2016
イマドキのコーダー環境構築2016
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 

Similaire à フロント開発をがんばるためにGulpとGruntに入門してみた

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 

Similaire à フロント開発をがんばるためにGulpとGruntに入門してみた (20)

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Linkage of gulp & sketch
Linkage of gulp & sketchLinkage of gulp & sketch
Linkage of gulp & sketch
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
Grunt入門
Grunt入門Grunt入門
Grunt入門
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Google Product
Google ProductGoogle Product
Google Product
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Datalab and colaboratory
Datalab and colaboratoryDatalab and colaboratory
Datalab and colaboratory
 
Gcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown scriptGcpug begginers #1LT startup scriptとshutdown script
Gcpug begginers #1LT startup scriptとshutdown script
 
特盛!Heroku
特盛!Heroku特盛!Heroku
特盛!Heroku
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Devfes kyoto2017
Devfes kyoto2017Devfes kyoto2017
Devfes kyoto2017
 

Dernier

Dernier (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

フロント開発をがんばるためにGulpとGruntに入門してみた