Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
gulpをv3系から v4系にアップデートした話
Search
nagasawaaaa
October 26, 2019
Programming
490
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
gulpをv3系から v4系にアップデートした話
update gulp v3 => v4
nagasawaaaa
October 26, 2019
More Decks by nagasawaaaa
See All by nagasawaaaa
勉強会を開いてよかった話
nagasawaaaa
0
660
CSS Transform Simulator を Vue.js で 作った話
nagasawaaaa
1
620
Vue meet up sapporo #1 VeeValidateの紹介
nagasawaaaa
1
400
Other Decks in Programming
See All in Programming
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
610
dRuby over BLE
makicamel
2
320
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
140
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
440
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
110
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
150
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.8k
RTSPクライアントを自作してみた話
simotin13
0
510
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
260
CSC307 Lecture 17
javiergs
PRO
0
320
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
1.8k
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
4
1.5k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Believing is Seeing
oripsolob
1
140
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Everyday Curiosity
cassininazir
0
230
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
160
Marketing to machines
jonoalderson
1
5.4k
Six Lessons from altMBA
skipperchong
29
4.3k
Transcript
HVMQΛWܥ͔Β WܥʹΞοϓσʔτͨ͠ ᖒݡʢ!OBHBTBXBBBBʣ ΏΔ8FCษڧձ!ࡳຈ
ࣗݾհ w ໊લɿᖒݡʢͳ͕͞Θ͞ͱ͠ʣ w 5XJUUFSɿ!OBHBTBXBBBB w ॴଐɿגࣜձࣾύϯηΤϯδχΞ w ׆ಈɿ+48PSLTIPQ4BQQPSPʢ+BWB4DSJQUͷษڧձʣ 7VFKT/VYUKT͘͘ձ
ΏΔ8FCษڧձ!ࡳຈ
ࠓ͢͜ͱ w HVMQWʹͳͬͯศརͩͳͱࢥͬͨՃػೳͷհ w HVMQWHVMQWͷॻ͖ํͷҧ͍ ΏΔ8FCษڧձ!ࡳຈ
ຊͷαϯϓϧίʔυ IUUQTHJUIVCDPNOBHBTBXBBBBHVMQWUPW ΏΔ8FCษڧձ!ࡳຈ
ͦͦHVMQͱʁ ΏΔ8FCษڧձ!ࡳຈ
ݱͰ͑ΔHVMQೖୈճHVMQͱԿ͔c$PEF(SJE IUUQTBQQDPEFHSJEOFUFOUSZHVMQ lHVMQ/PEFKTΛϕʔεͱͨ͠ϏϧυγεςϜϔϧύʔ Ͱ͢ɻҎલ$PEF(SJEͰհͨ͠(SVOUͱࣅͨతΛ ࣋ͬͯ࡞ΒΕͨπʔϧͰɺHVMQΛ͑͞·͟·ͳ࡞ ۀΛࣗಈԽ͢Δ͜ͱ͕Ͱ͖·͢ɻz ΏΔ8FCษڧձ!ࡳຈ
HVMQͰग़དྷΔ͜ͱ w FKTɺQVHɺ/VOKVDLTͳͲͷ)5.-ςϯϓϨʔτΤϯδϯΛͬͨIUNMͷϏϧυ w 4BTTɺ4UZMVTͳͲͷ"MU$44ͷίϯύΠϧ w ίϯύΠϧ࣌ʹ"VUPQSFpYFSͰϕϯμʔϓϨϑΟοΫεΛࣗಈ༩ w ը૾ͷѹॖ w
8FCQBDLΛͬͯ+4Λόϯυϧ w CBCFMΛͬͯ+4ΛτϥϯεύΠϧ w 1SFUUJFSͰ+4Λίʔυܗ w ϒϥβͷࣗಈϦϩʔυʢ#SPXTFS4ZODͳͲʣ w ͦͷଞ ΏΔ8FCษڧձ!ࡳຈ
ൿͷλϨͱԽ͢HVMQpMFKT ΏΔ8FCษڧձ!ࡳຈ
ൿͷλϨԽ͢ΔݪҼ w HVMQpMFKT୭͔͕࡞ͬͨͷΛଞͷϓϩδΣΫτ͔Βͷ͍ճ͕ͪ͠ w ৽ೖࣾһઌഐ͕ͬͯΔͷΛงғؾͰ͍ͬͯΔ w OQNJͯ͠OQNTUBSUୟ͚ͱΓ͋͑ͣಈ͔͘Βʙతͳʜ w Ξοϓσʔτ͠ͳͯ͘ຬ͍ͯ͠Δ w
ͦͦ࡞ͬͨਓ͕ୀ৬ͯ͠ϝϯςφϯε͢Δਓ͕͍ͳ͘ͳͬͨ ΏΔ8FCษڧձ!ࡳຈ
ͦͷ݁Ռ ΏΔ8FCษڧձ!ࡳຈ
Wܥͷ··ࠓࢸΔ ˞ઌఔͷݪҼʹهࡌͨ͠ҰྫฐࣾΛྫʹͨ͠༰Ͱ͋Γ·ͤΜ WFSTJPO͕Wܥͷ࠷ޙ ΏΔ8FCษڧձ!ࡳຈ
ͦͯ͠HVMQW͕݄ʹ ϦϦʔε͞Εͨͷͷ ۀ͕͗ͯ͢͠εϧʔ ΏΔ8FCษڧձ!ࡳຈ
/VYUԌ্ϓϩδΣΫτʹΑΓ Ҏ্ଟͷʑΛૹ͍͕ͬͯͨɺ ϦϦʔεΛऴ͑ͯۀʹ༨༟͕ग़Δ ΏΔ8FCษڧձ!ࡳຈ
༨༟Ͱ͖ͨ͠ ϑϩϯτܥʢओʹ੩తαΠτ༻ʣͷ ςϯϓϨʔτΛߋ৽͢Δͧ ΏΔ8FCษڧձ!ࡳຈ
WWͰେ͖͘มΘͬͨͱ͜Ζ ΏΔ8FCษڧձ!ࡳຈ
JNQPSUFYQPSUߏจΛ͑ΔΑ͏ʹͳͬͨ w FTN˞ϞδϡʔϧΛΠϯετʔϧ͢Δ w ϑΝΠϧ໊ΛHVMQpMFKTHVMQpMFFTNKTʹมߋ͢Δ CBCFMΛೖΕͨΓɺ5ZQF4DSJQUͰॻ͚·͕͢ɺ ࠷ۙͷ/PEFKTʢWҎ߱ͱ͔ʜ ʣͦΕΒ͕ఏڙ͢ΔߏจΛ αϙʔτ͍ͯ͠ΔͷͰFTNΛಋೖ͢Δ͚ͩͰྑ͍ͱݸਓతʹࢥ͍·͢ɻ ͨͩ͠ɺHVMQpMFKTΛܕ͖ݴޠͰॻ͘ͷͰ͋Ε
5ZQF4DSJQUΛಋೖ͢ΔͷΞϦͰ͢ɻ ΏΔ8FCษڧձ!ࡳຈ ˞FTNCBCFMෆཁɺόϯυϧෆཁͷ&4Ϟδϡʔϧϩʔμʔ ˞WܥͰFTNೖΕͨΒग़དྷ͔ͨ͠Ε·ͤΜ͕ະݕূʜ
໊લΛมߋ͢Δ͚ͩͰHVMQ͕ Α͠ͳʹͬͯ͘ΕΔͷͰHVMQpMFFTNKTʹ FTNΛSFRVJSFPSJNQPSU͢Δඞཁͳ͍Ͱ͢ ΏΔ8FCษڧձ!ࡳຈ
ͪͳΈʹ ΏΔ8FCษڧձ!ࡳຈ
CBCFMΛͬͯHVMQpMFKTΛॻ͜͏ͱ͢Δͱʁ w ϑΝΠϧ໊ΛHVMQpMFCBCFMKTʹมߋ͢Δ w ࣍ͷϞδϡʔϧΛΠϯετʔϧ͢Δ w !CBCFMDPSF !CBCFMSFHJTUFS !CBCFMQPMZpMM !CBCFMDPSFKT
w CBCFMSD˞Λ࡞͠ઃఆΛՃ JNPSUFYQPSUͱBTZODBXBJU͏߹όϕΔ˞߹ख͕͔͔ؒΔɻ HVMQެࣜυΩϡϝϯτʹHVMQpMFCBCFMKTʹมߋͯ͠!CBCFMSFHJTUFSೖΕΖͱ͍͏ ͜ͱ͚ͩॻ͍ͯ͋Δɻ ΏΔ8FCษڧձ!ࡳຈ ˞CBCFMΛͬͯτϥϯεύΠϧ͢Δ͜ͱ ˞CBCFMͷઃఆϑΝΠϧ
5ZQF4DSJQUͦͦࢲ͕ ීஈۀͰॻ͍͍ͯͳ͍ͷͰ ࠓճׂѪʜ ΏΔ8FCษڧձ!ࡳຈ
JNPSUFYQPSUߏจWWൺֱ const gulp = require('gulp'); const runSequence = require('run-sequence'); gulp.task('css',
() => { console.log('css'); }); gulp.task('js', () => { console.log('js'); }); gulp.task('imagemin', () => { console.log('imagemin'); }); gulp.task('default', cb => { return runSequence('imagemin', ['css', 'js'], cb); }); WHVMQpMFKT import gulp from 'gulp'; async function css () { console.log('css'); } async function js () { console.log('js'); } async function imagemin () { console.log('imagemin'); } const build = gulp.parallel(css, js, imagemin); export default build; WHVMQpMFFTNKT ΏΔ8FCษڧձ!ࡳຈ ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ
λεΫͷ࡞ํ๏͕γϯϓϧʹͳͬͨ w HVMQUBTL ͰλεΫΛొ͠ͳͯ͘େৎʹͳͬͨ w ؔͷฦΓΛ1SPNJTFʹ͢ΔɺTUFSBNΛฦ͢ɺίʔϧόοΫؔ Λͯؔ͠ͰൃՐͤ͞ΕHVMQͷλεΫʹͳΔ˞ ΏΔ8FCษڧձ!ࡳຈ ˞ଞʹ͋Γ·͕͢ৄ͘͠υΩϡϝϯτΛࢀর͍ͩ͘͞ ɹɹIUUQTHVMQKTDPNEPDTFOHFUUJOHTUBSUFEBTZODDPNQMFUJPO
λεΫͷ࡞ํ๏WWൺֱ ΏΔ8FCษڧձ!ࡳຈ WHVMQpMFFTNKT import { src, dest, parallel } from
'gulp'; // steram を返す従来に似たパターン function streamCss () { return src('src/**/*.css') .pipe(dest('public_html')); } // Promiseを返すパターン1 async function asyncJs () { console.log('js'); } // Promiseを返すパターン2 function promiseImagemin () { console.log('imagemin'); return Promise.resolve('resolveの値は無視される') } // 何も返さない代わりにError-first callbacksを発火させるパターン function callbackHtml (cb) { console.log('html'); cb(); } const build = parallel(streamCss, asyncJs, callbackHtml, promiseImagemin); export default build; WHVMQpMFKT const gulp = require('gulp'); const imagemin = require('gulp-imagemin'); const runSequence = require('run-sequence'); gulp.task('css', () => { return gulp.src('src/**/*.css') .pipe(gulp.dest('public_html')); }); gulp.task('js', () => { return gulp.src('src/**/*.js') .pipe(gulp.dest('public_html')); }); gulp.task('imagemin', () => { return gulp.src('src/**/*.{gif,jpg,png,svg}') .pipe(imagemin()) .pipe(gulp.dest('public_html')); }); gulp.task('default', cb => { return runSequence('imagemin', ['css', 'js'], cb); }); ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ
ύϒϦοΫλεΫͱϓϥΠϕʔτλεΫʹ ͚Δ͜ͱ͕ग़དྷΔΑ͏ʹͳͬͨ w HVMQpMFKTͰFYQPSU͠ͳ͚ΕϓϥΠϕʔτλεΫʹͳΔ w ϓϥΠϕʔτλεΫΤϯυϢʔβʔ͕࣮ߦͰ͖ͳ͍ w ύϒϦοΫʹొ͢ΔʹHVMQpMFKTͰFYQPSU͢Δ ΏΔ8FCษڧձ!ࡳຈ ࢀߟɿIUUQTHVMQKTDPNEPDTFOHFUUJOHTUBSUFEDSFBUJOHUBTLT
ύϒϦοΫλεΫͱϓϥΠϕʔτλεΫ ΏΔ8FCษڧձ!ࡳຈ import { series, parallel } from 'gulp'; import
clean from './tasks/clean'; // プライベート async function css () { console.log('css'); } // プライベート async function js () { console.log('js'); } // プライベート async function imagemin () { console.log('imagemin'); } // パブリック const build = series( clean, parallel(css, js, imagemin) ); // exportすることによってコマンドラインから使えるようになります export default build; export const cleanDir = clean; ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ ˞QBDLBHFKTPOͷTDSJQUTʹHVMQΛՃ͍ͯ͠ΔఆͷͰ͢ɻ ӈͷΑ͏ͳHVMQGVMFFTNKTͷ߹ɺ FYQPSU͍ͯ͠ΔCVJME σϑΥϧτλεΫ ͱ DMFBO%JSͱ͍͏λεΫ͕ίϚϯυϥΠϯ͔Βୟ͘͜ ͱ͕Ͱ͖ΔύϒϦοΫλεΫͱͯ͠ొ͞Ε·͢ɻ ͦΕҎ֎ͷDTTɺKTɺJNBHFNJOͳͲ FYQPSU͍ͯ͠ͳ͍ͨΊɺ࣍ͷΑ͏ͳίϚϯυ͕௨Γ ·ͤΜɻ $ npm run gulp $ npm run gulp css Task never defined: css // エラーとなる $ npm run gulp cleanDir
ྻॲཧɺฒྻॲཧʹ SVOTFRVFODF͕ෆཁʹͳͬͨ w ྻॲཧ͢ΔTFSJFT ϝιου͕Ճ͞Εͨ w ฒྻॲཧ͢ΔQBSBMMFM ϝιου͕Ճ͞Εͨ ΏΔ8FCษڧձ!ࡳຈ ࢀߟɿIUUQTHVMQKTDPNEPDTFOBQJTFSJFT
IUUQTHVMQKTDPNEPDTFOBQJQBSBMMFM
QBSBMMFM TFSJFT ΏΔ8FCษڧձ!ࡳຈ ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ WHVMQpMFFTNKT import { series, parallel }
from 'gulp'; async function css () { console.log('css'); } async function js () { console.log('js'); } async function imagemin () { console.log('imagemin'); } const build = series( imagemin, parallel(css, js) ); export default build; WHVMQpMFKT const gulp = require('gulp'); const imagemin = require('gulp-imagemin'); const runSequence = require('run-sequence'); gulp.task('css', () => { return gulp.src('src/**/*.css') .pipe(gulp.dest('public_html')); }); gulp.task('js', () => { return gulp.src('src/**/*.js') .pipe(gulp.dest('public_html')); }); gulp.task('imagemin', () => { return gulp.src('src/**/*.{gif,jpg,png,svg}') .pipe(imagemin()) .pipe(gulp.dest('public_html')); }); gulp.task('default', cb => { return runSequence('imagemin', ['css', 'js'], cb); });
ιʔεϚοϓͷग़ྗʹϓϥάΠϯ͕ෆཁʹͳͬͨ ΏΔ8FCษڧձ!ࡳຈ ˞ॻ͖ํͷࢀߟͰ͋ΓɺλεΫͷதదͰ͢ɻ WHVMQpMFFTNKT import { src, dest } from
'gulp'; import sass from 'gulp-sass'; async function scss () { return src('src/**/*.scss', { base: 'src', sourcemaps: true }) .pipe(sass()) .pipe(dest('public_html', { sourcemaps: './' })); } export const buildSass = scss; WHVMQpMFKT const gulp = require('gulp'); const sass = require('gulp-sass'); const sourcemaps = require('gulp-sourcemaps'); gulp.task('sass', () => { return gulp.src('src/**/*.scss', { base: 'src' }) .pipe(sourcemaps.init()) .pipe(sass()) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('public_html')); }); WܥͰTSDϝιουͱEFTUϝιουͷୈҾͷΦϓγϣϯʹ TPVSDFNBQTϓϩύςΟΛͤΔΑ͏ʹͳͬͨɻ USVFʹઃఆ͢ΔͱJOMJOFͰग़ྗ͞Εɺग़ྗ͢ΔύεΛจࣈྻͰઃఆ͢Δͱ֎෦ϑΝΠϧͰग़ྗ͞ΕΔɻ ࢀߟɿIUUQTHVMQKTDPNEPDTFOBQJTSDTPVSDFNBQT
ଞʹ͋Δ͚Ͳৄ͘͠ ެࣜυΩϡϝϯτΛݟͯͶ IUUQTHVMQKTDPNEPDTFOBQJDPODFQUT
·ͱΊ
·ͱΊ w πʔϧ͍͚͕େࣄɻHVMQπʔϧͷ̍ͭɻ HVMQ͕ಘҙͳ͜ͱHVMQʹɻ XFCQBDL͕ಘҙͳ͜ͱXFCQBDLʹΒͤΔɻ w Ϟμϯͳ+4Ͱॻ͚ͯɺࠓ·ͰϓϥάΠϯͰิ͍ͬͯͨػೳ͕ Ճ͞ΕͨHVMQWʹΞοϓσʔτ͠Α͏ɻ w 1BSDFMಋೖ؆୯ͰૉΒ͍͠πʔϧ͚ͩͲɺ
8&#αΠτ੍࡞ք۾ͰHVMQ·ͩ·ͩݱɻʢͷɺͣʜʣ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠