NodeConf Adventure 2015 に行ってきました。(一日目、二日目に起きたこと)
NodeConf に行ってきました。 NodeConf っていうのは Node.js のための勉強会です。 io.js の中心人物である mikeal や、 npm のCEO である izaacs 、 hapijs author であり、先日 Walmart を退社した Eran Hammer など、そうそうたるメンバーの中でディスカッションをしてきました。
NodeConf Adventure とは
NodeConf Adventureはいわゆる発表者がいて、聴講者が聞くっていうスタイルのカンファレンスじゃありません。
なんというかものすごくメタなカンファレンスで、ワークショップとノウハウの共有をメインとしたディスカッションのための場所です。 アンカンファレンスっていう形式ですね。
Hello NodeConf! pic.twitter.com/MHBVi6Jg4c
— Yosuke FURUKAWA (@yosuke_furukawa) June 11, 2015
午前中に主催者である mikeal がロッジに全員を集合させます。
その後で参加者全員に何が聞きたいかを決めてスタート。
みんな isomorphic とか ES6 とか IoT とか microservices とか言って、発言していて、 substack が 「P2P hack しようぜ」って言ってたのが面白かった。( mikeal は興味なかったみたいでスルーされてたけど。)
Workshop に参加中。
P2P
HW on ARM
Native Modules
io.js TSC Panel
ES6
NODE Strategy
Types in JS
Documentation
Debug
のとりあえずどれからやるー?みたいな感じ。全部やってくれ。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
それぞれのトピックごとに場所を分けてスタート。
isomorphic
isomorphic って言ってもメインは サーバサイドレンダリングと React っていうよくある話だった。やっぱり viewの機能をサーバサイドで使えるようになったこと、初期表示のスピードが通常のSPAより改善できること、SEOによるアクセス向上などの話がメイントピックだった。
こんな感じ nodeconf pic.twitter.com/s8A7T1FFMM
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
React 使ってる人 10人位が手を挙げる
サーバサイドレンダリングまでやってる人 => 2人くらいしかいない。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
framework から脱してロックインから抜けだせという意見もある。過激派だ。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
まぁ確かに isomorphic をやったら、 ES6 とかで書くとか io.js でできることはむしろできなくなるという問題があるのは分かる。まぁbabel使うのかもしれないけど。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
面白かったのは、 browser で module の解決とかどうするのかっていう話で browserify から ES6 に話は飛び火して、 isomorphic を実現するための鍵としてやっぱり ES6 module なんじゃないかっていう話が一番面白かった。
browser に真のmodule を持ち込むのってどうするのか、という話で、めっちゃ面白い。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
今は browserify っていうか commonjs が主流だけど、これをどうするのか、あと HTTP/2 とかが来たらどうなるのかっていう議論をしていた。(もっと英語で話せるなら日本だとこういう議論してるって言えたんだろうけど、議論に割り込む勇気がなかった)
あと、ここでも fluxible 使ってるっていう人とか meteor で頑張ってるっていう人もいたけど、一人自作したっていう人が居てその人の lighter っていうライブラリを教えてもらってた。
React + isomorphic の ワークショップ
React と isomorphic のワークショップをやってたのでそこにも参加してきた。ワークショップ教材は以下のとおり。
Reactと fluxible つかって簡単なカウンターをみんなで実装しましょうっていうノリ。 1時間無いのと wifi が不安定すぎて一問しか進まなかった。 終わった後でOliverっていう isomorphic workshop をやってた方と話したけど、
僕:「fluxible どうよ?」
Oliver: 「isomorphic library の中ではいいと思うけど、 isomorphic 辛い」
僕: 「何が辛いの?」
Oliver: 「isomorphic でクラサバどちらでも呼べるようにするのがたまに面倒、ブラウザにしかないAPIを呼んじゃうと台無しになるし。」
僕: 「たしかに。でもfetchr とか routr みたいな isomorphic library 使っていれば、そこまで大変じゃないのでは?」
Oliver: 「まぁそうなんだけどね、まだ慣れてないのがあってうっかりすると呼んじゃうんだよ」
みたいなことを言ってました。ちなみに Oliver とは同じ部屋であることもあってすごく仲良くなった。
Oliver とパシャリ
Node Stability の話
Node.js の安定性っていう io.js Collaborator としてものすごく興味深いトピックに対しての議論だった。
こんな感じ pic.twitter.com/cm9ROk6Nty
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
node stability なので、何も変更しないようにしよう提案 => それまた fork されるパターンというツッコミを izs がしてた。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
Code Coverage
npm module の Smoke Test
の2つはとりあえず安定性のための鍵っぽい
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
Nodeを Stable, current, beta, canary に分けようという提案
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
izaacs とか mikeal とか Fishrock とか Chris Dickenson とかのこれまでのコラボレーター達が今後どうするべきかについて議論してた。
最終的に議論の成果として、現時点で mikeal が思うバージョン階層について説明してくれた。
- Stable(LTS) 絶対変わらないAPIでずっとサポートされるもの
- Current 現在のバージョン
- Beta 次のバージョン RC1とかRC2みたいなバージョン
- Canary nightly build、毎日ビルドされるもの
に分ける。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
これを io.js の issue に上げて今でも議論中。
こんな感じになる予定らしい。
ES6/7 の話
みんな ES6/7 の関心が高いようで、やっぱりここでも babel の存在感は大きかった。
特に議論になっていたのは、 async-awaitの話、decorator の話、function-bind の話で、みんな ES7 の話をしていた。
yield generator と async await の違いはだから、 yield generator は generator を作るためのもので非同期関数のためのものじゃないんだよっていう話。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
async-await こそが 非同期関数を呼びやすくするための鍵
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
async await で 例外が上がったら、 try catch で catch できる、これこそがみんながやりたい事だと。 Promise の catch はいらない。わーお!という流れ。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
Decorators 使いたいよねぇという話でもうみんなの興味は完全に ES7 だ。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
特に、 async-await と generator-yield の使い分けの話がメインだった。
NodeConfだとまだ async-await を使って ES7 やるぜっていう人はそこまで多くなかったけど、 io.js だと generator-yield がネイティブに使えるのでそれを基本にやってる人はまぁまぁ多かった。
ES6 workshop
ES6 を io.js を使って動かしてみようワークショップ、これも Oliver さんが担当。
これ実は微妙に手伝ってて、このリポジトリに io.js の ES6 の issue 投げてたり、 Oliver と discussion してたら、何かわからないことあったらフォローしてくれと言われたので、注意深く聞いてた。
これに関しては知っている事も多かったので、時折Oliverを補足したりしながら進めることができた。
Interview with Chris and Fishrock
終わった後で、 io.js の TC member であるChris Dickenson と Fishrock123 と一緒に今後の io.js について話した。
俺:「今って Chris はどんな事を io.js に入れようとしてるの?」
Chris:「Code Coverage を取れるようにしようとしているよ」
俺:「おお、それって io.js の test のカバレッジ?」
Chris :「そうそう、(画面を見せてくれる)」
俺:「へーすごい。isutanbul で取れるようになるのかー。」
Chris:「今だと tls-legacy があまりカバレッジ良くないとか出てるよ。」
俺:「Fishrockは今何やってるの?」
Fishrock:「バグが出たら直す、PRが来たらレビューする、そればっかりやってるよ。」俺:「ところで前に isomorphic の issue 上げたんだけど、あれってどう思う?ちょっとセンシティブな話かなぁ」
Fishrock:「うーん、基本的にユーザーランドで解決できるようなものは解決してコアはシンプルにっていうのがいいかなぁ」
Chris:「Agree、ただ url module とかどうするべきかねぇ。」
Fishrock:「url は what-wg で出てる奴が仕様になったらそれを採用するべきかなって思ってるよ。後は他の下の方の Blob とかは対応するべきだと思ってる。基本的に既にコアモジュールになっていて、what-wgが出してるものに関しては出来る限り isomorphic にするべきかなって思ってる。」
Chris:「Streamはどう思う? what-wg stream が出てるよ」
Fishrock:「うーん、どうかなぁ、、、」
俺:「fetchは?」
Fishrock:「Fetchはやりたくないかなぁ、僕は新しいモジュールは追加したくない。」
俺:「fetchは http.fetch みたいな関数では?」
Fishrock:「それでもユーザーランドでできるならそっちのほうが、、、」
俺:「ところで Stream ってなんであんなに what-wg の奴は API が違うんだろうね」
Chris:「僕らのStreamはFile IOとかNetwork IOの性能面のケアをすごくしてるからね、 what-wg の方は ウェブのインタフェースとして提案されていて、そっちの使い方に特化してるからじゃないかなぁ」
俺:「なるほど、そうなると Stream は難しそうだね、 what-wg stream の方、今 promise の配列だし、、、」
Chris:「そうなんだよね、さすがに EventEmitterベースを変えるつもりは無いし、 性能面はNodeの優先事項だしね。」
Chris はめっちゃ気さくな人で、 Fishrock はちょい堅物の若者っていう感じだった。
Chris とパチリ(Fishrock 帰り際に捕まえられなかった、でも良い奴だった)
レクリエーション
夕飯を食べていたら急に MaxOgden と substack が「お前ら!ゲームやるぞ!!」って言い出したので参加してきた。
この広いキャンプの中でwifi pointを隠したからそれを探してそのwifi pointに接続しろ、そのwifiのLANの中にいるマシンが何かのプロトコルを使って画像をstream配信してるからそれの画像を受信してスクショしろって言われた。
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
wifi見つけてからIPアドレスのマシンに行くと、JSのファイルがあって、中身を読むとrtspのアドレスが書いてあった。この短い時間で rtsp を解析するのかと思ってたら、Skypeがrtspを解析できたので、Skypeから画像をゲット。見事我々の勝利
— Yosuke FURUKAWA (@yosuke_furukawa) June 12, 2015
まとめ
- isomorphic で fluxible が人気、 meteor も使ってる人多かった
- ES6へのみんなの関心は ES7 に移ってた
- Node Stablity という事で安定バージョンをどうやって提供するか提案された
- isomorphism の話を Fishrock, Chris として何となく彼らが思っている事がわかった
- レクリエーションゲームで勝利!!
続きは三日目と四日目に起きたことを書くよー!