mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです.

2018-12-26

情報収集

最近情報収集をちょっとサボっていたので冬休みを使って消化している. あまりにサボりすぎてPocketsの底は見えないし, Chrome for Androidのタブ数は :D になっていてとにかく大変. 頑張って消化していきたい.

一応サボらないための工夫はあるのだけど, 感情を利用した素朴なものだったりする. 「Twitterにシェアする記事は基本的に最後まで読んだものにする」という, とにかく最後まで読むことを強制するというもの. 特に良い記事の場合は「良い記事なのでシェアして皆に見てもらいたい!」という心理が働くので, 結構効果的に機能する.

結局「時間的」余裕が無いことよりも「心理的」余裕が無いことにより情報収集をサボることが多い気がしていて, 今回サボったのもその面が大きい. もう少し心理的な障壁を無くす工夫を考えていきたい.

bet

Webフロントエンド周りの情報収集しながら, 今後Webフロントエンドはどんな技術・ライブラリが躍進し, 衰退するのかを考えていた. 例えばWebComponent, Preact, WebAssembly, off the main thread, React vs Vue.js, Node.js vs deno, TypeScript vs other AltJS, Rust/WebAssembly vs AssemblyScript/WebAssemblyといったもの. どれが筋が良いか, 将来的に成長するか, 信頼できるか, どれにbetすると将来的に幸せになれるか. 必ずしも答えがあるものではないので無駄かもしれないけど信頼できないものに足元を任せるのは怖いので, よくこういうことを考えている.

最近のJavaScriptはTypeScriptのお蔭で治安良くなってきたし, 暫く (3年くらい) はJavaScriptにbetし続けて良い気がしている. 実際rust-wasmを見ていると (これはrust-wasmの思想というよりはwasmの思想だけど) WebAssemblyとJavaScriptの共存を考えて*1/既存のWebのエコシステムに載るよう設計されているし*2, 過去のDartのようなJavaScriptを完全に置き換える野心的なプロジェクトも (観測している限りでは) 見かけない. Proposalに上がっているPipeline OperatorPattern Matchingも仕様に入れば今よりは書きやすくなるだろうし, 割と楽観的に見ている.

WebAssemblyはどうだろう. 現状Rust/WebAssemblyの情報はwatchしているけど, バックにMozillaが付いているので見ていて安心感が凄い. wasm-bindgen, js-sys, web-sysなど, JS-wasm間の穴を埋めようとする動きが活発なのも良い. あとwasm-bindgenはHost Bindingsのpolyfill的な位置づけになっているのもちゃんと未来を見据えている感じがして信頼できる. どうでも良いけどrust-wasm関連のプロジェクトの大多数にalexcrichton氏が関わっていて異常. どこ見てもalexcrichton氏が出てくる. すごすぎる.

AssemblyScriptは全然watchしていないのでよく分からないけど, 静的型の付いたJavaScriptを書いていたら勝手に速くなっていたという未来は確かに来て欲しい. 折角静的型があるのに今はそれをトランスパイル時に削ぎ落としてしまっていて勿体無いと思っている. それでいうとdenoにも注目していたりする. よく分かってないけどMicrosoftあたりがTypeScriptをLLVMにコンパイルするコンパイラ作ればdenoにもwasmにも使えてハッピーそう?

React vs Vue.jsについても考えてみる. 個人的には界隈全体が生のJavaScriptからTypeScriptへと移行していく流れがある中で静的型が付きにくいAPIをしているVue.jsは中々近寄りがたい. Vue.js v3では本体がTypeScriptで書き直されるとの話があるので, JavaScriptから触れるAPIは静的型が今よりもずっと付くだろうけど, 現状エディタによる型支援が受けられていないtemplateはv3でも殆ど変わらないと言っているので不安になる. と思ったけどtemplateにsource mapが付くという話もあるので, それで解決されそう? Reactは新しく登場した/登場するHooksやSuspendを使ってコンポーネント構築のベストプラクティスを探していく段階にあると思っていて, また暫く賑やかになりそう. 来年はReactを積極的に使ってみようかな.

*1:「WebAssembly は JavaScript と異なる言語ですが、その置き換えを意図していません。」引用元: WebAssembly のコンセプト | MDN

*2:rust-wasmはスレッドにwebworkerを, スレッド間のリソース共有にSharedArrayBufferを利用しており, 車輪の再発明を避けている. 参考: Multithreading Rust and Wasm | Rust and WebAssembly