Fork me on GitHub

2015-10-25のJS: ESLint入門、ECMAScriptとは何か?、rollupとES6 modules

Edit on GitHub 編集履歴を見る

JSer.info #250 - ESLint v1.7.0がリリースされました。
.eslintrc内に"extends": "./foo.js"と書くことでJavaScriptファイルを継承出来るようになっています。

また、JavaScript - ESLint 最初の一歩 - Qiitaという記事では、ESLintの使い方、設定方法、エディタ、ES6関連のルールについてなどが紹介されています。
初めてESLintを使う際に見てみるといいかもしれません。


ECMAScriptの仕様策定に関するカンニングペーパー | Web Scratchという記事ではECMAScriptについてQ&A形式で紹介しています。

ECMAScriptに出てくるTC39とは何か?という疑問から、ES6とES.nextの仕様策定プロセス、どのような仕様が提案されているかなどについて書かれています。

仕様策定に関して疑問が出やすい部分について一通り書かれているので、興味がある人は見てみると良いかもしれません。


rollup.jsはBrowserify、RequireJS、Webpackのようにモジュールの結合を行うbundleツールです。
デフォルトではES6 modulesのみを結合しますがpluginによってCommonJSなども対応するようです。

特徴としてサイト上で試すことが出来ますが、他のbundleツールと違いそれぞれのモジュールをラップした関数などがなくキレイに結合されています。
また、モジュールを読み込んでいても使用していない関数は除去されるなどの最適化が行われています。

これはES6 modulesがCommonJSのrequireのように動的にモジュールを読み込めるものではなく、静的に依存関係が決まること等を上手く活用しています。

他のbundleツールとの違いについては以下を参照してみてください。

実際にbundleした結果を比較したものがnolanlawson/rollup-comparisonで公開されています。
(Webpack 2でもES6 modulesを元に使用されていないコードの削除は予定されています。)

このようにrollup.jsはES6 modulesに最適化されたデザインですが、ES6で書いたコードをnpmなどで公開するルールなどはまだ整備されていないのが現状です。

The struggles of publishing a JavaScript library | Read the Tea Leavesでは、npmやBower、jspmにライブラリをどのように公開するかという話が書かれています。

その中でも、npmでは"main"フィールドに指定するエントリーポイントは基本的にES5環境向けにビルドしたものとなっていますが、公開されたライブラリにES6のコードをどう含めるかについては何も決まっていません。

そのため、ES6 modulesのコード(ライブラリのコードも含む)を参照したいrollup.jsはjsnext:mainというフィールドにES6のエントリーポイントを指定するような規約を設けています。

rollup.jsによって、公開されたパッケージにもES6のコードが含まれている事のメリットが提示されてきたので、今後npmやbundleツールでES6のコードをどう扱うかという話に何らかの進展があるかもしれません。

ちなみに、ブラウザがどのようにES6 modulesを読み込むかという仕様はwhatwg/loaderにて議論されています。

お知らせ

今回で250回目ですが、来年の1月16日でJSer.infoを始めてから丸5年になります。
そのため、2016年1月16日(土)か17日(日)あたりに200回記念イベントと同じようなイベントをやろうと計画しています。

以下にIssueを立ててあるのでご意見がある人は書き込むとよさそうです。


ヘッドライン


ESLint v1.7.0 released - ESLint - Pluggable JavaScript linter

eslint.org/blog/2015/10/eslint-v1.7.0-released/

JavaScript Tools ReleaseNote

ESLint v1.7.0リリース。
eslintrcのextendsにJavaScriptのファイルパスそのものを書いて設定を継承出来るようになった


jsdom/Changelog.md at 7.0.0 · tmpvar/jsdom

github.com/tmpvar/jsdom/blob/7.0.0/Changelog.md

JavaScript library ReleaseNote

jsdom 7.0.0リリース。
Node.js 4.0以降が必要になった。
XMLHttpRequestの再実装、HTMLTemplateElement.prototype.contentの追加など


esprima/ChangeLog at 2.7.0 · jquery/esprima

github.com/jquery/esprima/blob/2.7.0/ChangeLog

JavaScript AST library ReleaseNote

esprima 2.7.0リリース。
esprima.tokenizeにdelegatorオプションの追加など


アーティクル


JavaScript - ESLint 最初の一歩 - Qiita

qiita.com/mysticatea/items/f523dab04a25f617c87d

JavaScript Tools

ESLintの使い方、設定方法、ES6関連のルールについて


ECMAScriptの仕様策定に関するカンニングペーパー | Web Scratch

efcl.info/2015/10/18/ecmascript-paper/

ECMAScript まとめ

ECMAScriptとは何か?からES2016の策定プロセス、進捗の確認方法、コントリビュートのやり方、TranspilerやPolyfillの役割など仕様策定に関する疑問をまとめたもの


ecmascript-6-destructuring-gotcha

www.nczonline.net/blog/2015/10/ecmascript-6-destructuring-gotcha/

ECMAScript spec

let {} = {};がES6でvalidであるというのは混乱を起こすのではという話。
現在、ECMAScript仕様のIssueとして修正するべきかが議論されている。


EventEmitter in ES6

www.datchley.name/es6-eventemitter/

ECMAScript JavaScript

ES6でシンプルにEventEmitterやObserverを実装しながら、ES6の機能について学ぶ話


The struggles of publishing a JavaScript library | Read the Tea Leaves

nolanlawson.com/2015/10/19/the-struggles-of-publishing-a-javascript-library/

JavaScript library

bower、npm、jspmに対応したライブラリの公開方法と設定について。
Browserify、Webpack、rollup.jsでのライブラリのビルドについてなど


Experimenting with Object.observe in JavaScript

www.sitepoint.com/experimenting-object-observe-javascript-found-useful/

JavaScript ECMAScript

ES.nextで提案されているObject.observeの現状について。
ブラウザのサポート状況、Polyfillについて


StrongLoop | Moving toward Express 5

strongloop.com/strongblog/moving-toward-express-5/

node.js library

Express 5αでの変更点についての解説


TypeScript 1.6時代の.d.ts管理について意見を述べておく - Qiita

qiita.com/vvakame/items/72d22e33632178f7db24

TypeScript まとめ

npmパッケージとTypeScriptのd.tsの管理について。


サイト、サービス、ドキュメント


The Accessibility Project

a11yproject.com/

アクセシビリティ まとめ

ウェブ開発者向けにアクセシビリティについてまとめているサイト


ソフトウェア、ツール、ライブラリ関係


rollup.js

rollupjs.org/

JavaScript ECMAScript Tools

ES6 modulesをBrowserifyなどのようにbundleするツール。
使用していない関数は無視したり、余計なラップする関数なしに結合が出来る。
デフォルトではES6のみだがプラグインでCommonJSなども対応する。


Rich-Harris/magic-string

github.com/Rich-Harris/magic-string

JavaScript AST library

Source Mapをサポートしてるコード変換ライブラリ。
文字列の上書き、追加、削除などを文字列操作のように変更を行うことができる。


.eslintrc editor

pirosikick.github.io/eslintrc-editor/

JavaScript Tools 設定

ESLintの設定をGUIでポチポチと作成することが出来るツール


cotejp/webmidi

github.com/cotejp/webmidi

web sound library

Web MIDI APIをラップしたライブラリ


dleitee/valid.js

github.com/dleitee/valid.js

JavaScript library

String、Number、Date、Boolなどにおけるバリデーションを組み合わせたバリデーション関数を作成できるライブラリ


rodrigogs/kairos

github.com/rodrigogs/kairos

JavaScript library

時間同士の四則演算や比較を行うライブラリ


書籍関係


SVG Text Layout - O'Reilly Media

shop.oreilly.com/product/0636920043072.do

SVG book

SVGにおけるテキストのレイアウトについての書籍


この記事へ修正リクエストをする
JSer.info Slackに参加する