SlideShare a Scribd company logo
traceur-compilerで 
ECMAScript6を体験 
HTML5+α @福岡 - 第22回 2014-12-05(金) 
Photo by Web制作向け無料写真素材/ぱくたそ http://www.pakutaso.com
-自己紹介- 
株式会社キャムの江原と申します。 
Excelとかプログラムとかしてます。 
twitter : @itokami1123 
企業の経営戦略に役立つサービス「CAM MACS」を 
AWSにて提供してます。
今日はそろそろ気になるECMAScript6について 
発表したいと思います!
ECMAScript6って?
ECMAScript6とは 
” 
ECMAScript 6 は "Harmony" または "ES.next" のコードネームで呼称される、 
JavaScript の次期標準仕様です。 
Mozilla における ECMAScript 6 のサポートより 
https://developer.mozilla.org/ja/docs/Web/JavaScript/ECMAScript_6_support_in_Mozilla 
” 
ECMAに提出する正式のリリースは2015年の6月となる予定 
JSer.info 世界のJavaScriptを紹介するサイト 
http://jser.info/post/88276341744/2014-06-09-js-bluebird/
対応状況を調べるとボチボチ…次のIEは頑張るみたい 
http://kangax.github.io/compat-table/es6/
対応ブラウザはまだまだ少ない状況なので 
ES6でアプリを書くには 
ES6 => ES5 に変換する必要がありますね。
ES6をES5に変換するコンパイラ
どんなのがあるかちょっと調べてみました 
6to5 GitHubの☆1,207 / 対応度 59% 
https://github.com/6to5/6to5 
traceur-compiler GitHubの☆3,703 / 対応度 60% 
https://github.com/google/traceur-compiler 
echo-js GitHubの☆143 / 対応度 66% 
https://github.com/toshok/echo-js 
closure-compiler GitHubの☆786 / 対応度 30% 
https://github.com/google/closure-compiler 
echo-jsと迷いましたが星の数で決めて 
tracerurで試しにアプリを書いてみました。
ちなみに、tracer-compiler(トレーサーコンパイラー)は 
• Google製のコンパイラ 
• Node.jsで動くよ 
• AngularJS2の開発で使われている  
といった特徴があります 
https://github.com/google/traceur-compiler
Traceurは、↓ES6機能が試せみたいです。 
- Iterators and For Of 
- Generator Comprehension 
- Generators 
- Modules 
- Numeric Literals 
- Property Method Assignment 
- Object Initializer Shorthand 
- Rest Parameters & Spread 
- Template Literals 
- Promises 
- Block Scoped Binding (Experimental) 
- Symbol (Experimental) 
https://github.com/google/traceur-compiler/wiki/LanguageFeatures
Traceurでこんな感じのサンプルを作って見ました 
数値入力View 
計算結果表示View 
時給計算Model 
̶̶̶̶̶̶̶̶̶̶̶ 
時給 
時間 
支給額計算メソッド 
APIサーバから初期値取得 
数字を2つ入力すると掛け算するMV*アプリ 
https://github.com/itokami1123dev/maven-grunt-traceur
このサンプルのTraceurは Maven=>Gruntで動かしています。 
(JavaのMavenプロジェクトでJSを結合したり圧縮したり 
する際は、皆様何を使われてますか??) 
APIサーバ 
(Spring Boot) 
ES6=>ES5変換 
Traceur 
Maven Grunt 
compile 起動 
MavenからGruntを起動する”grunt-maven-plugin"を使ってみました 
http://java-and-js.blogspot.jp/2014/11/mavengruntgrunt-maven-plugin.html
サンプルアプリで使ったES6の機能を説明します
Arrayループで For Of
Array(配列)に格納された関数をループして呼び出し 
時給計算Model 
̶̶̶̶̶̶̶̶̶̶̶ 
this.listeners 
// ES5 
this.listeners.forEach(function (listener) { 
listener(); 
}); 
数値入力View 
描画メソッド 
計算結果表示View 
描画メソッド 
例) モデル変更時に 
this.listeners配列に格納された 
Viewの描画メソッドを起動 
forEachで 
ループ!
ES6は For Of で値をループできます。 
// ES5 
this.listeners.forEach(function (listener) { 
listener(); 
}); 
// ES6 
for (let listener of this.listeners) { 
listener(); 
} 
“for in” はkeyのループ。”for of”は値のループ。
アロー関数
さっきの配列ループはアロー関数でも短くかけますね。 
// ES5 
this.listeners.forEach(function (listener) { 
listener(); 
}); 
// ES6 
this.listeners.forEach( 
listener => listener() 
);
デモアプリではイベントリスナーでアロー関数使ってます 
// ES6 
setEvent() { 
this.wageView.addEventListener('change', 
(event) => { 
this.salary.wage = this.wageView.value; 
} 
); 
this.timeView.addEventListener('change', 
event => this.salary.time = this.timeView.value 
); 
} 
引数が一つの時は()丸括弧を省略でき、関数bodyが 
1つのreturn文の時はブロックと「return」を省略できます~ 
参考:アロー関数が実装された http://js-next.hatenablog.com/entry/2014/07/23/173147
( ∵ 
あとfunction(){ }と違って 
thisが外側のthisと同じという事。嬉しいですね! 
this.timeView.addEventListener('change', 
event => this.salary.time = this.timeView.value 
);
クラス定義と継承
Modelの基本機能をもつクラスをつくりました。 
// ES5 
var BaseModel = function() { 
this.listner = []; 
}; 
BaseModel.prototype.addListner = function (callback) { 
this.listner.push(callback); 
}; 
…省略… 
今までだと…コンストラクタ関数と… 
prototypeが離れていて…なんか… 
一体感がかけるなぁ…
// ES5 
var BaseModel = function() { 
this.listner = []; 
}; 
BaseModel.prototype.addListner = function (callback) { 
this.listner.push(callback); 
}; 
// ES6 
class BaseModel { 
constructor() { 
this.listner = []; 
} 
addListner(callback) { 
this.listner.push(callback); 
} 
} 
( ∵ おお! 
classぽい!
// ES5 
var Salary = function() { 
BaseModel.call(this) 
this._wage = 0; 
}; 
Salary.prototype = Object.create(BaseModel.prototype); 
Salary.ptorotype.constructor = Salary; 
Salary.ptorotype.compute = function() { ...省略... } 
// ES6 
class Salary extends BaseModel { 
constructor() { 
super(); 
this._wage = 0; 
} 
compute() { ...省略... } 
} 
( ∵ 継承もすっきり!
モジュール機能
// ES6: BaseModel.js 
export class BaseModel { 
constructor() { 
this.listner = []; 
} 
} 
// ES6: Salary.js 
import {BaseModel} from './BaseModel'; 
class Salary extends BaseModel { 
constructor() { 
super(); 
this._wage = 0; 
} 
compute() { ...省略... } 
} 
別ファイルのクラスも 
importできる(?) 
ううう..このデモアプリでは 
ファイル結合してないと 
importできませんでした…
System.register("js/src/es5/model/BaseModel", [], function() { 
"use strict"; 
var __moduleName = "js/src/es5/model/BaseModel"; 
function require(path) { 
return $traceurRuntime.require("js/src/es5/model/BaseModel", path); 
} 
var BaseModel = function BaseModel() { 
this.listeners = []; 
}; 
//…省略… 
return {get BaseModel() { 
return BaseModel; 
}}; 
}); 
System.register("js/src/es5/model/Salary", [], function() { 
"use strict"; 
var __moduleName = "js/src/es5/model/Salary"; 
function require(path) { 
return $traceurRuntime.require("js/src/es5/model/Salary", path); 
} 
var BaseModel = System.get("js/src/es5/model/BaseModel").BaseModel; 
//…省略… 
return {get Salary() { 
return Salary; 
}}; 
}); こんな感じでコンパイル済みを結合してます.. 
(結合せずに読み込めるかは..調査不足…)
引数にデフォルトのパラメータ
Viewの基本機能をもつクラスをつくりました。 
// ES5 
var BaseView = function(cssClassNm, models) { 
models = models || {}; 
デフォルト 
this.el = document.getElementsByClassName(cssClassNm)[0]; 
// ... 省略 パラメータ 
... 
} 
コンストラクタ関数の第2引数が 
省略時は {object} を設定するをES6で書くと…
// ES5 
var BaseView = function(cssClassNm, models) { 
models = models || {}; 
this.el = document.getElementsByClassName(cssClassNm)[0]; 
} 
デフォルト 
パラメータ 
// ES6 
class BaseView { 
constructor(cssClassNm, models = {}) { 
this.el = document.getElementsByClassName(cssClassNm)[0]; 
} 
} 
コンストラクタ関数の第2引数が 
省略時は {object} を設定するをES6で書くと…
Template Literals
テンプレートリテラルで計算結果を表示しました。 
// ES6 
render() { 
var pay = this.salary.compute().toLocaleString(); 
this.resultEl.textContent = `支給額:${pay}円`; 
} 
バッククォートで囲った文字は文字列中に変数を埋め込めます。
Promise
初期値は起動時にAPIからAjaxで取得してます。 
サンプルアプリはこんな感じで 
数値入力View 
計算結果表示View 
時給計算Model 
̶̶̶̶̶̶̶̶̶̶̶ 
時給 
時間 
支給額計算メソッド 
APIサーバから初期値取得 
APIサーバは 
Spring Boot 
はじめてのSpring Boot―「Spring Framework」で簡単Java 
http://www.amazon.co.jp/gp/product/4777518655 
数字を2つ入力すると掛け算するMV*アプリを 
ES6で書いてみました。 
https://github.com/itokami1123dev/maven-grunt-traceur
// ES6 
class ApiService { 
constructor() {} 
call(url) { 
var xhr = new XMLHttpRequest(); 
return new Promise((resolve, reject) => { 
xhr.open('GET', url) 
xhr.onreadystatechange = () => { 
if (xhr.readyState != 4 || xhr.status != 200) { 
return; 
} 
resolve(xhr.response); 
} 
xhr.send() 
}) 
} 
} 
(new ApiService()).call("hogehoge").then( 
(response) => { 
var {wage, time} = JSON.parse(response); 
salary.wage = wage; 
} 
バッククォートで囲った文字は文字列中に変数を埋め込めます。 
); 
①Promiseを返します。 
②API通信終了 
③thenに処理が続く 
④初期値を設定
詳しくはこちら! 
JavaScript Promiseの本 
http://azu.github.io/promises-book/ 
” 
JavaScriptにおける非同期処理といえば、コールバック 
でも、異なる書き方をしても決して間違いではありません… 
promiseオブジェクトに用意されてるメソッド(ここでは then や catch) 
以外は使えないため、 コールバックのように引数に何を入れるかが自由 
に決められるわけではなく、一定のやり方に統一されます 
”
Object Initializer Shorthand
Viewに渡す初期設定のオブジェクトを作る時に 
// ES5 
var salary = new Salary(); 
var models = { 
salary: salary 
}; 
// ES6 
var salary = new Salary(); 
var models = { 
salary 
}; 
短い! 
key名とvalueに設定する変数が同じ場合は省略できる
デモ
デモ 
https://github.com/itokami1123dev/maven-grunt-traceur
デモでは使えなかったそのほかの機能
Array Comprehension (Array内包表記) 
var arr1 = [for (i of [1, 2, 3]) i * i]; 
//=> [1, 4, 9] 
var arr2 = [ 
for (x of ["A", "B"]) 
for (y of [0, 1, 2, 4]) 
x + '' + y ]; 
//=> ["A0", "A1", "A2", "A4", "B0", "B1", "B2", "B4"] 
http://jsbin.com/qupex/2/edit?js,console 
配列がイテレーションで作れるよ
Destructuring Assignment(デストラクチャリング)分配束縛 
var goku = 10000, ginyu = 5000; 
値の交換! 
var [goku, ginyu] = [ginyu, goku]; 
console.log([goku, ginyu]);//=>[5000, 10000] 
var saiyajin = {gohan: 10000, bejita: 8000}; 
var {gohan, bejita} = saiyajin; 
console.log([gohan, bejita]);//=>[10000, 8000] 
Objectプロパティから変数設定! 
変数値の交換やオブジェクトの値を変数に設定したりできます。
他にもES6の機能は色々あったのですけど 
この資料はここまでです… 
Generatorsとかyieldとか誰か教えて…
まとめ! 
- ES6、はやく使いたいけどブラウザが対応するまで 
もう少し時間がかかりそう。 
- Traceurなど変換コンパイラを使うと予習ができる! 
今から勉強しておくと将来モテるかも。 
- 型がES6で入らなかったのが残念.. 
- Object.observeもES6で入らなかったのも残念..
以上、ご清聴ありがとうございました!
下記記事を参考にさせていただきました!ありがとうございます。 
1. 2014-06-09のJS: Bluebird 2.0.0、ES6のリリーススケジュール、Nodeで 
作るコマンドラインツール 
http://jser.info/post/88276341744/2014-06-09-js-bluebird/ 
2. traceur-compiler 入門 
http://yosuke-furukawa.hatenablog.com/entry/2014/07/31/093041 
3. ECMAScript 6でモダンWebアプリケーションへ向かって 
https://www.xenophy.com/javascript/8447 
4. JS.next JavaScriptの最新実装情報を追うブログ アロー関数が実装された 
http://js-next.hatenablog.com/entry/2014/07/23/173147 
5. Vanilla JS is a fast, lightweight, cross-platform framework for 
building incredible, powerful JavaScript applications. 
http://vanilla-js.com/

More Related Content

PPT
Cubby 2006-08-23
PDF
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
PDF
System4 comment h
PDF
Ansible入門...?
PPTX
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
PPT
Puppet Best Practices? at COOKPAD
PDF
Viewを活用して複雑化と戦う
PPTX
Webシステム脆弱性LT資料
Cubby 2006-08-23
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
System4 comment h
Ansible入門...?
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Puppet Best Practices? at COOKPAD
Viewを活用して複雑化と戦う
Webシステム脆弱性LT資料

What's hot (20)

ODP
Performance Schema @ MySQL Casual #2
PDF
Ansible 入門 #01 (初心者向け)
PDF
System4 comment
PPT
Cakephpstudy5 hacks jp
PPT
ASP.NET MVC 1.0
PDF
Ansible入門
PDF
20091030cakephphandson 01
PDF
traceur-compilerで未来のJavaScriptを体験
PPTX
Open Source System Administration Framework - Func
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
PDF
Ansible automationplatform product updates 2021
PPTX
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
PDF
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
PDF
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
PDF
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
PDF
Ansibleを失敗しながら学ぶ その1
PDF
Controllerのbefore_actionにおける インスタンス変数セットについて
PPTX
AngularJS入門
PDF
JobSchedulerでCD(継続的デリバリ)
PDF
Angular.jsについてちょっとしゃべる
Performance Schema @ MySQL Casual #2
Ansible 入門 #01 (初心者向け)
System4 comment
Cakephpstudy5 hacks jp
ASP.NET MVC 1.0
Ansible入門
20091030cakephphandson 01
traceur-compilerで未来のJavaScriptを体験
Open Source System Administration Framework - Func
やや関数型を意識した風Elixir/Phoenixご紹介
Ansible automationplatform product updates 2021
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Ansible とネットワーク自動化の概要(SmartCS と Ansible の連携による自動化の可能性を体験!)
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
Ansibleを失敗しながら学ぶ その1
Controllerのbefore_actionにおける インスタンス変数セットについて
AngularJS入門
JobSchedulerでCD(継続的デリバリ)
Angular.jsについてちょっとしゃべる
Ad

Viewers also liked (20)

PPTX
Sound & music
DOC
Zaragoza turismo 236
DOC
Info sacu
PPTX
DOC
11 áGua 393 27 Ago04
PDF
Estudo comparativo em matéria do direito na UNASUL: ênfase nos elementos inte...
PPTX
Going with the (Cash) Flow with Microsoft Excel
PPTX
From Awesome Admin to Champion Coder by Ashima Saigal, David Liu, Jennifer Be...
PPTX
Typhoon Hagupit (RubyPH) Map Sampling
PDF
How to Coach Enterprise Experimentation (Alissa Briggs at Enterprise UX 2015)
PPTX
Sm and journalism, pt 2
DOC
Zaragoza turismo-56
PDF
คำกริยา001
DOC
Zaragoza turismo 222
PDF
『どうする?どうやる? データセンター間ネット ワーク』 - 802.1aq(SPB)/TRILL@JANOG29
PPT
एक सही
PDF
PPTX
Pinterest for Business
PDF
Verilog-HDL Tutorial (13)
PDF
L'ouverture des données publiques au service de l'intérêt général
Sound & music
Zaragoza turismo 236
Info sacu
11 áGua 393 27 Ago04
Estudo comparativo em matéria do direito na UNASUL: ênfase nos elementos inte...
Going with the (Cash) Flow with Microsoft Excel
From Awesome Admin to Champion Coder by Ashima Saigal, David Liu, Jennifer Be...
Typhoon Hagupit (RubyPH) Map Sampling
How to Coach Enterprise Experimentation (Alissa Briggs at Enterprise UX 2015)
Sm and journalism, pt 2
Zaragoza turismo-56
คำกริยา001
Zaragoza turismo 222
『どうする?どうやる? データセンター間ネット ワーク』 - 802.1aq(SPB)/TRILL@JANOG29
एक सही
Pinterest for Business
Verilog-HDL Tutorial (13)
L'ouverture des données publiques au service de l'intérêt général
Ad

Similar to traceur-compilerで ECMAScript6を体験 (20)

PDF
JavaScript (ECMAScript) 2013
PDF
ECMAScript 6 Features(PDF 版)
PDF
Kanazawa.js.Next
PDF
Ecmascript2015とその周辺について
PDF
JavaScript/CSS 2015 Autumn
PDF
Learn ES2015
PPTX
Nds meetup8 lt
PDF
JavaScript.Next
PPTX
Startup JavaScript
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
PPTX
今日から使って先取り ECMAScript6
PDF
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
PPT
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
PDF
JavaScriptおよびXPages Vote技術解説
PDF
ES6 はじめました
PDF
Serverside ES6@Livesense technight
PDF
Miyazaki.js vol.1 スコープの話
PDF
JavaScript.Next Returns
PDF
ECMAScript没proposal追悼式
PDF
JavaScriptの落とし穴
JavaScript (ECMAScript) 2013
ECMAScript 6 Features(PDF 版)
Kanazawa.js.Next
Ecmascript2015とその周辺について
JavaScript/CSS 2015 Autumn
Learn ES2015
Nds meetup8 lt
JavaScript.Next
Startup JavaScript
これからのJavaScriptー関数型プログラミングとECMAScript6
今日から使って先取り ECMAScript6
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
JavaScriptおよびXPages Vote技術解説
ES6 はじめました
Serverside ES6@Livesense technight
Miyazaki.js vol.1 スコープの話
JavaScript.Next Returns
ECMAScript没proposal追悼式
JavaScriptの落とし穴

More from Toshio Ehara (20)

PDF
iPhoneアプリを Javaで書くよ?
PDF
Java初心者勉強会(2015/08/07)資料
PDF
Java電卓勉強会資料
PDF
BABELで、ES2015(ES6)を学ぼう!
PDF
AngularJSで業務システムUI部品化
PDF
AngularJS入門の巻2
PDF
JenkinsをJava開発でこんな感じで使っています
PDF
AngularJS入門の巻
PDF
AngularJS+TypeScriptを試してみた。
PDF
AngularJSのDirectiveで俺俺タグつくっちゃお
PDF
HTML5のCanvas入門 - Img画像を編集してみよう -
PDF
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
PDF
福岡のIT勉強会情報の集め方(LT資料)
PDF
BACKBONE.JSによるWebアプリケーション開発について
PDF
BACKBONE.JSにJasmineでテストコード書いてみた (LT資料)
PDF
JavaScriptのテストコード 一緒に勉強しませんか??
PDF
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
PDF
LT Leap MotionとJavaScriptで遊ぼう!
PDF
JavaScriptもBACKBONE.JSならスッキリ ~MVCぽいのを初体験!~
PDF
BACKBONE.JSでMVC始めませんか?
iPhoneアプリを Javaで書くよ?
Java初心者勉強会(2015/08/07)資料
Java電卓勉強会資料
BABELで、ES2015(ES6)を学ぼう!
AngularJSで業務システムUI部品化
AngularJS入門の巻2
JenkinsをJava開発でこんな感じで使っています
AngularJS入門の巻
AngularJS+TypeScriptを試してみた。
AngularJSのDirectiveで俺俺タグつくっちゃお
HTML5のCanvas入門 - Img画像を編集してみよう -
BACKBONEJS+SCSS+JavaEE(JAX-RS) 今風のWebアプリをNetBeansで入門!
福岡のIT勉強会情報の集め方(LT資料)
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSにJasmineでテストコード書いてみた (LT資料)
JavaScriptのテストコード 一緒に勉強しませんか??
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
LT Leap MotionとJavaScriptで遊ぼう!
JavaScriptもBACKBONE.JSならスッキリ ~MVCぽいのを初体験!~
BACKBONE.JSでMVC始めませんか?

traceur-compilerで ECMAScript6を体験