イマドキのコーダー環境構築2016

146

Upload: sou-lab

Post on 07-Jan-2017

21.083 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: イマドキのコーダー環境構築2016
Page 2: イマドキのコーダー環境構築2016

イマドキのコーダー環境構築 2016

CSS Nite LP 47 Coder's High 2016 2016.09.24

Page 3: イマドキのコーダー環境構築2016

Sublime Text 3!!

森田 壮 @sou_lab

Gaji-Labo Inc.

Sou-Lab.

Page 4: イマドキのコーダー環境構築2016

「4年前の自分に届けたい。 イマドキのコーディングは こうなっているんです」

今回のテーマ

Page 5: イマドキのコーダー環境構築2016
Page 6: イマドキのコーダー環境構築2016

から、ちょっと先の

Page 7: イマドキのコーダー環境構築2016

2年半前の私

Page 8: イマドキのコーダー環境構築2016

2014.2.15 CSS Nite LP, Disk 32「Sass」

Page 9: イマドキのコーダー環境構築2016

時代は変わった

Page 10: イマドキのコーダー環境構築2016

Rubyが必要でもなくなった

Page 11: イマドキのコーダー環境構築2016

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

Page 12: イマドキのコーダー環境構築2016

$ compass w これだけおぼえておけばオケ

Page 13: イマドキのコーダー環境構築2016

もう、オケではない

Page 14: イマドキのコーダー環境構築2016

Compassの終焉

Page 15: イマドキのコーダー環境構築2016

• CSSスプライト • ベンダープリフィックス • 便利Mixin • 便利関数

Compass

Page 16: イマドキのコーダー環境構築2016

• CSSスプライト あまり使わなくなってきた • ベンダープリフィックス Autoprefixer • 便利Mixin 依存が強い • 便利関数 依存が強い • 更新が2014年8月からない • Ruby環境依存

Compassの終焉

Page 17: イマドキのコーダー環境構築2016

• CSSスプライト あまり使わなくなってきた • ベンダープリフィックス Autoprefixer • 便利Mixin 依存が強い • 便利関数 依存が強い • 更新が2014年8月からない • Ruby環境依存

Compassの終焉

Compassやめたい...

Page 18: イマドキのコーダー環境構築2016

一方、Sassは…

Page 19: イマドキのコーダー環境構築2016

CSSプリプロセッサのデファクトスタンダードに

Page 20: イマドキのコーダー環境構築2016

The State of Front-End Tooling ‒ 2015https://ashleynolan.co.uk/blog/frontend-tooling-survey-2015-results

Page 21: イマドキのコーダー環境構築2016

The State of Front-End Tooling ‒ 2015https://ashleynolan.co.uk/blog/frontend-tooling-survey-2015-results

Preprocessor Number of Votes Percentage

Sass 1297 63.95%

Less 308 15.19%

Stylus 76 3.75%

No Preprocessor 305 15.04%

Other 42 2.07%

• Update 12/10/2015 • 2028 responses

Page 22: イマドキのコーダー環境構築2016

CSSプリプロセッサのデファクトスタンダードに

Page 23: イマドキのコーダー環境構築2016

Sassをコンパイル する方法も変わってきた

Page 24: イマドキのコーダー環境構築2016

Sass単体で使うことがあまりなくなった(単体で満足しないという意味で)

$ sass . --watch --style expanded

sassコマンドは使わなくなった

Page 25: イマドキのコーダー環境構築2016

フリーのコンパイラは、ほぼ更新されていない。

GUIコンパイラは死屍累々

Page 26: イマドキのコーダー環境構築2016

有償のコンパイラはメンテナンスされているが、 更新頻度は少なめ。

まだ使える!GUIコンパイラ2選!

Page 27: イマドキのコーダー環境構築2016

その理由として

Page 28: イマドキのコーダー環境構築2016

タスクランナー でよくね?

Page 29: イマドキのコーダー環境構築2016

タスクランナー

Page 30: イマドキのコーダー環境構築2016

タスクランナー

Page 31: イマドキのコーダー環境構築2016

Grunt からgulpへ

Page 32: イマドキのコーダー環境構築2016

• ストリーミングで高速 • 設定ファイルが見やすく書きやすい • Google Web Starter Kitで採用 • Gruntの開発が止まっていた

Gruntからgulpへ

Page 33: イマドキのコーダー環境構築2016

そして、2016年

Page 34: イマドキのコーダー環境構築2016

アジェンダ1. Sass

2. PostCSS 3. gulp.js 4. Node.js

Page 35: イマドキのコーダー環境構築2016

1. Sass

2. PostCSS 3. gulp.js 4. Node.js

アジェンダ

Page 36: イマドキのコーダー環境構築2016

Sass: Syntactically Awesome Style Sheetshttp://sass-lang.com/

Page 37: イマドキのコーダー環境構築2016

Sassの機能• セレクタのネスト • 変数 • 四則演算 • 関数 • Mixin、Extend • ループ、条件分岐 • パーシャルetc...

Page 38: イマドキのコーダー環境構築2016

Web制作者のためのSassの教科書https://www.amazon.co.jp/dp/B00FMLD7UC/

Page 39: イマドキのコーダー環境構築2016

現場で役立つ実践Sass | Adobe Creative Station https://blogs.adobe.com/creativestation/serialization/web-sass-practice

Page 40: イマドキのコーダー環境構築2016

Dreamweaverでも正式対応

2016年09月現在はベータ3が公開

Page 41: イマドキのコーダー環境構築2016

Dreamweaverで覚える最新Web開発ワークフロー: Sass編https://blogs.adobe.com/creativestation/web-dreamweaver-sass-compile-and-options

Page 42: イマドキのコーダー環境構築2016

CSS設計にも欠かせない

Page 43: イマドキのコーダー環境構築2016

SMACSShttps://smacss.com/

Page 44: イマドキのコーダー環境構築2016

FLOCSShttps://github.com/hiloki/flocss

Page 45: イマドキのコーダー環境構築2016

rscsshttp://rscss.io/

Page 46: イマドキのコーダー環境構築2016

ECSShttp://ecss.io/

Page 47: イマドキのコーダー環境構築2016

BEMりやすい記法

Page 48: イマドキのコーダー環境構築2016

BEMhttp://bem.info/

Page 49: イマドキのコーダー環境構築2016

MindBEMding ‒ getting your head ’round BEM syntaxhttp://csswizardry.com/2013/01/mindbemding-getting-your-head-round-

Page 50: イマドキのコーダー環境構築2016

「&」を使ったセレクタ記法CSS.block { display: block; } .block__element { display: inline-block; } .block__element--modifier { background-color: #f00; }

SCSS.block { display: block; &__element { display: inline-block; &--modifier { background-color: #f00; } } }

Page 51: イマドキのコーダー環境構築2016

ブロック(モジュール)ごとのファイル分割

Page 52: イマドキのコーダー環境構築2016

LibSass

Page 53: イマドキのコーダー環境構築2016

Ruby SassとLibSass

Ruby製 Rubyのみで動作

C/C++製 様々な言語に対応

Page 54: イマドキのコーダー環境構築2016

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

Page 55: イマドキのコーダー環境構築2016

Sass 3.5 Release Candidates http://blog.sass-lang.com/posts/809572-sass-35-release

Page 56: イマドキのコーダー環境構築2016

PostCSS Benchmarkshttps://github.com/postcss/benchmark#preprocessors

Page 57: イマドキのコーダー環境構築2016

PostCSS Benchmarkshttps://github.com/postcss/benchmark#preprocessors

Page 58: イマドキのコーダー環境構築2016

アジェンダ1. Sass

2. PostCSS 3. gulp.js 4. Node.js

Page 59: イマドキのコーダー環境構築2016

PostCSS - a tool for transforming CSS with JavaScripthttp://postcss.org/

Page 60: イマドキのコーダー環境構築2016

PostCSSって…?• 次世代のSass? • CSSプリプロセッサ? • CSSポストプロセッサ? • CSS4が使えるもの?

Page 61: イマドキのコーダー環境構築2016

どれも正解

Page 62: イマドキのコーダー環境構築2016

SassとPostCSSの基本機能比較

• セレクタのネスト • 変数 • 四則演算 • 関数 • Mixin、Extend • ループ、条件分岐 • パーシャル etc...

Page 63: イマドキのコーダー環境構築2016

Sassに近い機能をPostCSSに

nested simple-vars calc color-function等 sassy-mixins、extend each、for、conditionals partial-import

PostCSSプラグイン

• セレクタのネスト • 変数 • 四則演算 • 関数 • Mixin、Extend • ループ、条件分岐 • パーシャル

Page 64: イマドキのコーダー環境構築2016

PostCSSプラグイン

CSSに関わる全ての処理を行うので、プリ/ポストプロセッサーという概念はない

• セレクタのネスト • 変数 • 四則演算 • 関数 • Mixin、Extend • ループ、条件分岐 • パーシャル• 一行コメント • 画像サイズ取得 • 独自プロパティ

• 自動ベンダープリフィックス • プロパティの並びかえ • クラス名にハッシュ付与 • メディアクエリをまとめる • flexboxバグ修正 • フォールバック • コードチェック • 画像インライン変換 • 出力コード整形 • minify(圧縮)

Page 65: イマドキのコーダー環境構築2016

PostCSSは拡張してなんぼ

Page 66: イマドキのコーダー環境構築2016

お好みのPostCSSレシピを

Page 67: イマドキのコーダー環境構築2016

PostCSS.parts | A searchable catalog of PostCSS pluginhttp://postcss.parts/

Page 68: イマドキのコーダー環境構築2016

PreCSShttps://github.com/jonathantneal/precss

Page 69: イマドキのコーダー環境構築2016

cssnext - Use tomorrow's CSS syntax, today.http://cssnext.io/

Page 70: イマドキのコーダー環境構築2016

PostCSS Japanese Stylesheetshttps://github.com/ikkou/postcss-japanese-stylesheets

Page 71: イマドキのコーダー環境構築2016

PostCSSの処理

お好みのプラグインを組み合わせてCSSをコンパイル

Page 72: イマドキのコーダー環境構築2016

Sassから乗りかえ?

Page 73: イマドキのコーダー環境構築2016

Sassでも使える

SCSSのみ対応

SassをSassにコンパイル SassをCSSにコンパイルすることはできない

Page 74: イマドキのコーダー環境構築2016

ポストプロセッサ的な使用法

SassでCSSにコンパイルしてから、PostCSSでCSSをさらにコンパイル

Page 75: イマドキのコーダー環境構築2016

Sassの前後でPostCSS

SassをSassにPostCSSしてから、SassでCSSにコンパイルして、PostCSSでさらにコンパイル

Page 76: イマドキのコーダー環境構築2016

で、どうやって コンパイルするの?

Page 77: イマドキのコーダー環境構築2016

1. Sass

2. PostCSS 3. gulp.js 4. Node.js

アジェンダ

Page 78: イマドキのコーダー環境構築2016

gulp.js - the streaming build system http://gulpjs.com/

Page 79: イマドキのコーダー環境構築2016
Page 80: イマドキのコーダー環境構築2016

• CSSスプライト • SVGスプライト • SVG圧縮 • フォント作成 • 画像最適化(圧縮) • 画像リサイズ • スタイルガイド • ファイル圧縮 • アップロード • スクリーンショット • 通知

• 各種言語コンパイル • バリデート • 構文チェック • コード変換/置換 • 監視(ウォッチ) • ライブリロード • ローカルサーバー • ファイル名変更 • ファイル結合 • ファイル分割 • ファイル/フォルダ削除

Page 81: イマドキのコーダー環境構築2016

gulpの使い方

Page 82: イマドキのコーダー環境構築2016

設定はJavaScriptで

Page 83: イマドキのコーダー環境構築2016

gulpfile.js

Page 84: イマドキのコーダー環境構築2016

gulpfileの書き方gulpfile.jsvar gulp = require('gulp');

gulp.task('default', function() {

// place code for your default task here

});

タスク名

処理を書く

パッケージの読み込み

Page 85: イマドキのコーダー環境構築2016

gulpfileの書き方gulpfile.jsvar gulp = require('gulp'); var sass = require('gulp-sass'); var sourcemaps = require('gulp-sourcemaps');

gulp.task('sass', function () { return gulp.src('./sass/**/*.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(sourcemaps.write()) .pipe(gulp.dest('./css')); });

タスク名

処理を書く .pipeでつなぐ

パッケージの読み込み

Page 86: イマドキのコーダー環境構築2016

gulpfileの書き方gulpfile.jsvar gulp = require('gulp'); var sass = require('gulp-sass'); var sourcemaps = require('gulp-sourcemaps');

gulp.task('sass', function () { return gulp.src('./sass/**/*.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(sourcemaps.write()) .pipe(gulp.dest('./css')); });

Page 87: イマドキのコーダー環境構築2016

gulpfileの書き方gulpfile.coffeegulp = require('gulp') sass = require('gulp-sass') sourcemaps = require('gulp-sourcemaps')

gulp.task 'sass', -> gulp.src('./sass/**/*.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(sourcemaps.write()) .pipe(gulp.dest('./css'))

Page 88: イマドキのコーダー環境構築2016

gulpfileの書き方gulpfile.babel.jsimport gulp from 'gulp'; import sass from 'gulp-sass'; import sourcemaps from 'gulp-sourcemaps';

gulp.task('sass', () => { return gulp.src('./sass/**/*.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(sourcemaps.write()) .pipe(gulp.dest('./css')); });

Page 89: イマドキのコーダー環境構築2016

大切なことはすべてREADME.mdが教えてくれた

gulp-sass https://github.com/dlmanning/gulp-sass

Page 90: イマドキのコーダー環境構築2016

大切なことはすべてREADME.mdが教えてくれた

gulp-postcss https://github.com/postcss/gulp-postcss

Page 91: イマドキのコーダー環境構築2016

実行は黒い画面で

Page 92: イマドキのコーダー環境構築2016

$ gulp

defaultタスクはgulpコマンドのみで動作する

gulpの実行

Page 93: イマドキのコーダー環境構築2016

$ gulp sass

それ以外のタスクはgulpコマンド + タスク名

gulpの実行

Page 94: イマドキのコーダー環境構築2016

gulpコマンドの インストールが必要

Page 95: イマドキのコーダー環境構築2016

gulp - Getting Started https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md

大切なことはすべてREADME.mdが教えてくれた

Page 96: イマドキのコーダー環境構築2016

gulp - Getting Started https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md

大切なことはすべてREADME.mdが教えてくれた

$ npm install --global gulp-cli

Page 97: イマドキのコーダー環境構築2016

npmでインストール

Page 98: イマドキのコーダー環境構築2016

npm?

Page 99: イマドキのコーダー環境構築2016

1. Sass

2. PostCSS 3. gulp,js 4. Node.js

アジェンダ

Page 100: イマドキのコーダー環境構築2016

npmを使うには、 Node.jsをインストール

Page 101: イマドキのコーダー環境構築2016

Node.js https://nodejs.org/

Page 102: イマドキのコーダー環境構築2016

Node.js https://nodejs.org/

Page 103: イマドキのコーダー環境構築2016
Page 104: イマドキのコーダー環境構築2016

Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

nodeのバージョン大混在

Page 105: イマドキのコーダー環境構築2016

Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

nodeのバージョン大混在

node v6.6.0

古くて動かないかも? 新しくて動かないかも?

Page 106: イマドキのコーダー環境構築2016

Node.js https://nodejs.org/

🙅🙅

Page 107: イマドキのコーダー環境構築2016

Node.jsの バージョン管理をしよう

Page 108: イマドキのコーダー環境構築2016

anyenv + ndenv https://github.com/riywo/anyenv + https://github.com/riywo/ndenv

Page 109: イマドキのコーダー環境構築2016

nodist https://github.com/marcelklehr/nodist

Page 110: イマドキのコーダー環境構築2016

node v4.5.0

.node-version

v7.0.0

.node-version

v6.6.0Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

nodeのバージョンを切り替えられる

.node-version

v4.5.0

Page 111: イマドキのコーダー環境構築2016

node v6.6.0

.node-version

v7.0.0

.node-version

v6.6.0Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

nodeのバージョンを切り替えられる

.node-version

v4.5.0

Page 112: イマドキのコーダー環境構築2016

node v7.0.0

.node-version

v7.0.0

.node-version

v6.6.0Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

nodeのバージョンを切り替えられる

.node-version

v4.5.0

Page 113: イマドキのコーダー環境構築2016

(Node Package Manager)

Page 114: イマドキのコーダー環境構築2016

npm https://www.npmjs.com/

Page 115: イマドキのコーダー環境構築2016

すべて、npmパッケージ• node-sass • postcss本体 • postcssプラグイン • gulp本体 • gulpプラグイン

Page 116: イマドキのコーダー環境構築2016

npm パッケージの インストール

Page 117: イマドキのコーダー環境構築2016

gulp - Getting Started https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md

$ npm install --global gulp-cli

Page 118: イマドキのコーダー環境構築2016

--global オプションはグローバルにインストール どのディレクトリでも使えるコマンドになる

$ npm install --global gulp-cli

パッケージのグローバルインストール

Page 119: イマドキのコーダー環境構築2016

$ npm install --global gulp-cli

パッケージのグローバルインストール

node_modules

node v6.6.0 gulp-cli

Page 120: イマドキのコーダー環境構築2016

node_modulesnode_modulesnode_modules

Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

ローカルインストール

「node_modules」フォルダに、 それぞれにnpmパッケージをインストールする

Page 121: イマドキのコーダー環境構築2016

--save-dev オプションでpackage.jsonにインストールしたパッケージが書き込まれる

$ npm install --save-dev gulp

パッケージのローカルインストール

Page 122: イマドキのコーダー環境構築2016

package.jsonに書き込まれるpackage.json{ "devDependencies": { "gulp": "^3.9.1", "gulp-postcss": "^6.2.0", "gulp-sass": "^2.3.2", "gulp-sourcemaps": "^1.6.0" } }

--save-devオプションでインストールした パッケージが自動で書き込まれる

Page 123: イマドキのコーダー環境構築2016

package.json

Page 124: イマドキのコーダー環境構築2016

npmの設定ファイル

Page 125: イマドキのコーダー環境構築2016

node_modulesnode_modulesnode_modules

Project B

node v6.6.0

Project A

node v4.5.0

Project C

node v7.0.0

ローカルパッケージ

プロジェクトごとにpackage.jsonを作成 パッケージやスクリプトなどを管理する

package.json package.json package.json

Page 126: イマドキのコーダー環境構築2016

雛形のpackage.jsonを作成

$ npm init -y

package.jsonを作成

Page 127: イマドキのコーダー環境構築2016

--save-dev オプションでpackage.jsonにインストールしたパッケージが書き込まれる

$ npm install --save-dev gulp

パッケージのローカルインストール

Page 128: イマドキのコーダー環境構築2016

installは i 、 --save-devは -D と省略できる

$ npm i -D gulp

パッケージのローカルインストール

Page 129: イマドキのコーダー環境構築2016

パッケージは複数まとめてインストールもできる package.jsonにもまとめて書き込まれる

$ npm i -D gulp gulp-sass gulp-postcss

パッケージのローカルインストール

Page 130: イマドキのコーダー環境構築2016

npm-shrinkwrap.jsonというファイルが 生成されパッケージのバージョンが固定される

$ npm shrinkwrap

パッケージのバージョンを固定する

Page 131: イマドキのコーダー環境構築2016

npm-scriptpackage.json

{ "scripts": { "start": "gulp" } }

node_module内のコマンドを実行できる ここではgulpコマンドを指定

Page 132: イマドキのコーダー環境構築2016

npm-scriptに設定したコマンド(今回はgulp) を実行できる この方法だとグローバルのgulp-cliは不要

$ npm start

npm-script

Page 133: イマドキのコーダー環境構築2016

つまり

Page 134: イマドキのコーダー環境構築2016

package.jsonを渡せば 同じ環境が作れる

Page 135: イマドキのコーダー環境構築2016

他の設定ファイルも 全部共有しよう

Page 136: イマドキのコーダー環境構築2016

環境を作る流れ1. .node-version でバージョン指定 2. $ npm init -y でプロジェクト作成 3. $ npm install --save-dev ◯◯

でパッケージインストール 4. gulpfile.js でタスクを書く 5. README.md で説明を書く 6. .gitignoreで「node_nodules」を無視

Page 137: イマドキのコーダー環境構築2016

渡す設定ファイル• .node-version • package.json • (npm-shrinkwrap.json) • gulpfile.js • .gitignore

Page 138: イマドキのコーダー環境構築2016

設定ファイルを受け取る側

Page 139: イマドキのコーダー環境構築2016

package.jsonに書かれている パッケージがローカルインストールされる

$ npm install

npmパッケージのインストール

Page 140: イマドキのコーダー環境構築2016

これだけ!

Page 141: イマドキのコーダー環境構築2016

1. リポジトリからクローン 2. $ npm install 3. $ gulp or $ npm start 4. ッターーン! 5. プルリク 6. LGTM!!

繰り返す

環境を受け取ったイマドキのコーダー

Page 142: イマドキのコーダー環境構築2016

サンプルファイルhttps://github.com/sou-lab/cssnite-lp47

Page 143: イマドキのコーダー環境構築2016

まとめ

Page 144: イマドキのコーダー環境構築2016

1.  ndenv or  nodist 2. Sass 3. PostCSS 4. gulp 5. 黒い画面

イマドキのコーダー環境

Page 145: イマドキのコーダー環境構築2016

コーダーは怠惰であれ

Page 146: イマドキのコーダー環境構築2016

環境でとことんラクしよう!