Slide 1

Slide 1 text

npm module
 ͭͬͨ͘ 2015-10-21 W8LT #5 @dtan4

Slide 2

Slide 2 text

ಙాݚ M2

Slide 3

Slide 3 text

JavaScript • Πϯϑϥք۾ͱಉ͘͡Β͍ɺ͍΍ͦΕҎ্ͷ
 εϐʔυͰٕज़ֵ৽͕ىͬͯ͜Δ • Electron ਓؾ • AWS Lambda ΋σϑΥϧτͰ JS αϙʔτ • React, Flux, Promise, ES6 ͱ͔ฉ͍ͨ͜ͱ͋Δ͚Ͳ ࣮ࡍԿͳͷ͔஌ΒΜ • ৐Δ͔͠ͳ͍͜ͷϏοά΢Σʔϒʹ

Slide 4

Slide 4 text

npm • Node Package Manager • Ruby Ͱݴ͏ RubyGems • ϥΠϒϥϦ͔ΒίϚϯυϥΠϯπʔϧ·Ͱ

Slide 5

Slide 5 text

ͭͬͨ͘΋ͷ • namesh • ౦ژΞϝογϡͷ
 ΫϥΠΞϯτϥΠϒϥϦ • ೔෇ͷҰཡฦ͚ͩ͢ Namesh = require 'src/namesh' Namesh.indices().then (value) -> console.log value [ '201510211605', '201510211600', '201510211555', '201510211550', '201510211545', '201510211540', '201510211535', '201510211530', '201510211525', '201510211520', '201510211515', '201510211510', '201510211505', '201510211500', '201510211455', '201510211450', '201510211445', '201510211440', '201510211435', '201510211430', '201510211425', '201510211420', '201510211415', '201510211410', '201510211405' ]

Slide 6

Slide 6 text

$ npm init $ npm init … Press ^C at any time to quit. name: (namesh) version: (1.0.0) 0.1.0 description: Node.js Client for Tokyo-Amesh entry point: (index.js) test command: git repository: https://github.com/dtan4/namesh.git keywords: author: Daisuke Fujita license: (ISC) MIT About to write to /Users/fujita/tmp/namesh/package.json:

Slide 7

Slide 7 text

$ npm init { "name": "namesh", "version": "0.1.0", "description": "Node.js Client for Tokyo-Amesh", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/dtan4/namesh.git" }, "author": "Daisuke Fujita", "license": "MIT", "bugs": { "url": "https://github.com/dtan4/namesh/issues" }, "homepage": "https://github.com/dtan4/namesh#readme" }

Slide 8

Slide 8 text

Testing BDD-style Test | Automated Test | CI

Slide 9

Slide 9 text

Mocha • ςετϑϨʔϜϫʔΫ • RSpec ͬΆ͍ه๏ • describe , it mochajs/mocha assert = require 'power-assert' mocha = require 'mocha' describe '+' -> it 'should calculate 1 + 2' -> assert 1 + 2 == 3

Slide 10

Slide 10 text

Nock • HTTP mocking library • Ruby Ͱݴ͏webmock • μϛʔͷ HTTP ϨεϙϯεΛฦ͢ pgte/nock describe 'Namesh', -> urlBase = 'http://tokyo-ame.jwa.or.jp' body = 'Amesh.setIndexList(["201510190110","201510190105","201510190100","201510190055","2015 10190050","201510190045","201510190040","201510190035","201510190030","201510190025"," 201510190020","201510190015","201510190010","201510190005","201510190000","20151018235 5","201510182350","201510182345","201510182340","201510182335","201510182330","2015101 82325","201510182320","201510182315","201510182310"]);' describe '#indices', -> beforeEach( -> nock(urlBase) .get '/scripts/mesh_index.js' .reply 200, body )

Slide 11

Slide 11 text

Power Assert • ୯७ͳ assertion • fail ͨ͠ͱ͖ʹΘ͔Γ΍͘͢
 දࣔ power-assert-js/power-assert

Slide 12

Slide 12 text

gulp • Stream API Λར༻ͨ͠ϏϧυγεςϜ • ݁߹ͨ͠Γ minify ͨ͠Γ livereload ͨ͠Γ
 ςετ૸ΒͤͨΓ • ࠓճ͸ࣗಈςετͷ໨తͰར༻ • gulp-mocha Ͱ mocha ૸Β͢ • gulp-watch ͰϑΝΠϧมߋݕ஌ͯ͠ςετ࣮ߦ gulpjs/gulp

Slide 13

Slide 13 text

gulp (gulpfile.coffee) gulpjs/gulp gulp = require "gulp" mocha = require "gulp-mocha" gulp.task "test", -> require "espower-coffee/guess" gulp.src("test/**/*.coffee") .pipe(mocha()) gulp.task "watch", -> gulp.watch(["src/**", "test/**"], ["test"])

Slide 14

Slide 14 text

Code Coverage • Istanbul ͕༗໊ͬΆ͍ • CoffeeScript ͷΧόϨοδऔΕͳ͍ʁ • coffee-coverage + Istanbul • blanket • ͍Ζ͍Ζࢼ͚ͨ͠Ͳμϝͩͬͨ • ES6 Ҡߦ͔ͯ͠ΒվΊͯ΍Δ

Slide 15

Slide 15 text

Travis CI • ͓ͳ͡Έ CI as a Service

Slide 16

Slide 16 text

Code Climate • ͓ͳ͡Έ Metrics Checker as a Service • ݱࡏ͸લड़ͷࣄ৘Ͱ Code Coverage ͱͬͯͳ͍

Slide 17

Slide 17 text

HTTP ୟ͍ͯ
 Ϩεϙϯεฦ͢ (&5TDSJQUTNFTI@JOEFYKT 1SFUUJGZUP"SSBZ 3FTQPOTF

Slide 18

Slide 18 text

request = require 'request' Namesh = {} Namesh.indices = -> request INDICES_URL, (error, response, body) -> if !error && response.statusCode is 200 return body.replace(...).replace ... HTTP ୟ͍ͯ
 Ϩεϙϯεฦ͢

Slide 19

Slide 19 text

HTTP ୟ͍ͯ
 Ϩεϙϯεฦ͢ request = require 'request' Namesh = {} Namesh.indices = -> request INDICES_URL, (error, response, body) -> if !error && response.statusCode is 200 return body.replace(...).replace ... ͍ͭ͜Λฦͯ͠΄͍͠

Slide 20

Slide 20 text

Promise

Slide 21

Slide 21 text

Promise • ඇಉظॲཧΛ͏·͍ײ͡ʹѻ͏΍ͭ • resolve, reject ίʔϧόοΫΛఆٛͨ͠ Promise
 ΦϒδΣΫτΛ࡞੒ • ඇಉظॲཧ͕ऴΘͬͨ͋ͱͷॲཧΛݺͼग़͠ଆͷ
 then, catch Ͱॲཧ͢Δ • ES5 ͔Β࢖͏ͳΒ bluebird ࢖͏

Slide 22

Slide 22 text

Promise promise = require 'bluebird' request = require 'request' Namesh = {} Namesh.indices = (callback) -> getIndices = new promise (resolve, reject) -> request(INDICES_URL, (error, response, body) -> if !error && response.statusCode == 200 resolve body.replace(…).split … else reject error )

Slide 23

Slide 23 text

Promise Namesh = require 'Namesh' Namesh.indices().then((value) -> console.log value ).catch((value) -> )

Slide 24

Slide 24 text

ES6 ECMAScript 6

Slide 25

Slide 25 text

ECMAScript 6 • let, const ΩʔϫʔυʹΑΔม਺એݴ • class ΩʔϫʔυʹΑΔΫϥεએݴ • => ʹΑΔΞϩʔؔ਺ • String interpolation • Promise αϙʔτ • import, export ʹΑΔϞδϡʔϧߏจ ͳͲͳͲ

Slide 26

Slide 26 text

ES6 -> ES5 τϥϯεύΠϥ

Slide 27

Slide 27 text

Namesh in ES6 • To be continued… • Emacs ʹରԠ͍ͯ͠ΔϝδϟʔϞʔυ͕͋Δͷ͔ • js2-mode ͕ ES6 ରԠ͍ͯ͠ΔΒ͍͚͠Ͳ

Slide 28

Slide 28 text

$ npm publish $ npm publish + [email protected]

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

͓ΘΓʹ • RubyGem ࡞ΔϊϦͰ࢝ΊͨΒ݁ߏٽ͍ͨ • JavaScript ͷւ͸޿େͩΘ • ಛʹ։ൃπʔϧपΓͰɺ౷Ұͨ͠ιϦϡʔγϣϯ
 ͕ݟ͔ͭΒͳ͍ • X as a Service ͸ Ruby ͱಉ͡Α͏ʹ࢖͑Δ΋ͷ͕
 ଟͯ͘Α͍