NodeConf Adventure 2015 に行ってきました。(三日目、四日目に起きたこと)
さて、三日目と四日目に起きたことを書いていくよ!
三日目も同様にアンカンファレンス形式でスタート
ホワイトボード見てもらって分かるかもしれないけど、 Diversity, Documentation, JS Modules, Streams, FrontEnd Packaging, Error Handling などが三日目の議題だった。
JS Modules の話
bower 使ったり jspm 使ったり、 はたまた npm + browserify 使ったりと戦国時代状態のフロントのパッケージモジュールに何使うべきかっていうディスカッション。まだみんないろいろ試してる感じだったけど、 npm + browserify と monolithic な JS library の相性が悪くて、どうするべきかっていう話が一番面白かった。
Workshop 会場にて: package module どないすんねんっていう話が出てる、 npm + frontend か jspm か、、、とにかく bower 嫌いって言ってる。
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
jspm, npm + browserify, bower, webpack でどういう時に何を使うの? っていう話
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
依存ツリーがひどくなって、沢山モジュールロードしたけどそれ毎に jquery とか lodash があるとかひどい状況だからそれだけは回避したいという話。 npm + browerify だとどうなるのか。
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
ここでの学びとしては、 npm + browerify 派は もう絶対に monolithic な library は使うべきじゃないって言うこと。 like jQuery lodash
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
React を利用した結果、全てのページをモジュールの塊として表現できるようになってきて、 その考え方が npm の module と相性が良いという話
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
というわけで、全体のエコシステムは npm + browserify とか npm + jspm に向きつつも、 jQuery ライクな monolithic な ライブラリーはやめて unix philosophy な小さいライブラリを作っていくのが常套手段という感じだった。
ただ誰も WebComponents の話をしてなくて、 ES6 modules とか browserify の話は出てくるけど、 WebComponents で ページのコンポーネントを作るという考え方も本来はあるはず。CSSもそのパッケージモジュールに載せたいっていう話が多かったけど、NodeConfでは誰もWebComponents の話はしてなかったのが気になった。
ただ、果たして WebComponents のHTMLにsemanticsを持たせて、moduleに分割する考え方と全てをjsでやる npm + browerify 勢は理解しあえる日が来るのだろうか
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
Error ハンドリング
Node.js のエラーハンドリングという普遍的なテーマについての議論、 domains についての話と zone っていう strongloop 製のライブラリの紹介がメインだった。domains があまり使えないっていう話は mozaic.fm でもしたけど、ここでも同じ議論。
error の会。
まずは error には user handle error と system error みたいな unhandle なエラーが有るということ。
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
domain が必要になるようなケースは edge case なのではないかという話
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
zones #nodeconf / “StrongLoop | Announcing Zones for Node.js” http://t.co/AmuPYhA9KQ
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
Zoneの話、面白くて色々見てたら Dart にも Angular にも同様の機能があったりして、ちゃんとやってみてもいいかもって思った。
中身の構造を見てみると domain とすごくコンセプトは似ているんだけど、全く違った実装で作られていて、 zone によって限定された範囲をトラップするためにsetImmediate/setTimeout を拡張したり割りと global を拡張してるので、すごい力技で実装されていた(この力技のところが逆に受け入れがたい印象も受けた)。
あと、『そもそも例外が上がった時点で終わりだろ、本当にやばい時以外、例外上げるべきじゃない』っていう議論もあった。
Interview with @bad_at_math
DeNA SF に転籍した bad_at_math さんこと、篠崎さんとエラー/例外の話をした(日本語)。
俺: 「例外が上がった時点で終わりっていうのってどうなんですかね、ちょっとそうも行かない気が」
BAM:「まぁでもある程度わかるかなぁ、本当にやばい時じゃないとそういう時に陥らないように設計してる」
俺:「例えばmysql へのアクセスでたまたま接続不良で例外上がったりしますよね、そういう時どうするんですか」
BAM:「例外の中にも種類があって、絶対復旧不可能な奴とリトライで対処可能な奴でいくつか種類がある。この中でも絶対復旧不可能な奴は本当の例外として扱うべきで、こういう時はアプリケーションのプロセスが生きててもしょうがないからそういう例外が上がった時点で終わりっていうのは分かる。」
BAM:「一方で一時的な接続不良みたいな奴はリトライしたら大丈夫っていうパターンが多いからそういうのはプロセス終わりにしない、ちゃんとMySQL で言うと戻り値のエラーの種類を見分けてどうするのか決めてる。」
※ エラーの種類一覧 http://dev.mysql.com/doc/refman/5.6/en/error-types.html
俺:「なるほど、ミドルウェアのドライバーから上がった例外をちゃんと適切にハンドリングできているの初めて知ったかもしれないです。domainとかは使ってます?」
BAM:「domainかなり助けられるケースが少ないんだよね。ほぼほぼ使ってない」
最後に (Ex含む)DeNA チームでパシャリ
Diversity の話
この話が NodeConf 行ってきた中で一番面白かった Diversity の話。
Diversity っていうのは "多様性" っていう意味で、どうやって多様性を認める文化にするかっていうコミュニティ運営の話だった。
技術的な話というよりは本当に運営の話で、OSSというかインターネットのコミュニケーションは相手の顔が見えないとちょっと語気を強めに言う傾向にあって、そういう事がこのコミュニティの中であってはいけないし、どんな人でも発言できるコントリビュートを表明できる必要があるという話だった。
初心者も何年も関わっている人もフラットで平等に扱われるべきだし、間違っても個人の尊厳を深く傷つけるような行動はあってはならない。一人の意見を尊重しようという話。
詳しくはここにまとめてくれている人がいるので詳細を知りたい人は読んでみて欲しい。
Challenging Diversity at NodeConf | The True Entrepreneur Corps
簡単に説明すると、
1. 全員が共通して持っている弱みを把握しよう
他人を犠牲にしてまで自己を過剰に防衛する事をやめよう、という話。
実行可能な批判は受け入れるべきだし、その批判に対して過剰に反応して防衛したり攻撃するのは避けるべき。
常にインプットをコントリビューションの一部として好意的に捉えて維持するのは難しいんだけども、個人の考えを尊重するべきだし、間違っても人のプライドを傷つけるような事があってはいけない。
2. Collaboration > Competition
競争よりも協力。
必ずしも競争が悪ではない、健全な競争は受け入れた方がいい。でも競争が問題をストップさせる事もある、そういう時は議論の視点を元に戻して考えなおすべきだ、という話だった。
3. 模範によって導く
npm には guys jar っていう制度がある。 "Guys" っていう言葉を男女混合のグループを指す意味で使ったら $1 払って jar に入れるっていう制度だ。
(これは opt-in policy なので強制じゃなくて任意参加らしい)
コミュニティのリーダーは率先してそういう模範を示して欲しいという事だ。 guys jar は単なる罰ゲームじゃなくて、率先してそういう事を表明する事で gender の差をちゃんと自覚してみんなを導くという行為。
こういうのは Node にもあってもいいんじゃないかという話が出ていた。
結果として、ドキュメントのための WG ができて、そこでドキュメントに記述していい言葉が決められることになった。
以下がちょっとした例。
ユーザーを指すときの言葉として使っていいものと使っちゃいけないものの例。
OK: "they", "their", "them", "folks", "people", "developers", "cats"
NOT OK: "his", "hers", "him", "her", "guys", "dudes".
4. 「Ouch」っていう発言を信頼しよう
コミュニティのメンバーが自分の世界とは違った問題を報告したとする、そういう時に無視するべきではない。
例えば npm ユーザーはたまに Windows マシンで npm を使うことの難しさに不平不満を言う事がある。
Windows の問題はしばしば文化的なジョークとして捉えられる事がある。だからこういう Windows の問題は無視されやすい。でもそういうのは起きるべきじゃない。そういうのがずっと積み重なるといつかコミュニティは廃れていく。
npm ではこういう Windows の問題は出来る限り対応しているし、一般的なルールとして、聞く => 聴く => 反応する の順で発言は対応するべきだという話だった。
こういう話が行われているメタなカンファレンスを僕は知らなかったし、この議論はすごくおもしろかった。
僕はローカルコミュニティのリーダーをやって一年になるわけだけど、こういう目線の話をちゃんと自覚して考えたことがなかった。 Diversity の話はちゃんと記憶にとどめて活動していこうと思った。
Performance Monitor Session
パフォーマンスモニタリングのワークショップで、メモリリークの特定とか、 CPU 100% になったときにどこが悪いのかを見つける方法の話だった。
dkhan の話は具体例も多くて面白かったけど、途中から StrongLoop の人が俺たちのやり方紹介するよって言い出して解説が始まったのがすごく面白かった。
cpu profiler をとって、frame graph で重いところを見つけて、 IRHydra で v8 がどういう風に optimize してるかを見るっていうのが一番良いという話。
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
Tessel Hack
tessel のワークショップがあったのでそこに参加して色々やってきた。
tessel を hack してる
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
tessel で撮った写真 pic.twitter.com/vNkWlMzq4s
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
tessel 入門して 15 分でカメラで写真が撮れた!
— Yosuke FURUKAWA (@yosuke_furukawa) June 13, 2015
Tessel 本当に素晴らしくて、レゴブロックみたいにスロットに何か差しこむだけで色んなものを動かすことができて本当に面白かった。
カメラで撮影するだけだったらサクッとできたし、 @maxogden と話した時に Max は自転車に取り付けてずっと風景を撮影させてるとか言ってて、むちゃくちゃ面白そうだった。
この辺は勉強会でも取り扱ってもいいかもなぁと思った。
Tessel, Performance Monitoring の人達とパシャリ
最後のキャンプ
最後のキャンプで NodeFest の話をしてきた。
『NodeFest は 11/7(土) に実施する予定で、場所は渋谷、もしも NodeConf の人達が来てくれたら寿司をおごるよ』って言ったら
みんなが「ワー!!」って拍手してくれた。
Thank you all for an amazing experience at @nodeconf! See you on the interwebs #pandaqueen #NodeConf #InPictures pic.twitter.com/oJPLwO7mIv
— Thomas Watson (@wa7son) June 14, 2015
本当に色々キャンプとしても面白かったし、色んな話ができてめっちゃ楽しかった。
来年も行けるといいなぁ。
Great talk about package management
@nodeconf pic.twitter.com/nGNXb0kL6w
— Kevin (@kyoukhana) June 13, 2015
Mixing #NatureTechnology in @nodeconf adventure pic.twitter.com/y7mIFtqHEK
— Citrus Taller (@CitrusTaller) June 12, 2015
#nodeconf pic.twitter.com/AofPPcdnlD
— tylerbushnell (@wunderlinks) June 14, 2015
@design48 @nodeconf @mrbrookman #nodeconf pic.twitter.com/sOKrjkpbTg
— =^._.^= (@maxogden) June 14, 2015
Node.js の API をジェスチャーして当てるっていうゲームがめっちゃ楽しかった。知らない人とでも仲良くなれるし、俺の英語力は低いからジェスチャーの難易度が高くなってみんなからお前がやると面白いって言われた。
— Yosuke FURUKAWA (@yosuke_furukawa) June 14, 2015
process.nextTick とかどうやってジェスチャーで表すねんと思ったけど、俺が変なジェスチャーしたら奇跡的に当ててくれて、そこからみんなが process APIの時に俺の真似をするっていうコラボレーション。
— Yosuke FURUKAWA (@yosuke_furukawa) June 14, 2015