Node Interactive Europe 2016 に参加しました。

Node Interactive Europe とは

f:id:yosuke_furukawa:20160925115229p:plain

Node.js が Linux Foundation の傘下に入ったのですが、その Linux Foundation の支援を受けて開催される非常に大きなカンファレンスの1つです。アムステルダムで行われました。 とにかく濃い4日間で、今回は Node.js の発表あり、アンカンファレンスあり、Collaborators Meetupありで面白かったです。

First Date (Node Interactive)

初日、カンファレンスにはbreakfast/lunch がついていて、クロワッサンとスムージーがおいしい。

f:id:yosuke_furukawa:20160925093527p:plain

f:id:yosuke_furukawa:20160925115731p:plain

Node Foundation Opening Talk by Mikeal Rogers

f:id:yosuke_furukawa:20160925115841p:plain

Node.js のこれまでとこれからを表したまとめ的な話。 Node.js はサーバーだけじゃなくて、フロントエンドにも活用されるようになった( babel, browserify, webpack, gulp etc)

f:id:yosuke_furukawa:20160925204806p:plain

クライアントアプリケーションを作るためのフレームワークである、 Electron も流行している。

f:id:yosuke_furukawa:20160925204749p:plain

他にも IoT でも活用されてる ( Johnny Five, NodeBots, NodeCopter, とかのライブラリもそうだし、 tessel, arduino, raspberry PI, edison etc にも対応されてる )

f:id:yosuke_furukawa:20160925204719p:plain

クラウドサービスだと AWS Lambda , IBM BlueMix , GCP , Microsoft Azure などが API や Microservice 対応として Node.js を採用。

f:id:yosuke_furukawa:20160925205126p:plain

これまでの Node.js の話が包括的にされていて、かつ今回の Node Interactive Europe で話す各keynoteの先出しになっていて、聴講者の興味を刺激する良いトークだった。

発表者目線だとこんな感じ。 f:id:yosuke_furukawa:20160925204338p:plain

Node.js Core State of the Union by James Snell

f:id:yosuke_furukawa:20160926034611p:plain

Node.js Core の James、今年の NodeFest ゲストの一人。

Node.js はどんどんコミットされてかなり変更が加わっている、1年前のv4のときと比べると2700以上のコミットがある。 それの 49% はドキュメントやテストやbenchmarkで、より安定に向けて進んでいる。

f:id:yosuke_furukawa:20160927133135p:plain

benckmark の結果、v4とv6でパフォーマンスは上がっていて、しかも性能は安定している。大幅な落ち込みなどが無いことが分かる。

f:id:yosuke_furukawa:20160927133928p:plain

今後は Web Standard の方向を目指している。 HTTP/2 の話が eps (enhanced proposal specsといって、coreへの提案仕様) に上がるようになった。

f:id:yosuke_furukawa:20160927154614p:plain

async-await という新しい非同期処理手法も v8 で実装されている(ただし、Nodeで使える時期は未定)

f:id:yosuke_furukawa:20160927155142p:plain

ES Modules の話もある。ただし、この問題は根深くていまだ議論中。

f:id:yosuke_furukawa:20160927155414p:plain

Async-Hook という EventLoop のライフサイクルにおいて、イベントをフックできる仕組みを検討中。これはローレイヤのAPIになる予定。

f:id:yosuke_furukawa:20160927161816p:plain

V8 の上にVMを検討、V8以外のエンジン(ChakraCore, SpiderMonkey, JSC etc) も載せられるようにするために一旦中間レイヤを置く予定。

f:id:yosuke_furukawa:20160927170633p:plain

Stream API を native layer でも使えるように新しいnative APIを検討。

f:id:yosuke_furukawa:20160927170816p:plain

新しく ABI の機能を追加、 native addon を作りやすくするように。

f:id:yosuke_furukawa:20160927170546p:plain

ElectronとかIoTのようなembed向けに軽量化の提案。

f:id:yosuke_furukawa:20160927170835p:plain

国際化対応をより改善していく予定、実際にはデータセットを簡単に検索できるようにする

f:id:yosuke_furukawa:20160927171111p:plain

Debug 用に core dump analytics ができるようにしていく。 Node Report の仕組みを検討中

f:id:yosuke_furukawa:20160927171406p:plain

Node.js が今取り組んでいること、今後が分かるトーク。面白かった。

f:id:yosuke_furukawa:20160927171627p:plain

Node Together by Ashley Williams

slide: https://ashleygwilliams.github.io/nodetogether-keynote/#1

f:id:yosuke_furukawa:20160927171823p:plain

Node Together という inclusivity を向上させるためのカンファレンスについてのトーク。 これまであんまり node に触れてこなかった人たちや、やってみたかったけど CLI とかわかんないし Node の初め方もわからないような人たちに対して、みんなで一緒にやっていこうという道を示すためのカンファレンスが、 NodeTogether 。

NodeTogether

現在、 Node のコアメンバーは基本的に男性で構成されているし、女性が全くいないし、人種もアジア人が少なかったりと偏った状態、本来は色んな人の意見を聞くのが inclusivity の本質なので、これをなるべく是正していきたいとする活動(アファーマティブアクションという)。

f:id:yosuke_furukawa:20160927175442p:plain

「Node には inclusivity の問題がある」これを一旦全員で問題としてシェアするところから初めたいという考えさせられるテーマ。 日本でも Node Together JP を開きたいという話を最後に Ashley と話したところ、「ぜひやってほしい、支援が欲しかったら言って!」とのことなので実施していこうと思う。

EventLoop, yay by Bert Belder

slide: EventLoop, yay

f:id:yosuke_furukawa:20160928005648p:plain

EventLoop の話とその詳細について。EventLoop の図は間違いが多く、正確に EventLoop が理解されていることはじつは少ない。 下の図では ThreadPool の中に Network が入っている。 Network は実際には Thread で扱っていない(epoll/kqueue/ etcなので、正確にはスレッドじゃない)

f:id:yosuke_furukawa:20160928010314p:plain

こっちの図は Non-Blocking Worker という実際には存在しない worker がいたり、 その worker が client に値を返すような事が書いてある

f:id:yosuke_furukawa:20160928010507p:plain

こっちの図は Event Stack と呼ばれるスタックが存在している。こんな風にイベントを stack に溜めたりしない。

f:id:yosuke_furukawa:20160928011140p:plain

EventLoop は実際にはそのプラットフォームごとに微妙にやることが違うので、画一的な図にしにくく、抽象的な絵になる。 Bert が書くとしたらこういう感じ。

f:id:yosuke_furukawa:20160928011313p:plain

Node.js の中ではネットワーク以外にも色んな非同期処理がある、それぞれを統一的に非同期処理として隠蔽するために下の方ではスレッドだったり、kernel操作だったり、シグナルハンドリングで処理をしている。

f:id:yosuke_furukawa:20160928011729p:plain

Callback/nextTick/Promise も1つのイベントループだけではない、タスク処理をしている。

f:id:yosuke_furukawa:20160928011947p:plain

ものすごく面白かった。ちょうどタイムリーにもこの前Software Design 2016/10号に似たような話を書いていたのでためになった。

The Road Forward by Tracy Hinds

f:id:yosuke_furukawa:20160928013338p:plain

Inclusivity の話を再び。ちょっと違った目線から。Node.jsは先程 Inclusivity の問題がある、としていたが、それを実際に解消するにはどうしたらいいか、というトーク。どうやって Welcome な空気を作って沢山の人に contribute してもらうか。

  • アクセスするバリアをなくす
  • バイアスを減らす
  • みんなが安心して contribute できるようにする

というテーマ。二回も Inclusivity トピックが上がるというのはやっぱり課題はあるのだろうし、そこを声高に発言する必要に迫られているのだろう。

Isomorphic JavaScript with React by Azat Mardan

slide: github.com

Reactで Isomorphic JS を作ってみようという話。実際に実務で同じようなことをやってるので、わかりやすかった。

f:id:yosuke_furukawa:20160928090511p:plain

f:id:yosuke_furukawa:20160928091807p:plain

サーバーサイドレンダリングの問題はまだ良いソリューションはなさそうなので、地道にイベントループを止めない仕組みを検討するか自分でキャッシュ機構を作ったりする必要がありそう。

The CITGM Diaries by Myles Borins

slide: The CITGM Diaries

f:id:yosuke_furukawa:20160929022332p:plain

Canary In The Gold Mine と呼ばれる、Node.js がCIでやってる smoke test の仕組み、長いのでcitgmと呼ばれる。仕組みとしては CI の中で citgm を動かして、よく使われてそうなライブラリを最新のNode.jsでリリース前にテストできるようにする。

実績も上げていて、実は非常に使い勝手が良いライブラリ。自分でも動かすことができるので、自分達のライブラリでcitgmを動かしてみたいと思ったら下記のようにすれば良い

$ npm install citgm -g
$ citgm <module-name>

Text Mining with Node.js by Philipp Burckhardt

slide: https://eventmobi.com/api/events/13516/documents/download/84cffc82-bf57-4803-b7fe-6fed36d247f1.pdf/as/TextMiningTalk.pdf

Node.jsでテキストマイニング処理をしようとする人の話、Text Mining は機械学習ブームで色んな言語で実証が進んでるけど、やっぱりそこまで Node.js では進んでいない中で、色々ライブラリを構築していくっていう気概を感じる良い話だった。

この辺のライブラリの話だった。

github.com

github.com

Evolving Web Standards in Node.js by James Snell

HTTP2 in Core の話。 Node.js にも HTTP2 を持ってこようという話で、なるべく既存の http/https とのAPI差分を zero に使えるようにする予定とのこと。

HTTP2の HoL Blocking 回避の話や現状で nghttp2 を使って実現する話などの設計が共有されていた。

ただ実際に http2 と http1 で同じAPIを提供しようとすることはできても、その capability が異なるので、それは別途 low level な API も新たに追加する予定、一旦 nghttp2 を普通に使えるようにしたものを下記リポジトリで公開するのでできたらそこにフィードバックとPRがほしいとのこと。

github.com

The Cost Of Logging by Matteo Collina

pino っていうロギングライブラリ、性能が他の bunyan や winston とくらべても速いという事で、性能を売りにしている。

github.com

pino よりも性能を計測するためにボトルネックを調査する方法として 0x と autocannon というライブラリが使われててそっちが面白かった。

0x は flamegraph を簡単に作るライブラリ

www.npmjs.com

autocannon は ab テストみたいにリクエストを送るツール、http pipeline に対応している

www.npmjs.com

Building the Node.js Global Distribution Network by Guillermo Rauch

最近 Guille が作った会社の zeit でやっている now というツールに関してのプレゼン

now はものすごく簡単にクラウド上に自分のサーバーを建てられるサービスで、雑に言えば npm install now -g して now deployment <your_server_code_path> したら後は待つだけでデプロイできる。

ただし、持っているのはコンピューティングリソースだけで、データリソースとしては別な所を借りてくる必要がある。

初日のまとめ

  • Nodeのこれまでとこれからの話がメインに語られてた
  • 他のはライブラリを使ったトークで、ノウハウが多くて面白かった。大体日本と語っている内容は似てても、向こうはちゃんとライブラリのauthorが語るのでちょっと違った雰囲気になる

飲み会で、最近どんなhackyな話題あるの?って聞いてみたら 「Rust いいよ Rust」って言われて割りとみんな新しいものに手を出してる感じが良かった。

Second Date

さて、2日目。この日で Node Interactive Europe としてのカンファレンスは最終日、3日目と4日目はコラボレーターのための日になる。

Bitcoin, Blockchain and Node by Portia Burton

slide:

Bitcoin と Blockchain っていう今丁度盛り上がっている分野のトーク。

特に Blockchain にフォーカスしていて、とりあえずやってみたかったら Etherum っていうプログラマブルに blockchain を使えるプロジェクトがあるからそこから参画していくと良いという紹介だった。

github.com

勉強不足でわからないことが多いので、この分野はもう少し手を動かして学んでいく必要があるなと思った。

Elegantly Produce and Consume Compiled Packages by Benjamin Lupton

slide:

Compiled な Modules を作る時のエレガントな方法というタイトル、実際に今は babel だの TypeScript だのでコンパイルされるライブラリが多い。さらに言えばモジュールを作る時に READMEだけじゃなくて色々本来は必要なファイルもある(CONTRIBUTING.mdとか)

editions というライブラリでその手の問題を解決しようという話だった。

www.npmjs.com

Ambitious Desktop Apps with JavaScript and Electron by Felix Rieseberg

slide:

Slack のエンジニアからの Electron アプリの話。

f:id:yosuke_furukawa:20160930024350p:plain

Programming for the NES with JS

slide: http://fritzvd.com/talks/node-ie-nes/#1

ファミコンJavaScriptでハックする話。この辺のエントリが元になっている話。

Getting started with NES programming · fritzvd

独特の発表スタイルwそして、マッドサイエンティストな感じのハックですごく面白かった。

Alt-Ctrl: Scream into this Arduino by Rachel White

f:id:yosuke_furukawa:20160930025217p:plain

Arduino に向かって叫べ!っていうタイトル、熱い。 自動でネコに餌をやる仕組みを作ったりと根っからのハードウェアハッカー。 今回は Node.js で Arduino に向かって叫ぶとLチカするようなデモをしたりといくつかデモでArduinoだったりNodeBotsの面白さをintroductionしてくれた。

f:id:yosuke_furukawa:20160930030118p:plain

npm v4/v5 by Kat Marchan

npm v4 と v5 の話 by Kat Marchan

npm v3 はもうそろそろリリースされて1歳になる。LTSとして今後はメンテナンスフェーズに移る。次は npm v4。

f:id:yosuke_furukawa:20160930030216p:plain

npm v4 は v3 のときほど大きな変更はしない予定。10月リリース予定。

f:id:yosuke_furukawa:20160930030236p:plain

node path の prepend をデフォルトではオフに。 もともと npm v3 は現在の Node の path が勝手に prepend される仕様。オプションで追加できるように修正する予定。

f:id:yosuke_furukawa:20160930031400p:plain

npm search の復活、 incremental search がcache機能でできるようにする。

f:id:yosuke_furukawa:20160930031635p:plain

prepublishは install 時も行われる分かりにくい仕様なので、 deprecated その代わりに prepare 用のhookを追加、これが prepublish 相当の動きをする。本当に publish の前で行う prepublishOnly というhookも設置予定。prepublishOnlyは deprecated の prepublish が浸透したら、ゆくゆく名前を prepublish に直す。

f:id:yosuke_furukawa:20160930031651p:plain

npm v5 は shrinkwrap の改善にフォーカスする。 2017年 first quarter 中を目処に実施する予定。

State of the Union : Express by Doug Wilson

Express の現在のメインメンテナである Doug Wilsonからの今後の Express の話。

Express とは言わずと知れたウェブアプリケーションフレームワーク、 router の仕組みと thin な middleware から成る。

f:id:yosuke_furukawa:20160930032332p:plain

Express は Node Foundation に incubating project として追加された。長期メンテ保証されるようにコラボレーションの仕組みを作っている。

f:id:yosuke_furukawa:20160930032425p:plain

Express は内部的に3つの organizationを持つ。

f:id:yosuke_furukawa:20160930032554p:plain

それぞれの役割はこんな感じ。

f:id:yosuke_furukawa:20160930032641p:plain

Express v5.0 に向けては下記のようにしていく。

  • Promise をサポートする
  • template engine 改善
  • cookie/querystring 処理の改善
  • route syntax を新しくする
  • よりコアを細分化していく。

f:id:yosuke_furukawa:20160930032721p:plain

2日目まとめ

  • npm が v4 / v5 のロードマップを見せた
  • Express v5 で Promise が!

これで一旦カンファレンスは終了、 Node v7 あり、 npm v4, v5 あり、他のたくさんのモジュールの解説ありで非常に有意義なイベントだった。

Third Date

ここから先はそこまで語るところはないのでかいつまんで。 三日目は、 contribution のやり方に主眼をおいてみんなでアンカンファレンス形式でトークしつつも、 code and learn っていう実際にコントリビュートをその場でレクチャーする話が面白かった。

libuv v2 talks by saghul

libuv v2 どうするかという話、 saghul, bert belder, bnoordhuis, が一同に介して libuv の話するとか胸熱な感じだった。 f:id:yosuke_furukawa:20160930033732p:plain

libuv v2は既に master branch にマージされていて、新APIやplatform 依存コードの cleanup などが進んでいる。 f:id:yosuke_furukawa:20160930034220p:plain

いまだに libuv のだめな所、主にdocumentationが弱点。 f:id:yosuke_furukawa:20160930034353p:plain

uvbookに書いてある内容を統合しつつ、サンプルを増やす(http clientとか) f:id:yosuke_furukawa:20160930034511p:plain

Multi-thread 改善も進める、スレッドセーフなAPIも追加する f:id:yosuke_furukawa:20160930034637p:plain

TLS サポートもしたいと思っている。 f:id:yosuke_furukawa:20160930034758p:plain

Device 対応 f:id:yosuke_furukawa:20160930034857p:plain

左から Fedor, Ben Noordhuis, Bert Belder, Saghul という libuv allstars f:id:yosuke_furukawa:20160930035016p:plain

Forth Date

最終日は、 Collaborators Meetup をして終了。長い長いカンファレンスだったが、途中にちゃんと面白い手を動かすようなカリキュラムもあって非常に刺激になった。

まさにこんな感じで、みんなで VMの話、 http2の話、inclusivityの話、release 管理の話をディスカッションした。やっぱりというか inclusivity の話が一番盛り上がって、全員で1時間以上トークしてしまった。

inclusivity は答えが無いので、トークしても発散気味になるが、今時点ではこれらの問題点がちゃんと共有されることがいちばん大事なのだろう。

まとめ

アムステルダムで4日間のカンファレンスに出席して、色々と話を聞いてきた。ものすごく面白い話が多くて、特にNode.jsの今後の話ができてよかった。 Node Interactive から Node学園祭に持ってこれるものも多いので、良い所は参考にして新しいコンテンツにしていこうと思う。

特に code-and-learn という Node Core にコントリビュートをしてみようというハンズオンが面白かったので、 Node 学園祭でも実施する予定だ。既に宣言はしてある。

github.com

今回のカンファレンスで得たものをなるべく NodeFest に還元していこうとおもう。