bauer's diary

凡人の凡人による凡人のための備忘録

Node学園 22時限目メモ

eventdots.jp
こちら、参加してきたのでメモる。

「Node学園祭 2016の告知」by yosuke furukawa さん

11/12(土)

  • dotsイベント会場で開催する予定。13日とは異なるので注意。
  • ハンズオンメイン
  • 今年もpaypalがスポンサー

11/13(日)

・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ボード、各種無線LANBluetooth
  • Arduino互換の言語 / Node.jsで書ける
  • 組み込まれているNode.jsが古い
  • 今年6月ではv0.12、最新FWでやっとv4.4.3

組み込まれたNode.jsをアップデートしよう!
Node.jsを更新するには?
公式のLinux Binariesの32bitを落として入れれば動く。
Edisonの中身はx86Linuxで、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を使っていないので今後の参考にさせていただく!

「conventional changelog」 by kazupon さん

changelog(変更履歴)書いてますか?
書かない理由:既にVCSで変更内容とか書いてあるし…
Conventioal Changelogとは
CLIでコミットメッセージ規約ファイルを元に自動生成する
liginc.co.jp

ツール使うことで二度手間にならないなら運用する価値ありそう。

「ReactエンジニアのためのReact Native入門」 by janus_wel さん

speakerdeck.com

ほぼReactそのまま、コンパイル不要ということがでかそう!