NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2016.12.09

Nodeまみれ!東京Node学園祭2016に行ってきた!【#03】

まさくに

DSC00191

こんにちは! いい加減この画像も変えたいまさくにです。
ブラット・ピットに似てた頃の写真に差し替えたい。

前回の最後で、「次回はフィナーレまでをお伝えします!」と書きましたが、あれは嘘です。その濃密な時間からこのレポートを区切らなくてはなりませんでした。大長編になりつつある『東京 node 学園祭 2016』、今回も引き続き kaz さんと自分のダブルスタンバイで 2 日目午後の様子をお伝えします! 今回は基調講演である Douglas Crockford さんの「 Web の少し未来の話」から始まり、午後に行われた 6 人の登壇の様子となります! 

Kaz Kaz
LIG のバックエンドエンジニア。最近の彼からの質問のなかでホットなものは「カルボキシル基とカルボキシ基、どっちがしっくりきます?」というものだった。知らんがな。

 

前回までの白熱の様子は下記からごらんください!


 

Keynote

DSC00264

Douglas Crockford さんによる基調講演となります。「The Seif Project」という Web の新しいプロトコルのお話でした。多くの企業が「Web を変えよう」と、クローズドなソリューションで解決しようとして失敗しているため、オープンな規格で Web をアップグレードしたい……それが「The Seif Project」だとのことです。このような壮大なお話が始まるとは思っていなかったので、水を打ったように静まり返る場内。そんな私たちに、1センテンスずつきっちり翻訳を行いながら進める講演が印象的でした。これ翻訳、超難しくないですか……。

氏が仰るには、「Seif」という新しいプロトコルは TLS を塗り替える新しい技術とのことでした。TCP で JSON 形式の公開鍵と秘密鍵、およびランダムな共通鍵をやり取りしてセキュアな通信を行うというお話です。ランダムな値はデバイスのカメラやマイクのノイズを拾うことで生み出す「本物の乱数」を使うということで、「パスワードを使わないからセキュアだろう」という氏の逆説的な説明が自分には衝撃的でした。

要するに、新しい Web の話をされていたのです。もしこのお考えが実装されて世界に広まるとすれば、相当貴重な時間に立ち会えたのではないかと思っています。すでに実装段階に及んでいるそうですが、「完璧だと思えなければリリースしない」と強く仰っていました。強い。いつか自分もその言葉を言ってみたい。

The Seif Project

 

[Room A] Node.js and Web Standards

DSC00296

「Node.jsのセキュリティーCVEのほとんどはHTTP関連だ」

IBM で Node.js テクニカルリードを担い、Node.js コアのテクニカルチームにも所属する James M. Snell 氏。Node.js に参画する前は IETF、W3C で標準化に関わっていたという氏は、今回「 Node.js と Web 標準」というテーマを引っ提げ、「Node.js における HTTP1.1 実装」と「 HTTP2 対応のこれから」という内容について話されていました。

Node.js における HTTP1.1 実装では、パフォーマンスや実装コストの問題で多くの「ショートカット」が図られたそうですが、その結果 Web 標準の仕様と Node.js の実装が乖離するようになり、その結果、多くのセキュリティ問題が発生するなど頭を悩ませ続ける問題となってきました。彼はこの問題の解決に取り組んでおり、Node.js の HTTP1.1 実装を RFC に準拠させるにあたっての奮闘が伝わってきました。

HTTP2 実装については HTTP1.1 と抜本的に仕様が異なることから、現在もまだ Node.js に導入するか検討が重ねられている段階で、実装やパフォーマンス( HTTP1.1 比でまだ 6 割程度)などまだまだ作業途中と仰られていました。しかし最後に「今日発表に使ったスライドはぜんぶ Node.js サーバーから HTTP2 で転送されてたんだよ!」と着実な成果を見せつけるデモが成功し、大変に期待を煽りながらセッションが締められました。

 

[Room B] Why to Standardize your READMEs

DSC02923

README の重要性を説く Richard Littauer さんの発表でした。README はドキュメンテーションの簡易版とも言え、「ユーザーの入り口の部分であるのでとても大事なものだよね」と仰っていました。特に node には 35 万ものモジュールが作られているので、「Standard JS を真似てStandard README を作った」とのことです。確かにこれがスタンダードになれば非常に助かる……。将来的には README の Linter や REPL なども作りたいと仰っていました。助かる……。

 

[Room A] The journey toward ES modules.

DSC00306

初っ端のスライドが「用語の定義」から始まるという、ガチ感あふれるセッションでした。

Bradley Farias (Bradley Meck) さんのセッションは、現在仕様策定が推められている「ECMA Script Module」、ES Module についてのお話でした。この ES Module は Node.js において、現在一般的に使われている Node Module を発展させ抜本的に改善したもので、静的解析への適応や冪等な import などさまざまな特徴を備えています。

ES Module は Babel を使ってトランスパイルすることで今も使うことができるほか、各 Javascript エンジンでのネイティブ実装も進められている段階となっています。Microsoft Edge のエンジンである Chakra などはこの実装を終えていますが、Chrome や Node.js が採用している V8 は実装待ちとなっており、このため Node.js における ES Module サポートもバージョン 10 以降という予定です。

このセッションでは、ES Module がいかに Node Module と異なるのかを細かく説明されていて、特に「ES Module の import は常に冪等であり、完全に同一のオブジェクトを返すため、ES Module はガベージコレクションの対象とならない」など、ES Module ならではの挙動などを深く知ることができたセッションでした。

スライドはこちら:https://docs.google.com/presentation/d/1J9mN3N1KZXGwn7ufrv9UAIiUzKo8zsQaQwIKseebjzo

 

[Room B] Vue.js 2.0 サーバサイドレンダリング

DSC02924

株式会社 CUUSOO SYSTEM の川口さんの発表でした。Vue2.0 がリリースされたとのことで、レンダリングシステムとサーバーサイドレンダリングについてお話をされていました。まず 2.0 になってレンダリングシステムを刷新、バーチャル DOM を採用しレンダリングの高速化がなされたとのこと。また、レンダラやハイドレーションの環境が整えられ、サーバーサイドレンダリングを簡単に実装できるようになってきたそうです。

https://speakerdeck.com/kazupon/vue-dot-js-2-dot-0-server-side-rendering

 

[Room A] Putting TV on the Internet

DSC00315

「テレビってほとんど選択肢を与えてくれないじゃん、そこが好き!」

この冒頭のひとことを選ぶにあたって「コペンハーゲンには美味しいラーメン屋がひとつしかないんだ! 東京に引っ越したい!」とどちらにするか迷ったのですが、ともかくテレビとラーメンと Node.js をこよなく愛する Mathias Buus さんの発表は「 P2P 通信を使ってネット経由でテレビを観る」というものでした。

ここの説明からは括弧書きが多くなるのですが、Mathias さんはまず HLS (Apple HTTP Live Streaming) や DASH (MPEG Dynamic Adaptive Streaming over HTTP) を用いて Adaptive Streaming (回線の速度に応じて動画の品質を自動で切り替えられるようにするストリーミング機構)を実現し、どこにいても快適に動画を見れる環境を構築しました。

しかし、動画配信を行うとサーバー側の帯域費用(サーバーに接続する回線の使用料金)が凄まじいことになるので、この解決策として彼は P2P 通信(BitTorrent に代表される、各クライアント同士が直接通信してファイルを共有・融通し合いサーバー通信の一極集中を回避する通信技術)に着目、ファイルを P2P 共有する Node.js モジュール「hyperdrive」と、動画のストリーミング配信にも対応した「hypervision」を作りました。説明終了。

このセッションでは、実際に hypervision のデモとしてネットワーク越しに P2P で端末の画面共有が行われ、「ただひとつのキー値」だけを使うことで世界中からどこでも動画の中継をみられる技術でして、会場がざわめき立っていました。

http://mafintosh.github.io/slides/nodefest.jp-2016

 

[Room B] React + Reduxを使った大規模商用サービスの開発

DSC02928

実際に React + Redux を実際のプロダクトに用いた場合の勘所をうかがうことができた、株式会社リクルートテクノロジーズの吉田さんの発表でした。失敗しないために覚えていて欲しいことを「Transision」「Code Splitting」「Server Side Rendering」の3つに絞って発表されていました。端末依存を洗い出すための実機確認や、ブラウザキャッシュを利用するためにプラグインを自作することなど、それぞれ珠玉の解決策ではありましたが、なによりプロダクトに対して真摯に開発されているという熱量を感じました。

https://speakerdeck.com/yoshidan/nodefest2016

まとめ

脳味噌オーバーフローといった感じの第3回目、いかがでしたでしょうか。特に基調講演にはA会場、B会場が固唾をのんで一言逃さず聞いておきたいというような神聖さがありました。そりゃそうだよ、だって Json 作った人が新しい潮流を作ろうとしてんだもん。

さて、次回はイベントもクライマックスの 2 日目 午後の部 2 回目をお伝えします!