javascript/css 2015 autumn

131
JavaScript/CSS 2015 Autumn Koji Ishimoto @IWATE HTML5 COMMUNITY #3 on October 14 © 2015 Kaizen Platform, Inc.

Upload: koji-ishimoto

Post on 07-Apr-2017

14.853 views

Category:

Design


0 download

TRANSCRIPT

Page 1: JavaScript/CSS 2015 Autumn

JavaScript/CSS 2015 AutumnKoji Ishimoto @IWATE HTML5 COMMUNITY #3 on October 14

© 2015 Kaizen Platform, Inc.

Page 2: JavaScript/CSS 2015 Autumn

Koji Ishimoto

@t32k

Front-End Developer

Page 3: JavaScript/CSS 2015 Autumn

StyleStatsCSSを解析するWebサービス

http://www.stylestats.org/

Page 5: JavaScript/CSS 2015 Autumn

Creative NetworkUX optimize Platform

Search

Social

Email

Site Content

Content

Creative

Conversations

+

Display

About KAIZEN PLATFORM

継続的改善のためのワークフローの管理から実際のテストやナレッジ蓄積まで

2000名を超える専門特化された UIデザイナーやコピーライターのネットワーク

Page 6: JavaScript/CSS 2015 Autumn

Agenda

Page 7: JavaScript/CSS 2015 Autumn

Agenda

•フロントエンド開発の現状

• JavaScript 2015

• CSS 2015

• Build Toolsとか

•まとめ

Page 8: JavaScript/CSS 2015 Autumn

Front-end Development

Page 9: JavaScript/CSS 2015 Autumn

JavaScript Frameworks

Page 10: JavaScript/CSS 2015 Autumn

JavaScriptフレームワークの寿命 | POSTD半年ごとに”今一番ホットな”フレームワークが新たに登場しては、私たちは興奮に沸き返ります

http://postd.cc/longevity-or-lack-thereof-in-javascript-frameworks/

Page 11: JavaScript/CSS 2015 Autumn

Angular 1 と Angular 2 の連携シームレスなアップグレードの方法について

http://googledevjp.blogspot.jp/2015/10/angular-1-angular-2.html

Page 12: JavaScript/CSS 2015 Autumn

次に『何』が来るかなんて誰にもわかりません。あきらめてください!

Page 13: JavaScript/CSS 2015 Autumn

Languages that compiles to Javascript

Page 15: JavaScript/CSS 2015 Autumn

JS Build Tools

Page 16: JavaScript/CSS 2015 Autumn

なんでこんなにあるんや…安心してください!僕もそう思います!

Page 17: JavaScript/CSS 2015 Autumn

第4章:フロントエンド技術──Web標準を振り返り新技術の潮流に活かす - 石本光司

Page 18: JavaScript/CSS 2015 Autumn

このさき生き残る技術とは?

Page 19: JavaScript/CSS 2015 Autumn

•それは標準技術なのか?

•それはシンプルに問題を解決するのか?

Page 20: JavaScript/CSS 2015 Autumn

DOM Selectorの移り変わり

// けっこー前 - DOM Level 2 Core var anchors = document.getElementById(‘js-node')          .getElementsByTagName('a');

// jQueryさまさま~ var anchors = $('#js-node > a');

// わりと最近 - Selectors API Level 1 var anchors = document.querySelectorAll(‘#js-node > a');

過去を振り返ってみると…

Page 21: JavaScript/CSS 2015 Autumn

シンプル複雑

標準

独自

Page 22: JavaScript/CSS 2015 Autumn

シンプル複雑

標準

独自

DOM Level 2 Core

Page 23: JavaScript/CSS 2015 Autumn

シンプル複雑

標準

独自

DOM Level 2 Core

Page 24: JavaScript/CSS 2015 Autumn

シンプル複雑

標準

独自

DOM Level 2 CoreSelectors API

Level 1

Page 25: JavaScript/CSS 2015 Autumn

シンプル複雑

標準

独自

DOM Level 2 CoreSelectors API

Level 1

Page 26: JavaScript/CSS 2015 Autumn

イケてる新しい標準技術取り込めばいいじゃん!

Page 27: JavaScript/CSS 2015 Autumn

JavaScript 2015

Page 28: JavaScript/CSS 2015 Autumn

Ecma InternationalTechnical Committee 39 - ECMAScript

https://github.com/tc39

Page 29: JavaScript/CSS 2015 Autumn

ECAMAScript Versions

Page 30: JavaScript/CSS 2015 Autumn

ECAMAScript Versions

ES3

1999

Page 31: JavaScript/CSS 2015 Autumn

ECAMAScript Versions

ES3

1999

ES4 (Abandoned)

2008

Page 32: JavaScript/CSS 2015 Autumn

ECAMAScript Versions

ES3

1999

ES4 (Abandoned)

2008

ES5

2009

Page 33: JavaScript/CSS 2015 Autumn

ECAMAScript Versions

ES3

1999

ES4 (Abandoned)

2008

ES5

2009

ES6

2015

Page 34: JavaScript/CSS 2015 Autumn

ECMAScript 6 compatibility tableブラウザ別のES 5/6/7の対応状況を確認可能

https://kangax.github.io/compat-table/es6

Page 35: JavaScript/CSS 2015 Autumn

使えないじゃん!>m<

Page 36: JavaScript/CSS 2015 Autumn

安心してください!バべりますよ!

Page 37: JavaScript/CSS 2015 Autumn

Babel The compiler for writing next generation JavaScript

次世代JavaScriptを今使えるようにするトランスパイラ

https://babeljs.io/

Page 38: JavaScript/CSS 2015 Autumn

Babel transpile ES6 to ES5

ES6 ES5 ES3

昔、Babelは6to5という名前だったが、ES7、JSX等もトランスパイルできるため現在の名前に落ち着いた

.js .js

Page 39: JavaScript/CSS 2015 Autumn

Languages that compiles to Javascript

Page 40: JavaScript/CSS 2015 Autumn

ES6

You might not need Babel

Chrome Extensions

v0.12+

.js

Future Browsers

??

Page 41: JavaScript/CSS 2015 Autumn

アロー関数 Arrows and Lexical This

var add = (x, y) => x + y;

オススメ

var add = function add(x, y) { return x + y; };

ES6

Page 42: JavaScript/CSS 2015 Autumn

アロー関数 Arrows and Lexical This

var obj = { name: 't32k', sayHello: function (friends) { friends.forEach( friend => { console.log(this.name + ' says hello to ' + friend) }); } };

var obj = { name: 't32k', sayHello: function sayHello(friends) { var _this = this; friends.forEach(function (friend) { console.log(_this.name + ' says hello to ' + friend); }); } };

ES6

オススメ

Page 43: JavaScript/CSS 2015 Autumn

オブジェクトリテラル拡張 Enhanced Object Literals

var obj = { somethingMethod, hello(message) { console.log(message); }, [ 'a' + 'b' ]: 'c' };

function _defineProperty(obj, key, value){ …(中略)… } var obj = _defineProperty({ somethingMethod: somethingMethod, hello: function hello(message) { console.log(message); } }, 'a' + 'b', 'c');

ES6

オススメ

Page 44: JavaScript/CSS 2015 Autumn

ブロックスコープ Let + Const

var x = 'var x'; var y = 'var y'; { let x = 'let x'; const y = 'const x'; }

var x = 'var x'; var y = 'var y'; { var _x = 'let x'; var _y = 'const x'; }

ES6

Page 45: JavaScript/CSS 2015 Autumn

引数と演算子 Default + Rest + Spread

function add(x, y=2) { return x + y; } add(3) == 5

function add(x) { var y = arguments.length <= 1 || arguments[1] === undefined ? 2 : arguments[1]; return x + y; }

ES6

オススメ

Page 46: JavaScript/CSS 2015 Autumn

引数と演算子 Default + Rest + Spread

function subtract(x, ...y) { return x - y.length; } subtract(10, 't', '3', '2', 'k') == 7

function subtract(x) { for (var _len = arguments.length, y = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { y[_key - 1] = arguments[_key]; } return x - y.length; }

ES6

オススメ

Page 47: JavaScript/CSS 2015 Autumn

引数と演算子 Default + Rest + Spread

function multiple(x, y, z) { return x * y * z; } multiple(...[1,2,3]) == 6

function multiple(x, y, z) { return x * y * z; } multiple.apply(undefined, [1, 2, 3]) == 6;

ES6

オススメ

Page 48: JavaScript/CSS 2015 Autumn

分割代入 Destructuring Assignment

var [a, , b] = [1,2,3];

var {name: c, age: d} = {name: 't32k', age: 32};

var _ref = [1, 2, 3]; var a = _ref[0]; var b = _ref[2];

var _name$age = { name: 't32k', age: 32 }; var c = _name$age.name; var d = _name$age.age;

ES6

Page 49: JavaScript/CSS 2015 Autumn

テンプレート Template Strings

var name = 't32k', age = 'today'; `Hello ${name}. You are ${time} years old.`

var name = 't32k', age = 'today'; "Hello " + name + ".\n You are " + time + " years old.";

ES6

オススメ

Page 50: JavaScript/CSS 2015 Autumn

クラス Classes

class Rectangle { constructor(height, width) { this.height = height; this.width = width; } getArea() { return this.calcArea() } calcArea() { return this.height * this.width; } }

ES6

Page 51: JavaScript/CSS 2015 Autumn

function Rectangle (height, width) { this.height = height; this.width = width; }

Rectangle.prototype.getArea = function () { return this.calcArea(); };

Rectangle.prototype.calcArea = function () { return this.height * this.width; };

ES5

クラス Classes

Page 52: JavaScript/CSS 2015 Autumn

クラス Classes

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Rectangle = (function () { function Rectangle(height, width) { _classCallCheck(this, Rectangle); this.height = height; this.width = width; } _createClass(Rectangle, [{ key: "calcArea", value: function calcArea() { return this.height * this.width; } }, { key: "area", get: function get() { return this.calcArea(); } }]); return Rectangle; })();

Page 53: JavaScript/CSS 2015 Autumn

プロミス Promises

function asyncTaskN() { return new Promise(); }

asyncTask1().then(result => { return asyncTask2(); }).then(result => { return asyncTask3(); }).catch(error => { });

asyncTask1(function(error, result) { asyncTask2(function(error, result) { asyncTask3(function(error, result) { }); }); });

ES6

ES5

オススメ要: Polyfill

Page 54: JavaScript/CSS 2015 Autumn

You must include the Babel polyfill

http://babeljs.io/docs/usage/polyfill/

いくつかの機能を利用するには事前にpolyfillをインストールする必要がある

Page 55: JavaScript/CSS 2015 Autumn

JavaScript Promiseの本Promiseについて学ぶことを目的とした書籍

http://azu.github.io/promises-book/

Page 56: JavaScript/CSS 2015 Autumn

Map + Set + WeakMap + WeakSet

// Sets var s = new Set(); s.add("hello").add("goodbye").add("hello"); s.size === 2; s.has("hello") === true;

// Maps var m = new Map(); m.set("hello", 42); m.set(s, 34); m.get(s) == 34;

// Weak Maps var wm = new WeakMap(); wm.set(s, { extra: 42 }); wm.size === undefined

// Weak Sets var ws = new WeakSet(); ws.add({ data: 42 });

要: Polyfill

ES6

Page 57: JavaScript/CSS 2015 Autumn

モジュール Modules

// lib/math.js export function sum(x, y) { return x + y; } export var pi = 3.14;

// app.js import * as math from "lib/math"; alert(math.sum(math.pi, math.pi));

ES6

ES6

Page 58: JavaScript/CSS 2015 Autumn

モジュール Modules

// lib/math.js Object.defineProperty(exports, "__esModule", { value: true }); exports.sum = sum; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }

// app.js var _libMath = require("lib/math"); var math = _interopRequireWildcard(_libMath); function sum(x, y) { return x + y; } var pi = 3.14;exports.pi = pi; alert(math.sum(math.pi, math.pi));

Page 59: JavaScript/CSS 2015 Autumn

babelifyBrowserify transform for Babel

https://github.com/babel/babelify

Page 60: JavaScript/CSS 2015 Autumn

Babelで始める!モダンJavaScript開発

https://html5experts.jp/kyo_ago/16979/

Page 61: JavaScript/CSS 2015 Autumn

• Stage 0 - Strawman • es7.comprehensions • es7.classProperties • es7.doExpressions • es7.functionBind

• Stage 1 - Proposal • es7.decorators • es7.exportExtensions • es7.trailingFunctionCommas

• Stage 2 - Draft (Default Stage) • Stage 3 - Candidate • Stage 4 - Finished

The TC39 categorises proposals into 4 stages:

Page 62: JavaScript/CSS 2015 Autumn

ES 2016, 2017…

2016年以降は、年次で小さな変更をこまめにリリース

Page 63: JavaScript/CSS 2015 Autumn

ESLint Pluggable JavaScript linter

自分好みのLint設定が可能

http://eslint.org/

Page 64: JavaScript/CSS 2015 Autumn

•シンプルな文法•バッドパーツの回避

Page 65: JavaScript/CSS 2015 Autumn

CSS 2015

Page 66: JavaScript/CSS 2015 Autumn

CSSの世界にもBabelみたいのないの?

Page 67: JavaScript/CSS 2015 Autumn

安心してください!cssnext がありますよ!

Page 68: JavaScript/CSS 2015 Autumn

嘘!ごめん!ES6のように固まっていない

Page 69: JavaScript/CSS 2015 Autumn

CSS Levels

Page 70: JavaScript/CSS 2015 Autumn

CSS Levels

CSS1

1996

Page 71: JavaScript/CSS 2015 Autumn

CSS Levels

CSS1

1996

CSS2

1998

Page 72: JavaScript/CSS 2015 Autumn

CSS Levels

CSS1

1996

CSS2

1998

CSS2.1

2011

Page 73: JavaScript/CSS 2015 Autumn

CSS Levels

CSS1

1996

CSS3

20xx?

CSS2

1998

CSS2.1

2011

Page 74: JavaScript/CSS 2015 Autumn

Taking a Modular Approach

CSS2.1以降はモジュール方式のため、モノリシックなCSSとしてのv3は存在しない

Page 75: JavaScript/CSS 2015 Autumn

CSS Snapshot 20152015年現在、仕様的に安定しているものをまとめたもの

http://momdo.github.io/css-2015/

Page 76: JavaScript/CSS 2015 Autumn

CSS current work各モジュールの現在のステータスが確認できる

http://www.w3.org/Style/CSS/current-work

Page 77: JavaScript/CSS 2015 Autumn

•勧告(Recommendation: REC)

•勧告案(Proposed Recommendation: PR)

•勧告候補(Candidate Recommendation: CR)

•最終草案(Last Call Working Draft: LCWD)

•草案(Working Draft: WD)

•編集者草案(Editor’s Draft: ED)

Page 78: JavaScript/CSS 2015 Autumn

cssnext Use tomorrow's CSS syntax, today. by MoOx

Future Syntaxが使えるPostCSSのプラグインパッケージ

http://cssnext.io/

Page 80: JavaScript/CSS 2015 Autumn

PostCSSとcssnextで最新CSS仕様を先取り!

https://html5experts.jp/t32k/17235/

Page 81: JavaScript/CSS 2015 Autumn

PostCSSとは何か by @jimbo

https://speakerdeck.com/jmblog/postcss-tohahe-ka

Page 82: JavaScript/CSS 2015 Autumn

PostCSS自体はCSSパーサーで、それによって生成されるAST(抽象構文木)を扱うAPIを提供するのみ。それを利用した数多くのプラグインによってCSSスタイル変更等がされる。

Page 84: JavaScript/CSS 2015 Autumn

Sassに頼りすぎてないですか?

Page 85: JavaScript/CSS 2015 Autumn

それcssnextでもできますよ!(たぶん…だいたい...)

Page 86: JavaScript/CSS 2015 Autumn

cssnext で使える Future Syntax 一覧

Page 87: JavaScript/CSS 2015 Autumn

custom properties & var()

:root { --brandColor: green; }

strong { color: var(--brandColor); }

LCWD

Spec: Plugin:

See also:

CSS Custom Properties for Cascading Variables Module Level 1postcss/postcss-custom-properties

postcss/postcss-simple-vars

Page 88: JavaScript/CSS 2015 Autumn

reduced calc()

:root { --fontSize: 1rem; }

h1 { font-size: calc(var(--fontSize) * 2); }

CR

Spec: Plugin:

CSS Values and Units Module Level 3postcss/postcss-calc

See also: MoOx/reduce-css-calc

Page 89: JavaScript/CSS 2015 Autumn

custom media queries

@custom-media --small-vieport (max-width: 30em); /* media queriesの範囲を分かりやすく指定 */

@media (--small-viewport) { /* small viewport用のスタイルを記述 */ }

FPWD

Spec: Plugin:

Media Queries Level 4postcss/postcss-custom-media

Page 90: JavaScript/CSS 2015 Autumn

custom selectors

@custom-selector :--button button, .button; @custom-selector :--enter :hover, :focus;

:--button { /* ボタン用のスタイルを記述 */ } :--button:--enter { /* hover/focus状態のボタン用のスタイルを記述 */ }

ED

Spec: Plugin:

CSS Extensionspostcss/postcss-custom-selectors

Page 91: JavaScript/CSS 2015 Autumn

color

a { color: color(red alpha(-10%)); }

a:hover { color: color(red blackness(80%)); }

ED

• [red( | green( | blue( | alpha( | a(] ['+' | '-']? [<number> | <percentage>] ) • [red( | green( | blue( | alpha( | a(] '*' <percentage> ) • [hue( | h(] ['+' | '-' | '*']? <angle> ) • [saturation( | s(] ['+' | '-' | '*']? <percentage> ) • [lightness( | l(] ['+' | '-' | '*']? <percentage> ) • [whiteness( | w(] ['+' | '-' | '*']? <percentage> )

• [blackness( | b(] ['+' | '-' | '*']? <percentage> ) • tint( <percentage> ) • shade( <percentage> ) • blend( <color> <percentage> [rgb | hsl | hwb]? ) • contrast( <percentage>? )

List of color-adjuster

Spec: Plugin:

CSS Color Module Level 4 - The color() functionpostcss-color-fucntion

Page 92: JavaScript/CSS 2015 Autumn

hwb()

body { color: hwb(90, 0%, 0%, 0.5); } /* 変換後のCSS */ body { color: rgba(128, 255, 0, 0.5); }

ED

Spec: Plugin:

CSS Color Module Level 4 - HWB Colors: hwb() functionpostcss/postcss-color-hwb

Page 93: JavaScript/CSS 2015 Autumn

gray()

body { color: gray(255, 50%); } /* 変換後のCSS */ body { color: rgba(255, 255, 255, 0.5); }

ED

Spec: Plugin:

CSS Color Module Level 4 - The gray() functional notationpostcss/postcss-color-gray

Page 94: JavaScript/CSS 2015 Autumn

#rrggbbaa

body { background: #99DD99CC } /* 変換後のCSS */ body { background: rgba(153, 221, 153, 0.8) }

ED

Spec: Plugin:

CSS Color Module Level 4 - The RGB hexadecimal notationspostcss/postcss-color-hex-alpha

Page 95: JavaScript/CSS 2015 Autumn

rebeccapurple

body { background: rebeccapurple } /* 変換後のCSS */ body { background: rgb(102, 51, 153) }

ED

Why this plugin?

If you did some CSS, I'm sure you know who Eric Meyer is, & what he did for this language. In memory of Eric Meyer’s daughter, W3C added new color rebeccapurple to CSS 4 Color Module.

Spec: Plugin:

CSS Color Module Level 4 - Named Colorspostcss/postcss-color-rebeccapurple

Page 96: JavaScript/CSS 2015 Autumn

font-variant

h2 { font-variant-caps: small-caps; } /* 変換後のCSS */ h2 { font-feature-settings: "c2sc"; font-variant-caps: small-caps; }

Spec: Plugin:

CSS Fonts Module Level 3postcss/postcss-font-variant

CR

Page 97: JavaScript/CSS 2015 Autumn

filter

.blur { filter: blur(4px); } /* 変換後のCSS */ .blur { filter: url(‘data:image/svg+xml;utf8,<svg xmlns=“...ation=“4” /></filter></svg>#filter’); filter: blur(4px); }

WD

Spec: Plugin:

Filter Effects Module Level 1iamvdo/pleeease-filters

Page 98: JavaScript/CSS 2015 Autumn

rem units

.section { margin: 2.5rem 2px 3em 100%; } /* 変換後のCSS */ .section { margin: 80px 2px 3em 100%; }

Spec: Plugin:

CSS Values and Units Module Level 3robwierzbowski/node-pixrem

CR

Page 99: JavaScript/CSS 2015 Autumn

:any-link pseudo-class

nav :any-link > span { background-color: yellow; } /* 変換後のCSS */ nav :link > span, nav :visited > span { background-color: yellow; }

ED

Spec: Plugin:

Selectors Level 4 - The Hyperlink Pseudo-class: :any-linkjonathantneal/postcss-pseudo-class-any-link

Page 100: JavaScript/CSS 2015 Autumn

:matches pseudo-class

p:matches(:first-child, .special) { color: red; } /* 変換後のCSS */ p:first-child, p.special { color: red; }

ED

Spec: Plugin:

Selectors Level 4 - The Matches-any Pseudo-class: :matches()postcss/postcss-selector-matches

Page 101: JavaScript/CSS 2015 Autumn

:not pseudo-class

p:not(:first-child, .special) { color: red; } /* 変換後のCSS */ p:not(:first-child), p:not(.special) { color: red; }

ED

Spec: Plugin:

Selectors Level 4 - The Negation Pseudo-class: :not()postcss/postcss-selector-not

Page 102: JavaScript/CSS 2015 Autumn

pseudo-elements

a::before { color: red; } /* 変換後のCSS */ a:before { color: red; }

REC

Spec: Plugin:

Selectors Level 3axa-ch/postcss-pseudoelements

Page 103: JavaScript/CSS 2015 Autumn

Alpha colors

body { color: rgba(153, 211, 153, 0.8); } /* 変換後のCSS */ body { color: #99DD99; color: rgba(153, 211, 153, 0.8); }

REC

Spec: Plugin:

CSS Color Module Level 3postcss/postcss-color-rgba-fallback

Page 104: JavaScript/CSS 2015 Autumn

cssnextで利用するのではなく

その中から個別にプラグインを選択

Page 105: JavaScript/CSS 2015 Autumn

stylelint Modern CSS linter.

自分好みのCSS Lint設定が可能

http://stylelint.io/

Page 106: JavaScript/CSS 2015 Autumn

• Sassばかり書いていて標準仕様のこと忘れていた

• 仕様が固まっていないので追随コストがかかる

• MoOx氏が頑張りすぎなので個人的に心配

Page 107: JavaScript/CSS 2015 Autumn

Build Tools 2015

Page 108: JavaScript/CSS 2015 Autumn

JS Build Tools

Page 109: JavaScript/CSS 2015 Autumn

Grunt/Gulpで憔悴したおっさんの話npm run-scriptでまとめようぜって話

http://t32k.me/mol/log/npm-run-script/

Page 110: JavaScript/CSS 2015 Autumn

このプロジェクト…Gruntだっけ?Gulpだっけ?

Page 111: JavaScript/CSS 2015 Autumn

えーいままよ!grunt build!いっけー…!

> Fatal error: Unable to find local grunt.

Page 112: JavaScript/CSS 2015 Autumn

m9(^Д^)プギャー

Page 113: JavaScript/CSS 2015 Autumn

npm run-scripts

Page 114: JavaScript/CSS 2015 Autumn

package.json{ "name": "Maple", "version": "0.3.0", "repository": { "type": "git", "url": "git://github.com/t32k/maple.git" }, "scripts": { "start": "gulp serve", "build": "gulp build" }, "engines": { "node": ">=4.0" }, "devDependencies": {

Page 115: JavaScript/CSS 2015 Autumn

package.json

$ npm run build

GulpだろうがGruntだろうが、package.jsonに記述し、npm runコマンドさえ覚えとけば大丈夫!ひとつ抽象化することで、Buildツールの流行り廃りに対応

Page 116: JavaScript/CSS 2015 Autumn

kss-nodenode.js製のKSS(スタイルガイドジェネレーター)

https://github.com/kss-node/kss-node

Page 117: JavaScript/CSS 2015 Autumn

grunt-kss by t32k!kss-nodeのGruntプラグイン

https://github.com/t32k/grunt-kss

Page 118: JavaScript/CSS 2015 Autumn

更新止まってる…

Page 119: JavaScript/CSS 2015 Autumn

m9(^Д^)プギャー

Page 120: JavaScript/CSS 2015 Autumn

すみませんすみませんすみません

Page 121: JavaScript/CSS 2015 Autumn

gulp-ksskss-nodeのGulpプラグイン

https://github.com/philj/gulp-kss

Page 122: JavaScript/CSS 2015 Autumn

更新止まってる…

Page 123: JavaScript/CSS 2015 Autumn

package.json

{ "scripts": { "start": "gulp serve", "publish": "kss-node path/to/stylesheets" }

Page 124: JavaScript/CSS 2015 Autumn

プラグインを介さず直接コマンドを実行

Page 125: JavaScript/CSS 2015 Autumn

まとめ

Page 126: JavaScript/CSS 2015 Autumn

•ツールはプラグイン提供で細分化

•ある程度の選択眼が必要になってくる

•手あたり次第、触るしかない

•時間ない人は最新仕様でトレンドを掴む

Page 127: JavaScript/CSS 2015 Autumn

t32k/maple今回紹介したBabel/cssnextのサンプルプロジェクト

https://github.com/t32k/maple

Page 128: JavaScript/CSS 2015 Autumn

Let’s enjoy Front-end Dev!

Page 129: JavaScript/CSS 2015 Autumn

Work with us!KAIZEN

https://www.wantedly.com/companies/kaizenplatform

Page 130: JavaScript/CSS 2015 Autumn

Be a Growth Hacker!

https://kaizenplatform.com/ja/about_growth_hacker.html

Page 131: JavaScript/CSS 2015 Autumn

Thanks!http://t32k.me