- 最近のフロントエンド開発の第一歩をめちゃくちゃ雑に紹介します (2017/10 現在)
- 目標は 「へぇ~こういうのもあるんだ~」
- フロントエンドの開発環境は,毎年のように移り変わっていくので,このスライドも 2018/10 にはほぼ使いものにならないでしょう(泣
- Visual Studio Code
- Node.js
- Yarn
最新版をインストールしておきましょう あとブラウザはChrome使います
- このスライドは Marp というMarkdownから スライドを生成するツールで作成しました
- 今回,最終的にできるファイルはここ⬇ https://github.com/pvcresin/testMarp
- Visual Studio Code
- Node.js
- npm / Yarn
- live reload
- Pug
- PostCSS
- JavaScript (es6)
- webpack + Babel
- Sublime Text
- 「恋に落ちるエディタ」として名高い
- 有料だが,無料でもフル機能を使える
- Atom (by Github)
- 拡張が多く公開されている
- Electron製(JSでデスクトップアプリ作る君)
- Brackets(by Adobe)
- ライブプレビューが標準搭載でElectron製
- Microsoftが作ったWeb開発に特価したエディタ
- OSSで無料
- Win / Mac / Linux 対応
- Git連携機能やターミナルが標準搭載
- Electron製
Ctrl + @
でターミナルが開き,コマンドが使える!
自分の場合: Sublime ➜ Atom ➜ VSCode Bracketsは使ったこと無い
- サーバサイドで動くJavaScript
- Chrome に搭載されている V8 エンジンで動作
- フロントエンド開発に無くてはならない
- 偶数バージョンが長期サポート(LTS)になる
node -v
で動くか確認
- Node の Package の Manager 的なやつ
- 要はライブラリなどを入れるためのツール
- Node入れたら,だいたいデフォルトで入ってる
- YarnというFacebookが作った上位互換に押されつつある(適当)
- npmより速い(ときもある)
npm -v
で動くか確認
npm init
でpackage.json
(大事なやつ)を作成npm init -y
でとりあえず空のを作ることも可
npm run xxx
でpackage.json
のscripts
に定義した コマンドを起動可能( = npm script ){ "name": "testMarp", "version": "1.0.0", "main": "index.js", "license": "MIT", "scripts": { "test": "echo hello" } }
npm install --save xxx
=npm i -S xxx
package.json
のdependencies
に依存しているモジュールを追記し,node_modules
にダウンロード
npm install --dev xxx
=npm i -D xxx
- 上の
devDependencies
バージョン
- 上の
npm install
=npm i
package.json
の依存モジュールを一気に入れる- 例:
git clone
してきたNodeのプロジェクトなど
Yarnの使い方
yarn init
=npm init
yarn
=yarn install
=npm i
yarn add
=npm i -S xxx
yarn add -D xxx
=npm i -D xxx
yarn xxx
=yarn run xxx
=npm run xxx
yarn -v
で動くか確認
package.json
の依存モジュールを写しyarn
する
"devDependencies": {
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-es2015": "^6.24.1",
"live-server": "^1.2.0",
"npm-run-all": "^4.1.1",
"postcss-cli": "^4.1.1",
"postcss-cssnext": "^3.0.2",
"postcss-simple-vars": "^4.1.0",
"pug-cli": "^1.0.0-alpha6",
"webpack": "^3.7.1"
}
- ファイルを変更して保存したら,ブラウザを自動でリロードする技術
- これを実現する色々なパッケージが存在
live-server
,browser-sync
など
- ブラウザをリロードせずに変更した要素だけを入れ替える
Hot Module Replacement
という技術もある- が今回は難しいので割愛
live-serverを使ってみる
dist
フォルダを作成し,その中にindex.html
を作成scripts
に"watch:browser": "live-server dist --browser=chrome --watch=/"
を追加yarn watch:browser
したら,dist/index.html
を編集して保存するとブラウザがリロードする
Pug(旧Jade)
- HTMLを楽に書くための定番プリプロセッサ
- インデントで記述
doctype html html(lang="ja") head meta(charset="UTF-8") title Pug body h1 Hello
- HTML2Jadeってサイトが便利
pug-cliを使ってみる
pug-cli
を使用src/pug/index.pug
を作成scripts
はこんなの"build:pug": "pug src/pug/index.pug -o dist/ -P", "watch:pug": "npm run build:pug -- -w",
yarn build:pug
で1度だけビルドyarn watch:pug
でファイルの変更を監視(watch
)src/pug/index.pug
の更新する度に,dist/index.html
に出力
npm-run-allを使って並列化
- npm scriptを複数指定し,順番または並列に処理できる
- 例
run-p build:*
build:*
にマッチするnpm scriptを parallel に run するという意味
npm-run-allを使って並列化
watch:browser
とさっきのwatch:pug
を組み合わせると
"build": "run-p build:*",
"build:pug": "pug src/pug/index.pug -o dist/ -P",
"watch": "run-p watch:*",
"watch:pug": "npm run build:pug -- -w",
"watch:browser":
"live-server dist --browser=chrome --watch=/"
yarn build
➜build:*
➜build:pug
yarn watch
➜watch:*
➜watch:browser
➜watch:pug
➜build:pug
- これでnpm scriptの基礎は完成
- あとは
build:xxx
とwatch:xxx
を同じように増やしていくことで並列処理を増やしていくことが出来る
- CSSを楽に書くための新しめのプリプロセッサ
- 他にもStylus, LESS, SASS(SCSS)などがある
- SASSがよく用いられていたが,高機能のため,変換に時間がかかるのが難点だった
- 欲しい機能をプラグインとして個別に導入が可能
- 変数が使いたい, ネストしたい...などなど
- PostCSS.partsでプラグインの検索が可能(便利)
- postcss-cssnext
- まだ導入が進んでいない次世代のCSS記法を 先取りして使える
- 様々なプラグインの集合体でもある
- autoprefixer: ブラウザでの表示差を埋める
- postcss-nesting: ネストしてCSSをかける
- postcss-simple-vars
- SASSのスタイルでCSS内に変数を宣言できる
postcss-cliを使ってみる
postcss-cli postcss-cssnext postcss-simple-vars
を使用src/postcss/style.css
を作成scripts
に"build:postcss": "postcss src/postcss/*.css -d dist/css/ --no-map -u postcss-simple-vars postcss-cssnext",
と"watch:postcss": "npm run build:postcss -- -w",
を追記
yarn build
すると,dist/css/style.css
が出力されるsrc/pug/index.pug
のhead
タグの最後にlink(rel="stylesheet", href="css/style.css")
を追記yarn watch
し,src/postcss/style.css
を編集すると自動でCSSに変換し,ブラウザをリロード!
body { // 変換前のpostcss
$baseColor: cyan;
background: $baseColor;
& h1 {
color: $baseColor;
background: red;
}
}
body { /* 変換後のcss */
background: cyan;
}
body h1 {
color: cyan;
background: red;
}
- JSの新しい記法 es6 ( = es2015)
- 正式名称: ECMA Script6
- イメージ
- レガシー: es5, モダン: es6, 次世代: es7
- es6で書いて,es5に変換するのが主流
- 変数宣言
const
,let
の導入const
(再代入不可),let
(再代入可)
- アロー関数
// 従来の関数 var plus = function(x, y) { return x + y; }; // アロー関数 const plus = (x, y) => { return x + y; };
- クラス構文
class Person { constructor(name) { this.name = name; }; hello() { console.log(`My name is ${this.name}.`); }; } const p = new Person('es6'); p.hello(); //=> "My name is es6."
import
/export
の導入- 他のJSファイルの関数やクラスを読み込める
- 例
- person.js
export default class Person { }
- index.js
import Person from './person';
- person.js
- 機能を モジュール ごとに分割し,自由に組み合せることが可能に
- 複数のモジュールを1つのファイルにする バンドラ
- HTMLにおけるJSの読み込み順の悩みから開放
- CSSや画像もJSファイルにバンドルすることができ,リクエスト数の削減につながる
- 代替品:Rollup, Browserify, Fuseboxなど
Grunt, Gulpといったツールは タスクランナー と呼ばれ,先程 npm script で行ったようなことを中心にサポートするツール(最近使わない)
Babel
でes6のJSをes5にし,webpack
でバンドル!- モジュールの説明
- babel-core:
Babel
本体 - babel-preset-es2015: 変換に使うプリセット
- babel-loader:
Babel
をwebpack
上で扱う君 - webpack:
webpack
本体
- babel-core:
module.exports = {
entry: __dirname + '/src/js/index.js',
output: {
path: __dirname + '/dist/js/',
filename: 'index.js'
},
module: {
loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015']
}
}]
}
}
src/js/
にperson.js
とindex.js
を作成
person.js
export default class Person {
constructor(name) {
this.name = name;
};
hello() {
console.log(`My name is ${this.name}.`);
};
}
index.js
import Person from './person';
const p = new Person('es6');
p.hello();
src/pug/index.pug
のbody
タグの最後にscript(src="js/index.js")
を追加
scripts
に下記2つを追加"build:js": "webpack", "watch:js": "npm run build:js -- -w",
yarn watch
すると,ブラウザのデベロッパーツールのコンソールにMy name is es6.
が表示される- webpackのせいで,生成されたJSファイルは読めたもんじゃないが,よく見るとちゃんと2ファイルが1つにバンドルされているのが確認できる
- これでメタな言語や新しい記法のファイルを,HTMLとCSSとJSのファイルに変換し,ライブリロードする環境が整いました
- あとはそれぞれをいじって学ぶだけです
node_modules
の中身はgit ignoreしましょう (package.json
さえあれば環境構築はできるので)
- ここまで来てなんなんですが,HTML5 や CSS3,JS の Promise や fetch ら辺がちゃんと出来たほうが良いと思います!
- Next Step
Hot Module Replacement
機能 Viewフレームワーク:React
,Vue
,Riot
ルーター:React Router
,vue-router
,Riot Router
アーキテクチャ:Flux
,Redux
,Vuex
,Riot Control
CSS:CSS modules
JSのメタ言語:TypeScript
- おわり!