Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
イマドキのコーダー環境構築2016
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sou-lab
September 24, 2016
Programming
0
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
イマドキのコーダー環境構築2016
CSS Nite LP47 Coder's High 2016
http://cssnite.jp/lp/lp47
「イマドキのコーダー環境構築」で発表したスライドです。
sou-lab
September 24, 2016
More Decks by sou-lab
See All by sou-lab
WordPressでも意識したいアクセシビリティ 〜「優しいウェブサイト」作りをはじめよう〜
sou_lab
0
1
イマドキのスライス事情
sou_lab
0
0
Sublime Textを加速するパッケージの紹介
sou_lab
0
1
Sass/Compassの導入と環境構築
sou_lab
0
1
WordPressでCSSプリプロセッサ入門
sou_lab
0
1
Other Decks in Programming
See All in Programming
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.1k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
ActionController meets Protocol Buffers
sorah
0
530
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
210
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
900
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
410
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
360
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.5k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
A Tale of Four Properties
chriscoyier
163
24k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
WCS-LA-2024
lcolladotor
0
890
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Believing is Seeing
oripsolob
1
240
Writing Fast Ruby
sferik
630
63k
Prompt Engineering for Job Search
mfonobong
0
520
Transcript
None
イマドキのコーダー環境構築 2 016 CSS Nite LP 47 Coder's High 2016
2016.09.24
Sou-Lab. 森田 壮 @sou_lab Gaji-Labo Inc. Sublime Text 3!!
今回のテーマ 「4年前の自分に届けたい。 イマドキのコーディングは こうなっているんです」
None
から、ちょっと先の
2年半前の私
2014.2.15 CSS Nite LP, Disk 32「Sass」
時代は変わった
Rubyが必要でもなくなった
node-sass https://github.com/sass/node-sass
$ compass w これだけおぼえておけばオケ
もう、オケではない
Compassの終焉
Compass • CSSスプライト • ベンダープリフィックス • 便利Mixin • 便利関数
Compassの終焉 • CSSスプライト あまり使わなくなってきた • ベンダープリフィックス Autoprefixer • 便利Mixin 依存が強い
• 便利関数 依存が強い • 更新が2014年8月からない • Ruby環境依存
Compassの終焉 • CSSスプライト あまり使わなくなってきた • ベンダープリフィックス Autoprefixer • 便利Mixin 依存が強い
Compassやめたい... • 便利関数 依存が強い • 更新が2014年8月からない • Ruby環境依存
一方、Sassは…
CSSプリプロセッサの デファクトスタンダードに
The State of Front-End Tooling ‒ 2015 https://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 The State of Front-End Tooling ‒ 2015 https://ashleynolan.co.uk/blog/frontend-tooling-survey-2015-results
CSSプリプロセッサの デファクトスタンダードに
Sassをコンパイル する方法も変わってきた
sassコマンドは使わなくなった $ sass . --watch --style expanded Sass単体で使うことがあまりなくなった (単体で満足しないという意味で)
GUIコンパイラは死屍累々 フリーのコンパイラは、ほぼ更新されていない。
まだ使える!GUIコンパイラ2選! 有償のコンパイラはメンテナンスされているが、 更新頻度は少なめ。
その理由として
タスクランナー でよくね?
タスクランナー
タスクランナー
Grunt からgulp へ
Grunt からgulpへ • ストリーミングで高速 • 設定ファイルが見やすく書きやすい • Google Web Starter
Kitで採用 • Gruntの開発が止まっていた
そして、2016年
アジェンダ 1. Sass 2. PostCSS 3. gulp.js 4. Node.js
アジェンダ 1. Sass 2. PostCSS 3. gulp.js 4. Node.js
Sass: Syntactically Awesome Style Sheets http://sass-lang.com/
Sassの機能 • セレクタのネスト • 変数 • 四則演算 • 関数 •
Mixin、 Extend • ループ、条件分岐 • パーシャル etc...
Web制作者のためのSassの教科書 https://www.amazon.co.jp/dp/B00FMLD7UC/
現場で役立つ実践Sass | Adobe Creative Station https://blogs.adobe.com/creativestation/serialization/web-sass-practice
Dreamweaverでも正式対応 2016年09月現在はベータ3が公開
Dreamweaverで覚える最新Web開発ワークフロー: Sass編 https://blogs.adobe.com/creativestation/web-dreamweaver-sass-compile-and-options
CSS設計にも欠かせない
SMACSS https://smacss.com/
FLOCSS https://github.com/hiloki/flocss
rscss http://rscss.io/
ECSS http://ecss.io/
BEMりやすい記法
BEM http://bem.info/
MindBEMding ‒ getting your head ’round BEM syntax http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-
「&」を使ったセレクタ記法 SCSS .block { display: block; &_ _element { display:
inline-block; &--modifier { background-color: #f00; } } } CSS .block { display: block; } .block__element { display: inline-block; } .block__element--modifier { background-color: #f00; }
ブロック(モジュール)ごとのファイル分割
LibSass
Ruby SassとLibSass Ruby製 Rubyのみで動作 C/C++製 様々な言語に対応
node-sass https://github.com/sass/node-sass
Sass 3.5 Release Candidates http://blog.sass-lang.com/posts/809572-sass-35-release
PostCSS Benchmarks https://github.com/postcss/benchmark#preprocessors
PostCSS Benchmarks https://github.com/postcss/benchmark#preprocessors
アジェンダ 1. Sass 2. PostCSS 3. gulp.js 4. Node.js
PostCSS - a tool for transforming CSS with JavaScript http://postcss.org/
PostCSSって…? • Sassの次? • CSSプリプロセッサ? • CSSポストプロセッサ? • 次世代CSSが使えるもの?
どれも正解 (ある意味)
SassとPostCSSの基本機能比較 セレクタのネスト 変数 • 四則演算 • 関数 • Mixin、 Extend
• ループ、条件分岐 • パーシャル etc... • •
Sassに近い機能をPostCSSに セレクタのネスト nested • 変数 simple-vars calc • 四則演算 color-function等
• 関数 • Mixin、 Extend sassy-mixins、extend for、conditionals • ループ、条件分岐 each、 • パーシャル partial-import • PostCSSプラグイン
PostCSSプラグイン セレクタのネスト • 変数 • 四則演算 • 関数 • Mixin、
Extend • ループ、条件分岐 • パーシャル • 一行コメント • 画像サイズ取得 • 独自プロパティ • • 自動ベンダープリフィックス • プロパティの並びかえ • クラス名にハッシュ付与 • メディアクエリをまとめる • flexboxバグ修正 • フォールバック • コードチェック • 画像インライン変換 • 出力コード整形 • minify (圧縮) CSSに関わる全ての処理を行うので、 プリ/ポストプロセッサーという概念はない
PostCSSは拡張してなんぼ
お好みのPostCSSレシピを
PostCSS.parts | A searchable catalog of PostCSS plugin http://postcss.parts/
PreCSS https://github.com/jonathantneal/precss
cssnext - Use tomorrow's CSS syntax, today. http://cssnext.io/
PostCSS Japanese Stylesheets https://github.com/ikkou/postcss-japanese-stylesheets
PostCSSの処理 お好みのプラグインを組み合わせてCSSをコンパイル
Sassから乗りかえ?
Sassでも使える SCSSのみ対応 SassをSassにコンパイル SassをCSSにコンパイルすることはできない
ポストプロセッサ的な使用法 SassでCSSにコンパイルしてから、 PostCSSでCSSをさらにコンパイル
Sassの前後でPostCSS SassをSassにPostCSSしてから、SassでCSSに コンパイルして、PostCSSでさらにコンパイル
で、どうやって コンパイルするの?
アジェンダ 1. Sass 2. PostCSS 3. gulp.js 4. Node.js
gulp.js - the streaming build system http://gulpjs.com/
None
• • • • • • • • • •
• 各種言語コンパイル • CSSスプライト 構文チェック • SVG圧縮 監視(ウォッチ) • 画像最適化(圧縮) ローカルサーバー • スタイルガイド ファイル結合 • アップロード ファイル/フォルダ削除 • 通知 バリデート • SVGスプライト コード変換/置換 • フォント作成 ライブリロード • 画像リサイズ ファイル名変更 • ファイル圧縮 ファイル分割 • スクリーンショット
gulpの使い方
設定は JavaScript で
gulpfile.js
gulpfileの書き方 gulpfile.js var gulp = require('gulp'); パッケージの読み込み gulp.task('default', function() {
タスク名 // place code for your default task here }); 処理を書く
gulpfileの書き方 gulpfile.js var 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でつなぐ タスク名
gulpfileの書き方 gulpfile.js var 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')); });
gulpfileの書き方 gulpfile.coffee gulp = 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'))
gulpfileの書き方 gulpfile.babel.js import 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')); });
大切なことはすべてREADME.md が教えてくれた gulp-sass https://github.com/dlmanning/gulp-sass
大切なことはすべてREADME.md が教えてくれた gulp-postcss https://github.com/postcss/gulp-postcss
実行は黒い画面で
gulpの実行 $ gulp defaultタスクは gulpコマンドのみで動作する
gulpの実行 $ gulp sass それ以外のタスクは gulpコマンド + タスク名
gulpコマンドの インストールが必要
大切なことはすべてREADME.md が教えてくれた gulp - Getting Started https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md
大切なことはすべてREADME.md が教えてくれた $ npm install --global gulp-cli gulp - Getting
Started https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md
npmでインストール
npm?
アジェンダ 1. Sass 2. PostCSS 3. gulp,js 4. Node.js
npmを使うには、 Node.jsをインストール
Node.js https://nodejs.org/
Node.js https://nodejs.org/
None
nodeのバージョン大混在 node v4.5.0 node v6.6.0 node v7.0.0 Project A Project
B Project C
nodeのバージョン大混在 node v4.5.0 node v6.6.0 node v7.0.0 Project A Project
B Project C 古くて動かないかも? 新しくて動かないかも? node v6.6.0
🙅🙅 Node.js https://nodejs.org/
Node.jsの バージョン管理をしよう
anyenv + ndenv https://github.com/riywo/anyenv + https://github.com/riywo/ndenv
nodist https://github.com/marcelklehr/nodist
nodeのバージョンを切り替えられる node v4.5.0 v4.5.0 Project A .node-version node v4.5.0 node
v6.6.0 v6.6.0 Project B .node-version node v7.0.0 v7.0.0 Project C .node-version
nodeのバージョンを切り替えられる node v4.5.0 v4.5.0 Project A .node-version node v6.6.0 v6.6.0
Project B .node-version node v6.6.0 node v7.0.0 v7.0.0 Project C .node-version
nodeのバージョンを切り替えられる node v4.5.0 v4.5.0 Project A .node-version node v6.6.0 v6.6.0
Project B .node-version node v7.0.0 v7.0.0 Project C .node-version node v7.0.0
(Node Package Manager)
npm https://www.npmjs.com/
すべて、npmパッケージ • node-sass • postcss本体 • postcssプラグイン • gulp本体 •
gulpプラグイン
npm パッケージの インストール
$ npm install --global gulp-cli gulp - Getting Started https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md
パッケージのグローバルインストール $ npm install --global gulp-cli --global オプションはグローバルにインストール どのディレクトリでも使えるコマンドになる
パッケージのグローバルインストール $ npm install --global gulp-cli node v6.6.0 gulp-cli node_modules
ローカルインストール node v4.5.0 node v6.6.0 node v7.0.0 Project A Project
B Project C node_modules node_modules node_modules 「node_modules」フォルダに、 それぞれにnpmパッケージをインストールする
パッケージのローカルインストール $ npm install --save-dev gulp --save-dev オプションでpackage.json にインストールしたパッケージが書き込まれる
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オプションでインストールした パッケージが自動で書き込まれる
package.json
npmの設定ファイル
ローカルパッケージ node v4.5.0 node v6.6.0 node v7.0.0 Project A Project
B Project C node_modules package.json node_modules package.json node_modules package.json プロジェクトごとにpackage.jsonを作成 パッケージやスクリプトなどを管理する
package.jsonを作成 $ npm init -y 雛形のpackage.jsonを作成
パッケージのローカルインストール $ npm install --save-dev gulp --save-dev オプションでpackage.json にインストールしたパッケージが書き込まれる
パッケージのローカルインストール $ npm i -D gulp installは i 、--save-devは -D
と省略できる
パッケージのローカルインストール $ npm i -D gulp gulp-sass gulp-postcss パッケージは複数まとめてインストールもできる package.jsonにもまとめて書き込まれる
パッケージのバージョンを固定する $ npm shrinkwrap npm-shrinkwrap.jsonというファイルが 生成されパッケージのバージョンが固定される
npm-script package.json { } "scripts": { "start": "gulp" } node_module内のコマンドを実行できる
ここではgulpコマンドを指定
npm-script $ npm start npm-scriptに設定したコマンド(今回はgulp) を実行できる この方法だとグローバルの gulp-cliは不要
つまり
package.jsonを渡せば 同じ環境が作れる
他の設定ファイルも 全部共有しよう
環境を作る流れ 1. .node-version でバージョン指定 2. $ npm init -y でプロジェクト作成
3. $ npm install --save-dev ◯◯ でパッケージインストール 4. gulpfile.js でタスクを書く 5. README.md で説明を書く 6. .gitignoreで「node_nodules」を無視
渡す設定ファイル • .node-version • package.json • (npm-shrinkwrap.json) • gulpfile.js •
.gitignore
設定ファイルを受け取る側
npmパッケージのインストール $ npm install package.jsonに書かれている パッケージがローカルインストールされる
これだけ!
環境を受け取ったイマドキのコーダー 1. リポジトリからクローン 2. $ npm install 3. $ gulp
or $ npm start 4. ッターーン! 5. プルリク 6. LGTM!! 繰り返す
サンプルファイル https://github.com/sou-lab/cssnite-lp47
まとめ
イマドキのコーダー環境 1. ndenv or 2. Sass 3. PostCSS 4. gulp
5. 黒い画面 nodist
コーダーは怠惰であれ
環境でとことんラクしよう!