Node学園 22時限目メモ
eventdots.jp
こちら、参加してきたのでメモる。
「Node学園祭 2016の告知」by yosuke furukawa さん
11/12(土)
- dotsイベント会場で開催する予定。13日とは異なるので注意。
- ハンズオンメイン
- 今年もpaypalがスポンサー
11/13(日)
- サイバーエージェントオフィスにて開催
- 豪華なゲストスピーカー
- Douglas Crockford:JSONを再定義した人/JavaScript Good Partsを書いた人
・James M Snell:IBMのエンジニア
・Bradley Meck:ESモジュールのCompatibleを取ってる人。ES6とNode.jsの相互運用をしている人。
・Cheng Zhao:今日本のGitHubにいる。今をときめくErectronの作者。
・Yoshua Wyuts:ChuというフロントエンドFWを作っている人。
・Mathias Buus:サンフランシスコのNode confarenceとかでよく登壇している。MongoDB Driver、Node Tetrisとか書いている。
今月中にCFP(Call For Paperpage)/sponsor pageを出します!って宣言してた。
今年もNode学園祭参加せねば!
「Stream b/w node.js & whatwg」by Jxck さん
Streamを制するものはNodeを制す から 5年
Stream APIがブラウザにやってくる!
先に結論:Node.jsのものとwhatwgのものとは互換性などない
両者の供述を聞く
In Node.js
- 非同期はCallbackが基本
- 引数にルールを決めて扱いやすくしよう
- 連続するイベントはEventEmitter
- EventEmitterの上位APIがStream
- Multi-Consumer
- カスタマイズは継承
In whatwg
- 非同期はPromiseはPromiseを返してこう
- Async/Awaitでそれを便利にしよう
- もちろんStreamはPromiseのジェネレータ:無限にPromiseが湧いてくる
- (≠ES6 Generator)
- Single-Consumer:同じPromiseは得られないので
- カスタマイズはコンストラクタ:これがなんでかはわからないらしい
あまり業務でStreamを触ることがないのでなんとも。。
「IntelのEdisonで最新版のNodeを動かす」 by niccolli さん
niccolliさんはアキバの家電メーカーで電気回路の設計をしている
Intel Edison is 何?
- 小型Linuxボード、各種無線LAN、Bluetooth
- Arduino互換の言語 / Node.jsで書ける
- 組み込まれているNode.jsが古い
- 今年6月ではv0.12、最新FWでやっとv4.4.3
組み込まれたNode.jsをアップデートしよう!
Node.jsを更新するには?
公式のLinux Binariesの32bitを落として入れれば動く。
Edisonの中身はx86のLinuxで、Edision内部でビルド必要なしで、公式バイナリがそのまま動く。
USB接続で、Node.jsバージョンの切り替えを実演してた。あんなに小さいのにすごい!
「プロセスをしょうもないErrorで落とさないように頑張る」 by mookjp さん(古川さんの同僚)
要約
- Node.jsでサーバをつくってるときに難しいと感じた点
- 具体的にどういうことが起こったか
- エラー処理をどう書くか
下記Qiitaを元にしたLT
qiita.com
TL;DR
プログラマが想定していなかった例外でプロセスが落ちる問題にPromiseで対処する
想定外のエラーでプロセス終了事案
- WebSocketのクライアントとサーバがあり、サーバではイベントループ中に様々な処理をしている。
- JSON.parseがうまくいかなかったなど想定外のエラーで巻き添えで死んでしまう。
- 利用しているライブラリから想定外のErrorをthrowされると…
プロセスを無駄に落とさずに処理できる現実的なエラー処理
1.try-catchで書く
いわずもがな
2.非同期処理はPromiseで書くこと
同期処理時のthrowsも、非同期処理時のエラーオブジェクトも両方Promise.catch()でつかむことができる。
Promise内部でtry-catchをしてくれている。
Errorがトップレベルまで突き抜けることはなくなる。
3.unhandledRejectionイベントでログ出力
Promiseがrejectされたが、Promise.catch(func)処理がなかった場合に発火されるイベント。
Promise.catchし忘れの凡ミスでプロセスが落ちないように。
process.on('unhandledRejection', func)を書いておいてログ出力する。
最悪ログを出しておけば後で直せる。
これがないとNodeに握りつぶされるので、バグに気づかないかも・・・
4.uncaughtExceptionで終了処理させる
ログ出力してプロセスを終了させる。
uncaughtExceptionはV8レイヤでキャッチされているので、無理に継続するとイベントやプログラムの状態がおかしくなる可能性があるので復旧しないほうがいい。
yosuke furukawa さんの 「Node.js における Promise を使った例外処理」で詳しく
yosuke-furukawa.hatenablog.com
現場のコードはES6だけど、まだPromiseを使っていないので今後の参考にさせていただく!