Node Interactive Europe 2016 に参加しました。
Node Interactive Europe とは
Node.js が Linux Foundation の傘下に入ったのですが、その Linux Foundation の支援を受けて開催される非常に大きなカンファレンスの1つです。アムステルダムで行われました。 とにかく濃い4日間で、今回は Node.js の発表あり、アンカンファレンスあり、Collaborators Meetupありで面白かったです。
First Date (Node Interactive)
初日、カンファレンスにはbreakfast/lunch がついていて、クロワッサンとスムージーがおいしい。
Node Foundation Opening Talk by Mikeal Rogers
Node.js のこれまでとこれからを表したまとめ的な話。 Node.js はサーバーだけじゃなくて、フロントエンドにも活用されるようになった( babel, browserify, webpack, gulp etc)
クライアントアプリケーションを作るためのフレームワークである、 Electron も流行している。
他にも IoT でも活用されてる ( Johnny Five, NodeBots, NodeCopter, とかのライブラリもそうだし、 tessel, arduino, raspberry PI, edison etc にも対応されてる )
クラウドサービスだと AWS Lambda , IBM BlueMix , GCP , Microsoft Azure などが API や Microservice 対応として Node.js を採用。
これまでの Node.js の話が包括的にされていて、かつ今回の Node Interactive Europe で話す各keynoteの先出しになっていて、聴講者の興味を刺激する良いトークだった。
発表者目線だとこんな感じ。
Node.js Core State of the Union by James Snell
Node.js Core の James、今年の NodeFest ゲストの一人。
Node.js はどんどんコミットされてかなり変更が加わっている、1年前のv4のときと比べると2700以上のコミットがある。 それの 49% はドキュメントやテストやbenchmarkで、より安定に向けて進んでいる。
benckmark の結果、v4とv6でパフォーマンスは上がっていて、しかも性能は安定している。大幅な落ち込みなどが無いことが分かる。
今後は Web Standard の方向を目指している。 HTTP/2 の話が eps (enhanced proposal specsといって、coreへの提案仕様) に上がるようになった。
async-await という新しい非同期処理手法も v8 で実装されている(ただし、Nodeで使える時期は未定)
ES Modules の話もある。ただし、この問題は根深くていまだ議論中。
Async-Hook という EventLoop のライフサイクルにおいて、イベントをフックできる仕組みを検討中。これはローレイヤのAPIになる予定。
V8 の上にVMを検討、V8以外のエンジン(ChakraCore, SpiderMonkey, JSC etc) も載せられるようにするために一旦中間レイヤを置く予定。
Stream API を native layer でも使えるように新しいnative APIを検討。
新しく ABI の機能を追加、 native addon を作りやすくするように。
ElectronとかIoTのようなembed向けに軽量化の提案。
国際化対応をより改善していく予定、実際にはデータセットを簡単に検索できるようにする
Debug 用に core dump analytics ができるようにしていく。 Node Report の仕組みを検討中
Node.js が今取り組んでいること、今後が分かるトーク。面白かった。
Node Together by Ashley Williams
slide: https://ashleygwilliams.github.io/nodetogether-keynote/#1
Node Together という inclusivity を向上させるためのカンファレンスについてのトーク。 これまであんまり node に触れてこなかった人たちや、やってみたかったけど CLI とかわかんないし Node の初め方もわからないような人たちに対して、みんなで一緒にやっていこうという道を示すためのカンファレンスが、 NodeTogether 。
現在、 Node のコアメンバーは基本的に男性で構成されているし、女性が全くいないし、人種もアジア人が少なかったりと偏った状態、本来は色んな人の意見を聞くのが inclusivity の本質なので、これをなるべく是正していきたいとする活動(アファーマティブアクションという)。
「Node には inclusivity の問題がある」これを一旦全員で問題としてシェアするところから初めたいという考えさせられるテーマ。 日本でも Node Together JP を開きたいという話を最後に Ashley と話したところ、「ぜひやってほしい、支援が欲しかったら言って!」とのことなので実施していこうと思う。
EventLoop, yay by Bert Belder
slide: EventLoop, yay
EventLoop の話とその詳細について。EventLoop の図は間違いが多く、正確に EventLoop が理解されていることはじつは少ない。 下の図では ThreadPool の中に Network が入っている。 Network は実際には Thread で扱っていない(epoll/kqueue/ etcなので、正確にはスレッドじゃない)
こっちの図は Non-Blocking Worker という実際には存在しない worker がいたり、 その worker が client に値を返すような事が書いてある
こっちの図は Event Stack と呼ばれるスタックが存在している。こんな風にイベントを stack に溜めたりしない。
EventLoop は実際にはそのプラットフォームごとに微妙にやることが違うので、画一的な図にしにくく、抽象的な絵になる。 Bert が書くとしたらこういう感じ。
Node.js の中ではネットワーク以外にも色んな非同期処理がある、それぞれを統一的に非同期処理として隠蔽するために下の方ではスレッドだったり、kernel操作だったり、シグナルハンドリングで処理をしている。
Callback/nextTick/Promise も1つのイベントループだけではない、タスク処理をしている。
ものすごく面白かった。ちょうどタイムリーにもこの前Software Design 2016/10号に似たような話を書いていたのでためになった。
The Road Forward by Tracy Hinds
Inclusivity の話を再び。ちょっと違った目線から。Node.jsは先程 Inclusivity の問題がある、としていたが、それを実際に解消するにはどうしたらいいか、というトーク。どうやって Welcome な空気を作って沢山の人に contribute してもらうか。
- アクセスするバリアをなくす
- バイアスを減らす
- みんなが安心して contribute できるようにする
というテーマ。二回も Inclusivity トピックが上がるというのはやっぱり課題はあるのだろうし、そこを声高に発言する必要に迫られているのだろう。
Isomorphic JavaScript with React by Azat Mardan
slide: github.com
Reactで Isomorphic JS を作ってみようという話。実際に実務で同じようなことをやってるので、わかりやすかった。
Universal webapps 誰が一番早く作れるかなっていうworkshopで1位になってしまった。 mongodb が既にインストールされてるっていうアドバンテージが生きた
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
ReactのServer side rendering 遅い問題、講師の人に聞いてみたら、
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
1. cluster でマルチプロセス
2. nextTickでイベントループ止めない
3. 子プロセスでレンダリングする
とのこと。
サーバーサイドレンダリングの問題はまだ良いソリューションはなさそうなので、地道にイベントループを止めない仕組みを検討するか自分でキャッシュ機構を作ったりする必要がありそう。
The CITGM Diaries by Myles Borins
slide: The CITGM Diaries
Canary In The Gold Mine と呼ばれる、Node.js がCIでやってる smoke test の仕組み、長いのでcitgmと呼ばれる。仕組みとしては CI の中で citgm を動かして、よく使われてそうなライブラリを最新のNode.jsでリリース前にテストできるようにする。
citgm が人知れず body-parser の障害と gulp の障害を未然に防いでいたと聞いてすごいと思った。
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
実績も上げていて、実は非常に使い勝手が良いライブラリ。自分でも動かすことができるので、自分達のライブラリでcitgmを動かしてみたいと思ったら下記のようにすれば良い
$ npm install citgm -g $ citgm <module-name>
Text Mining with Node.js by Philipp Burckhardt
Node.jsでテキストマイニング処理をしようとする人の話、Text Mining は機械学習ブームで色んな言語で実証が進んでるけど、やっぱりそこまで Node.js では進んでいない中で、色々ライブラリを構築していくっていう気概を感じる良い話だった。
Text Mining みたいな領域を Node.js でやるの、余程のもの好きか、browserでも動かしたい勢かどっちかだと思ったけど、こういう話が機械学習ブームで増えてくるのは可能性を広げる意味では良いなと思っている
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
この辺のライブラリの話だった。
Evolving Web Standards in Node.js by James Snell
HTTP2 in Core の話。 Node.js にも HTTP2 を持ってこようという話で、なるべく既存の http/https
とのAPI差分を zero に使えるようにする予定とのこと。
HTTP2の HoL Blocking 回避の話や現状で nghttp2 を使って実現する話などの設計が共有されていた。
const http2 = require('http').HTTP2;
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
const server = http2.createServer(opts, (rq, rs) => {
rs.addHeader('foo', 1);
rs.write('hello');
})
HTTP/2 in core using nghttp2 !!! #NodeInteractive pic.twitter.com/GHvwdcZ6Sd
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
ただ実際に http2 と http1 で同じAPIを提供しようとすることはできても、その capability が異なるので、それは別途 low level な API も新たに追加する予定、一旦 nghttp2 を普通に使えるようにしたものを下記リポジトリで公開するのでできたらそこにフィードバックとPRがほしいとのこと。
The Cost Of Logging by Matteo Collina
pino っていうロギングライブラリ、性能が他の bunyan や winston とくらべても速いという事で、性能を売りにしている。
pino よりも性能を計測するためにボトルネックを調査する方法として 0x と autocannon というライブラリが使われててそっちが面白かった。
0x は flamegraph を簡単に作るライブラリ
autocannon は ab テストみたいにリクエストを送るツール、http pipeline に対応している
Building the Node.js Global Distribution Network by Guillermo Rauch
最近 Guille が作った会社の zeit でやっている now
というツールに関してのプレゼン
now はものすごく簡単にクラウド上に自分のサーバーを建てられるサービスで、雑に言えば npm install now -g
して now deployment <your_server_code_path>
したら後は待つだけでデプロイできる。
ただし、持っているのはコンピューティングリソースだけで、データリソースとしては別な所を借りてくる必要がある。
Redefined cloud computing #NodeInteractive pic.twitter.com/GVMttHFNLs
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
Immutable deployment という仕組み。 now で勝手にdeployすると新しい場所に勝手に作られる。さらに now alias でドメイン変更可能。
— Yosuke FURUKAWA (@yosuke_furukawa) September 15, 2016
初日のまとめ
- Nodeのこれまでとこれからの話がメインに語られてた
- 他のはライブラリを使ったトークで、ノウハウが多くて面白かった。大体日本と語っている内容は似てても、向こうはちゃんとライブラリのauthorが語るのでちょっと違った雰囲気になる
飲み会で、最近どんなhackyな話題あるの?って聞いてみたら 「Rust いいよ Rust」って言われて割りとみんな新しいものに手を出してる感じが良かった。
Node Interactive 参加者の数名が「最近 Rust 触ってんだけど、 Rust いいよ Rust 」って言ってて、 Noder の中でも Rust 流行ってんだなーと感じた
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
Second Date
さて、2日目。この日で Node Interactive Europe としてのカンファレンスは最終日、3日目と4日目はコラボレーターのための日になる。
Bitcoin, Blockchain and Node by Portia Burton
slide:
Bitcoin と Blockchain っていう今丁度盛り上がっている分野のトーク。
特に Blockchain にフォーカスしていて、とりあえずやってみたかったら Etherum っていうプログラマブルに blockchain を使えるプロジェクトがあるからそこから参画していくと良いという紹介だった。
勉強不足でわからないことが多いので、この分野はもう少し手を動かして学んでいく必要があるなと思った。
Elegantly Produce and Consume Compiled Packages by Benjamin Lupton
slide:
Compiled な Modules を作る時のエレガントな方法というタイトル、実際に今は babel だの TypeScript だのでコンパイルされるライブラリが多い。さらに言えばモジュールを作る時に READMEだけじゃなくて色々本来は必要なファイルもある(CONTRIBUTING.mdとか)
editions というライブラリでその手の問題を解決しようという話だった。
良いnpm module の作り方:
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
- package.json にちゃんとライセンスを入れる
- HISTORY.mdをかく
- CONTRIBUTING.mdをかく
- LICENSE.md もかく
そういうのをちゃんとやってくれる editions というライブラリを使う
Ambitious Desktop Apps with JavaScript and Electron by Felix Rieseberg
slide:
Slack のエンジニアからの Electron アプリの話。
https://t.co/Lp0qduf44V using node.js/Babel/React/some native modules (using Electron) #NodeInteractive
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
https://t.co/Lp0qduf44V は Full text search engine だけは C++ で実現しているとのこと。
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
Auto Updater / Dialogs /Push Notification / ES2015/WebCam/WebRTC とかのその辺の機能がライブラリから使えるっていうエコシステム的な側面を見て Electron を Slack では採用。
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
Programming for the NES with JS
slide: http://fritzvd.com/talks/node-ie-nes/#1
ファミコンをJavaScriptでハックする話。この辺のエントリが元になっている話。
Getting started with NES programming · fritzvd
NES written in JavaScript #nodeinteractive pic.twitter.com/Uh4JdTEniV
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
やばい、普通にファミコン起動し始めたぞ
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
ファミコンが起動しないということでみんなが browing your disk って言い始めてクッソフイタ
— Yosuke FURUKAWA (@yosuke_furukawa) September 16, 2016
独特の発表スタイルwそして、マッドサイエンティストな感じのハックですごく面白かった。
Alt-Ctrl: Scream into this Arduino by Rachel White
Arduino に向かって叫べ!っていうタイトル、熱い。 自動でネコに餌をやる仕組みを作ったりと根っからのハードウェアハッカー。 今回は Node.js で Arduino に向かって叫ぶとLチカするようなデモをしたりといくつかデモでArduinoだったりNodeBotsの面白さをintroductionしてくれた。
npm v4/v5 by Kat Marchan
npm v4 と v5 の話 by Kat Marchan
npm v3 はもうそろそろリリースされて1歳になる。LTSとして今後はメンテナンスフェーズに移る。次は npm v4。
npm v4 は v3 のときほど大きな変更はしない予定。10月リリース予定。
node path の prepend をデフォルトではオフに。 もともと npm v3 は現在の Node の path が勝手に prepend される仕様。オプションで追加できるように修正する予定。
npm search の復活、 incremental search がcache機能でできるようにする。
prepublishは install 時も行われる分かりにくい仕様なので、 deprecated その代わりに prepare 用のhookを追加、これが prepublish 相当の動きをする。本当に publish の前で行う prepublishOnly というhookも設置予定。prepublishOnlyは deprecated の prepublish が浸透したら、ゆくゆく名前を prepublish に直す。
npm v5 は shrinkwrap の改善にフォーカスする。 2017年 first quarter 中を目処に実施する予定。
State of the Union : Express by Doug Wilson
Express の現在のメインメンテナである Doug Wilsonからの今後の Express の話。
Express とは言わずと知れたウェブアプリケーションフレームワーク、 router の仕組みと thin な middleware から成る。
Express は Node Foundation に incubating project として追加された。長期メンテ保証されるようにコラボレーションの仕組みを作っている。
Express は内部的に3つの organizationを持つ。
それぞれの役割はこんな感じ。
Express v5.0 に向けては下記のようにしていく。
- Promise をサポートする
- template engine 改善
- cookie/querystring 処理の改善
- route syntax を新しくする
- よりコアを細分化していく。
2日目まとめ
- npm が v4 / v5 のロードマップを見せた
- Express v5 で Promise が!
これで一旦カンファレンスは終了、 Node v7 あり、 npm v4, v5 あり、他のたくさんのモジュールの解説ありで非常に有意義なイベントだった。
Third Date
ここから先はそこまで語るところはないのでかいつまんで。 三日目は、 contribution のやり方に主眼をおいてみんなでアンカンファレンス形式でトークしつつも、 code and learn っていう実際にコントリビュートをその場でレクチャーする話が面白かった。
libuv のメンテナーの saghul にlibuv v2 のmain features は何?って聞いたらそれを決めるために今日のmeetupに来たんだぜって言われて、おおってなった
— Yosuke FURUKAWA (@yosuke_furukawa) September 17, 2016
CodeAndLearn やると、参加者が自発的にNodeのcontributeする方向に促されるんで素晴らしいなと思っている。隣の後輩は初めて node に PRを送っている。日本でもやりたい。。
— Yosuke FURUKAWA (@yosuke_furukawa) September 17, 2016
libuv v2 talks by saghul
libuv v2 どうするかという話、 saghul, bert belder, bnoordhuis, が一同に介して libuv の話するとか胸熱な感じだった。
libuv v2は既に master branch にマージされていて、新APIやplatform 依存コードの cleanup などが進んでいる。
いまだに libuv のだめな所、主にdocumentationが弱点。
uvbookに書いてある内容を統合しつつ、サンプルを増やす(http clientとか)
Multi-thread 改善も進める、スレッドセーフなAPIも追加する
TLS サポートもしたいと思っている。
Device 対応
左から Fedor, Ben Noordhuis, Bert Belder, Saghul という libuv allstars
Forth Date
最終日は、 Collaborators Meetup をして終了。長い長いカンファレンスだったが、途中にちゃんと面白い手を動かすようなカリキュラムもあって非常に刺激になった。
Great round table discussion about the VM abstractions API in #nodejs at #NodeCollaborationSummit #NodeInteractive pic.twitter.com/JVn2M5BknE
— Thomas Watson (@wa7son) September 18, 2016
まさにこんな感じで、みんなで VMの話、 http2の話、inclusivityの話、release 管理の話をディスカッションした。やっぱりというか inclusivity の話が一番盛り上がって、全員で1時間以上トークしてしまった。
inclusivity は答えが無いので、トークしても発散気味になるが、今時点ではこれらの問題点がちゃんと共有されることがいちばん大事なのだろう。
何もしてないけどnode.js http2 wg のメンバーになったのと、 @jovi0608 をメンバーに追加してもらった
— Yosuke FURUKAWA (@yosuke_furukawa) September 18, 2016
まとめ
アムステルダムで4日間のカンファレンスに出席して、色々と話を聞いてきた。ものすごく面白い話が多くて、特にNode.jsの今後の話ができてよかった。 Node Interactive から Node学園祭に持ってこれるものも多いので、良い所は参考にして新しいコンテンツにしていこうと思う。
特に code-and-learn という Node Core にコントリビュートをしてみようというハンズオンが面白かったので、 Node 学園祭でも実施する予定だ。既に宣言はしてある。
今回のカンファレンスで得たものをなるべく NodeFest に還元していこうとおもう。