エンジニア CROSS 2013でクロスしてきた。

エンジニアサポートCROSS 2013

f:id:yosuke_furukawa:20130124022110p:plain

行ってきました!エンジニアCROSS!レポート書きます。(だいぶ間が開いてしまった。。。)

次世代ウェブセッション


テクニカルな話からクスリと笑える話まで幅広くて、すごく楽しかった。ただ、次世代ウェブの所でわからない単語がチラホラ。せっかくなのでSPDYとかWebSocketとかの知っている単語の再復習も兼ねてと一緒に解説付きでまとめてみました。

CRIME アタック


ものすごく簡単に言うと、SSL等で暗号通信をしていても暗号が解かれてセッションハイジャックとかの乗っ取りを行える攻撃手法。
SPDYではcookieのようなセキュアに扱うべき文字列と攻撃者が使用する制御用のpath文字列が同じzlibという圧縮ライブラリで圧縮されている。そのため、ネットワークトラフィックが監視できて、攻撃者が任意のHTTPを送受信できる状況であれば圧縮をほどいて復号する事ができてしまう。

参考資料:
Adam Langley「CRIME attackの件」 - 以下斜め読んだ内容
ImperialViolet - CRIME

今回の次世代ウェブセッションの中では、新しいHTTP2ではこのCrimeアタックに対してどうするかという話が行なわれていて、kazubuさんの話によれば、headerとかbodyとかで圧縮のコンテキストを変えたり、そもそも圧縮の方法を変更して対応する等の話し合いが行われているということだった。

NPN


Next Protocol Negotiationの略。もともとTLSはその名前の通りTransport Layerレベルでのセキュリティをするためのプロトコルだが、それを拡張したもの。アプリケーションレベルでNPNが扱えるプロトコルリストを選択することができる。
参考ブログに書かれている、以下の図がわかりやすかった。

参考資料:Simple SPDY and NPN Negotiation with HAProxy - igvita.com

SPDY


Googleが提唱しているHTTPの効率化とダウンロードの高速化を目指したプロトコル。
通常HTTPでは、画像などのasset系のものやjs,css,html等のテキスト系のものを取得する際にひとつずつしか送受信できないという制約がある。そうすると画像等で非常に重いものがあるとそれに引きずられる可能性がある。SPDYはTLS接続を多重化することでその制約を超えて複数のリクエストを扱えるようにHTTPを拡張している。もちろん、扱えるようにするためにはサーバー側とクライアント側の両方で対応が必要になる。

Adopting SPDY in Line – Part 1: An Overview « NAVER Engineers' Blog

今のところブラウザとサーバーの両方を持っているGoogleやアプリとサーバーの両方を持っているLINE等が対応している。今回のセッションでは、LINEがオレオレSPDYを使っているという話と今のSPDYを使うならクライアント、サーバー両方持っているところじゃないと厳しいという話が行なわれていた。

またSPDYが出てきてから、bandwidthという帯域幅よりもRTTという往復時間の短縮を行なっていこうという流れになっているという話だった。

WebSocket


Webサーバーとブラウザ間での双方向通信用のプロトコル。一度コネクションを張ればその中で双方向に通信することができる、Cometに代表されるXHR系の方法でも従来の仕組みの上で擬似的に双方向通信をさせることができるが、HTTPよりも軽量なプロトコルを使用しているため、通信ロスが減り、アプリケーション側への負担が少ない。

ただ従来の機構とは異なり、コネクションを維持し続ける必要が有るため、スケール方法が確立されていないなどの欠点がある。またブラウザはもとより、NAT、Firewall、Proxyが対応していないと使えない。ウイルス対策ソフト等も接続が張られっぱなしの状態になると接続を切断する等の対策をとっているソフトが多く、WebSocketに対応するには障害が未だ多い。

リアルタイム性はそこまで必要か、という議論


これが一番面白かった議論だったので、残しておく。
Jxck_さんの問題提起:「人ってそこまでリアルタイム性は必要なのか」について
t_wadaさんからは「WebSocketレベルでのリアルタイム性があるとコミュニケーションが息苦しくなる、人と人ではなく、機械と機械のコミュニケーションにWebSocketを利用するというのが面白いのでは。」
ysskさんから「クローラー型の検索エンジンから登録型に戻ってくるというのはありそう。その時にpubsubで登録させる時にリアルタイムに反映する、という事はあるかも。」

というわけで、非常に面白く得られるものが多い話し合いでした。

大規模JS開発について


こちらはどっちかというと「みんなどうしてる?」っていう開発スタイルについての話が多かった。
coffescript使ってる?テストとかどうやってる?フレームワーク何使ってる?
とかそういう話。

意外にcoffeescriptを使っている開発者は多く、そこでのハマリポイントが話されてて面白かった。
javascriptは型らしきものはあるけど、厳密なものではないので、辛いという話が出ていて、JSXやHaxe等、altJs系の型があるものに今後期待したいと言われていた。

また、テストにしてもロジックと分離できる所はテストしているが、それ以外の部分はSelenium使ったりで頑張る所もあるけど、ほとんどは自動テスト化していないところが多かった。

あと、エディタ何使っているか。WebStormのところもあれば、Sublime + Vimでやっているところもあって、ノウハウが学べてよかった。

感想


最後の懇親会で今までクロスしてこれなかった人達ともクロスできてよかった。
尊敬しているkayacの方々にも会えたし。mesoさんのドワンゴの現在についてのLTがすげー面白くてよかった。
kwappaさんの「おまえらの職務経歴書はつまらん!」というタイトルのLTは周りのエンジニアの爆笑をさらっていた。
忙しい中、クロスに行けて良かったなぁと実感しました。

スタッフの皆さん、ありがとうございました!!