SlideShare a Scribd company logo
1 of 24
Download to read offline
ES6で始める
NODE.JS
〜注目をあびる優れた開発手法〜
(2017/07/09)
小田島 太郎 / @shimataro
NODESCHOOL OSAKA #36
自己紹介
/ /
/
ウェブリオ株式会社所属(京都)
趣味は手品
昨日はBBQでリア充ごっこしてきました
小田島 太郎 shimataro@GitHub
odashima.taro@Facebook shimataro999@Twitter
この発表について
レベル
初級〜中級
キーワード
ECMAScript6 (ES6)
Babel
babel-preset-env
それでは始めます
JAVASCRIPTのつらいところ
functionだらけ
クラスもfunction
コールバックのたびにfunction
非同期処理
流れを追いづらい
コールバックのネスト地獄
もっと使いやすくならんかな…
もうJavaScriptなんて進化しないよな…
してた。
ECMAScript
JavaScriptの規格
現行の「いわゆるJavaScript」はECMAScript5(ES5)
ECMAScript6(ES6)ではもっと便利に!
他のAltJS(TypeScript, CoffeeScript, ...)と一線を画す
JavaScriptある限りECMAScriptは不滅
ES6の構文を一部取り入れているブラウザもある
ES6の機能
import / export(モジュール)
class(クラス定義)
let / const(変数・定数)
for of 構文(配列のループ)
async / await(非同期処理 ※ES7)
テンプレート文字列
アロー演算子
デフォルト引数…などなど。
ES5 VS ES6(モジュール)
// ES5
// ただの関数呼び出し?
var foo = require("foo");
// ただの代入?
module.exports = bar;
// ES6
// インポートだ!
import foo from "foo";
// エクスポートだ!
export default bar;
ES5 VS ES6(クラス定義)
// ES5
// クラスに見えない
function aClass() {
// コンストラクタ
}
aClass.prototype.aMethod = function() {
// aClassのメソッド
}
// ES6
// クラスだ!
class aClass {
constructor() {
// コンストラクタ
}
aMethod() {
// aClassのメソッド
}
}
ES5 VS ES6(変数・定数)
// ES5
var variant = 0;
function foo() {
console.log(variant); // undefined(変数巻き上げ)
{
var CONSTANT = 1; // 変えるなよ!絶対変えるなよ!
var variant = 1;
}
console.log(CONSTANT); // ここでもアクセスできる
}
// ES6
let variant = 0;
function foo() {
console.log(variant); // 0
{
const CONSTANT = 1; // 変えるとエラー!
let variant = 1;
}
console.log(CONSTANT); // エラー!
}
ES5 VS ES6(配列のループ)
// ES5
var data = [1, 2, 3];
for (var i = 0; i < data.length; i++) {
var datum = data[i];
console.log(datum * datum);
}
// ES6
const data = [1, 2, 3];
for (const datum of data) {
console.log(datum * datum);
}
ES6対応状況(NODE.JS)
最新LTS(バージョン6)ではあらかた対応
バージョンによっては、 "use strict" を指定しないと使
えない機能がある
サーバサイドでは古いバージョンを使わざるを得ない場
合がある
Ubuntu 16.04ではバージョン4をサポート
ES6対応状況(ブラウザ)
モダンブラウザではある程度対応
ただしブラウザによって差が激しい
誰がアクセスするかわからないウェブサービスで使うの
は勇気がいる
開発時に大混乱
対応状況がバラバラなので…
「この文法ってNode4で対応してたっけ?」
「この文法ってIE9で対応してたっけ?」
「この文法って…」
⇒開発に直接使うのは現実的ではない
やりたいこと
開発時はES6を使う
ES5に変換してブラウザやNode.jsで実行
そんな都合のいいツールなんてあるわけないよな…
あった。
Babel -
ES6をES5に変換するツール(トランスパイラ)
由来は旧約聖書に出てくる「バベルの塔」
プラグイン機能
変換する文法を指定できる
変換が必要な文法のみ柔軟に対応できる!
⇒対応状況を気にせずES6で書ける!
https://babeljs.io/
PRESET
プラグインを1つずつ指定するのは面倒
preset = いくつかのプラグインをまとめたもの
babel-preset-es2015: class、for of等
babel-preset-es2017: async/await等
とりあえず全部のpresetを入れれば動く
でもネイティブ対応している文法はそのまま使いたい (特
にNode.jsでは!)
やりたいこと
ターゲットが対応していない文法だけ変換してほしい
例1: Node.js 4
例2: IE9以上、Chrome/Firefox最新版
例3: 現在実行中のNode.js
そんな都合のいいpresetなんてあるわけないよな…
あった。
を参照して、非対応文法のみ変換
バージョン指定方法が神
現在実行中のNode.jsのバージョン
Chromeの最新から2バージョン前
IEのシェア1%以上のバージョン
presetはこれさえ覚えておけばOK!
実験的な文法は別途プラグインが必要な場合あり
babel-preset-env
ES6対応一覧表
使い方
サンプルコードを用意しました
詳しくは を参照
https://github.com/shimataro/babel-preset-env-
sample
gulp le.babel.js
注意
新しい文法はそのままでは使えない場合あり
特定プラグインの有効化・無効化が必要
async / await, static プロパティ等
新しいクラスやメソッドはpoly llが必要な場合あり
ランタイムライブラリが必要な場合あり
ブラウザ向けには 等で1ファイルにまとめる
のが一般的
webpack
ES6の拡張子は?
.js - 個人的には使いたくない
ブラウザに食わせていいものだけ .js にしたい
.es - ECMAScriptの正式な拡張子
あまり浸透していない
.es6 - 正式ではないけど割と浸透している
バージョン6限定っぽく見える
結論: 好きなの使え
まとめ
ES6は便利だよ
対応状況マチマチだから で変換するといいよ
が便利だよ
ただしいくつか注意することがあるよ
手品に興味があったら声をかけてね!
Babel
babel-preset-env
ご清聴ありがとうございました

More Related Content

What's hot

最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介Ryo Iinuma
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Yukishige Nakajo
 
Javascript を使ってみよう!!
Javascript を使ってみよう!!Javascript を使ってみよう!!
Javascript を使ってみよう!!誠 小林
 
Database.persistentの話
Database.persistentの話Database.persistentの話
Database.persistentの話真一 北原
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -Shuji Watanabe
 
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -JustSystems Corporation
 
Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜Masashi MATSUI
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるzuya
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdfakiko_pusu
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料tantack
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口Sunao Tomita
 
Do you like scala
Do you like scalaDo you like scala
Do you like scalaYuto Suzuki
 
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −JustSystems Corporation
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
Rubyコミッタのいる開発いい話
Rubyコミッタのいる開発いい話Rubyコミッタのいる開発いい話
Rubyコミッタのいる開発いい話Kenichi Murahashi
 
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン 【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン linkbal
 
イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)cancolle
 

What's hot (20)

最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由
 
Javascript を使ってみよう!!
Javascript を使ってみよう!!Javascript を使ってみよう!!
Javascript を使ってみよう!!
 
Database.persistentの話
Database.persistentの話Database.persistentの話
Database.persistentの話
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
 
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
 
Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
Hello, Node.js
Hello, Node.jsHello, Node.js
Hello, Node.js
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
Do you like scala
Do you like scalaDo you like scala
Do you like scala
 
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
Rubyコミッタのいる開発いい話
Rubyコミッタのいる開発いい話Rubyコミッタのいる開発いい話
Rubyコミッタのいる開発いい話
 
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン 【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
 
イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)
 
20150523
 20150523 20150523
20150523
 

Similar to ES6で始めるNode.js / Starting NodeJS Development with ES6

【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Teppei Sato
 
Js frameworkの紹介
Js frameworkの紹介Js frameworkの紹介
Js frameworkの紹介Ryo Shimada
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returnsdynamis
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScriptShin Sekaryo
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Teppei Sato
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
LT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にLT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にdo7be
 
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript  -ES6で作るIsomophicアプリケーション-覚醒JavaScript  -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-Oonishi Keitarou
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみたAsami Abe
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)taskie
 
今日から使って先取り ECMAScript6
今日から使って先取り ECMAScript6今日から使って先取り ECMAScript6
今日から使って先取り ECMAScript6Ryo Ohe
 
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-jsKondo Hitoshi
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたItaru Kitagawa
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験Toshio Ehara
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 

Similar to ES6で始めるNode.js / Starting NodeJS Development with ES6 (20)

【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
 
Js frameworkの紹介
Js frameworkの紹介Js frameworkの紹介
Js frameworkの紹介
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
LT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にLT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015に
 
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript  -ES6で作るIsomophicアプリケーション-覚醒JavaScript  -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
 
今日から使って先取り ECMAScript6
今日から使って先取り ECMAScript6今日から使って先取り ECMAScript6
今日から使って先取り ECMAScript6
 
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
新ジャンルのJavaScript圧縮難読化に挑戦 ~jojofy-js
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 

ES6で始めるNode.js / Starting NodeJS Development with ES6