東京は東京でも有楽町だった回。
「Node.js x WebAssembly」 by yosuke_furukawa
WebAssemblyとは
- ポータブルで効率のいいバイナリ
- Nativeと同等の速度を目指す
ユースケース
- ネイティブモジュールをWebで使いたい
- `vim`とか <- 誰がやるん
- https://rhysd.github.io/react-vimjs/
- ゲーム
- ブラウザ外でも使えるけどそんなにターゲットではなさそう
- 全部を置き換えるのではなく、CとかC++で書いてあるものを動かすところから
Node.js x Native Module
- 現時点で、どうやってNative Moduleを使うか
- NAN
- https://github.com/nodejs/nan
- V8のAPI変更を吸収してくれる
- 自由度は高いがbindingコストが・・
- node-ffi
- https://github.com/node-ffi/node-ffi
- 外部呼び出し(Foreign Function Interface)はNodeに限らずある
- emscriptenで`asm.js`に
- https://github.com/kripken/emscripten
- Mozilla提唱の`asm.js`
- jsになっちゃうのでファイルサイズが↑↑
- emscriptenで`wasm`に
- V8の最新だと普通に動く
- JITが効かなそうな処理でないと恩恵が薄いかも
- stable module ABI
- https://github.com/nodejs/abi-stable-node
- まだNodeに対してはp-rがきてるだけ
「Node.js+GraphQLでBFFを作った話」 by qsona
- BFF is Backend For Frontends
- クライアントとバックエンドの間のバックエンドサーバー
気をつけたこと
- ドメインロジックは持たないように
- リクエストをまとめる役割だけに
- 手探り = 何があるかわからないので、やりすぎない程度に
やらなかったこと
- レスポンスの整形
- 更新処理をまとめるとか
Why Node.js
- フロントエンドの人でもさわりやすいように
- 他にハマる言語がなかった
Why GraphQL
- 柔軟なクエリがかける
- 型もある
- Backendをリソース指向にしていくと、束ねる役割が欲しくなる
- 凝集度も下げられる
導入後の問題
- 特定のキーだけ欲しいみたいなケースがあまりない
- 変にクエリを変えるとキャッシュが効きにくくなる
- 改善したい内容がかぶる
- Backend: JSON Schema / BFF: GraphQLTypes / Client: 腐敗防止層
- どこでやるべきか
- チーム的にも結合度が高いなら、普通に内製したほうがよい場面も
- GraphQLIntは32bitまで・・・
振り返り
- 一部だけで使うより、やっぱり全部通したい
- とりあえずBFF置く、まずは全APIをProxyする
- そしてstep by stepでみたいな進め方のほうが良かったかも
「HyperApp - 1kbのビューライブラリ」 by Jorge Bucaran
HyperApp
- https://github.com/hyperapp/hyperapp
- gzipで1kb以下
- なのにパフォーマンスはReactと遜色ない
- ルーター機能まで入ってるよ
- Reactはheavyだったので自作した
- V-DOMの実装はミニマルなものを探した
コードの雰囲気
- app = model + actions + view
- JSXもかけるよ
- 0 dependencies
- 300行くらい
- これから
- rAFでパッチするようにしていきたい
- SSRできるようにしたい
- REPLとかも
「node-whatwg-url」 by abouthiroppy
whatwgとは
- ざっくり言うと、Webのいろいろな仕様を管理しているところ
- URLはその中で管理されてるひとつ
URL
- 準拠な実装 -> https://github.com/jsdom/whatwg-url
- これを完成させるのは、Node.jsが担うミッションのひとつ
- 仕様としてのStageは1
- IDLはこんな感じ
- `new URL(args)`した`url.searchParams`にはいってるのが`URLSearchParams`
- Nodeには既に`qs`というライブラリがあるが、それとは役割が違う(あくまでURLのためのもの)
- 内部的な?UtilityっぽいAPIも
- domain to ASCII
- domain to Unicode
「llnode」 by kysnm
llnode
- えるえるのーど
- Node.js C++ lldb plugin
- lldb
- LLVM系の言語のためのデバッガー
- 「LLDB is the default debugger in Xcode on Mac OS X」らしい
- http://lldb.llvm.org/
- 公式のデモが雰囲気をみるのにわかりよい(しかし長い)
「OSS翻訳と GitLocalize」by sotayamashita
資料は見つけたら
翻訳でOSSに貢献
- OSSに貢献したい・・でも敷居が高い・・そんなあなたには翻訳がおすすめ!
- ドキュメントを読む・調べるので自然と詳しくなる
- コミュニティに溶け込める + 存在感UP -> 今後もやりやすくなる
- 母国語があるので技術・コミュニティがより活性化
問題
- 公式(だいたい英語)だけが最新で、他の言語が追いついてないことが多い
- というのが色んなコミュニティで問題になってる
GitLocalize
- https://gitlocalize.com/
- 先月パブリックベータ
- GitHubでForkしてきて、翻訳してく
- レビューしてもらってコミットして育っていく
- GitHubに似たデザインで使いやすい
- Nodeのドキュメントの翻訳も進めていきます
「glitch.comでnode.jsのアプリを作る話」 by kosamari
資料は見つけたら
- 技術の勉強した成果物どこに置こう問題
- クライアントサイドの技術だけで済むならGitHubとかでもいい
- でもサーバーサイドが必要になるやつもある
- どうしようーーー・・
そこでGlitch
- https://glitch.com/
- コラボレーションできるWebIDE
- StackOverflow作った会社と同じ系譜の人たち
- リアルタイム
- いじった内容はGitHubにコミットもできる
いいところ
- ファイルが階層化されて1つずつ編集できる
- codepenとかは3ペイン見えてるので、初心者的に混乱する
- `npm start`みたくscriptsが書ける・動く
- 実行ログもちゃんと出る
- とにかくさくっと書ける!
- 設定でjs疲れやってないでコード書け
もうちょいなところ
- 独自ドメインはまだできない
- `alert()`がUIだったりする
- いろいろベータ版なところがあるよ