Week 44 - 2018
The weeknote for 10/29 - 11/4.
OSS
denoland/deno
deno は新しい V8 runtime.
-
JSON が import できるようになった.
- https://github.com/denoland/deno/pull/1065
- 個人的には, json の import は標準から外れる機能なので, deno namespace 以下の機能として実装される方が自然な気がした.
-
Web API をみんなで分担して実装する issue
-
Clippy
- https://github.com/denoland/deno/pull/1149
- clippy という rust のリントツールの修正を入れる PR. この後 liny.py に含める作業をやっていくっぽい.
MyProject
kt3k/buttons
🌱buttons は毎日やるタスクのボタンを作って, その記録をカレンダーヒートマップ表示する web サービス.
- uglify を入れたり, preset-env の target をきちんと設定したりして, バンドルサイズを 1.2MB から 600KB まで落とした.
- バンドル内で大きいのが, D3 v3, date-fns, cal-heatmap, core-js あたり. date-fns は requrie する path を絞ればもう少し減るかもしれない. 一番大きい D3 が v3 のため, 分割が不可能なのが痛い. D3 v4 以上であれば, 必要コンポーネントだけに限定することが出来るが, そのためにはまず cal-heatmap の依存を D3 v4 に上げる必要があって, まともにやろうと思ったら数ヶ月はかかりそう. あと core-js がかなり大きいのが非常に不可解で, decorators-legacy を入れると core-js が丸っと乗ってくるらしく, 明らかにやりたい事と積まれているバイト数のバランスが釣り合っていない. core-js はいつかは消したいけど, babel の変換の中身まで見にいかないといけない為, コストが高すぎる為断念した. 感覚的には本当にやっている事だけに絞られたバンドルなら 50K 程度は行けそうな気がする.
- activity feed を実装した. 誰かがボタンを押した時と, 誰かがボタンを作った時に feed に乗るというシステム. まず activity のドメインモデルを追加して, service を追加して, route を追加して, テストを書いて, frontend で activity を取得するコンポーネントを書いて, と, やりたい事のボリュームと, 必要な作業のボリュームが線形に対応している感じで, 非常に開発がスケールしていると感じた.
調査
new decorators
- capsid の decorators を新 decorators に対応したい為, まず新 decorators の挙動を調査し始めた.
router
- capsid にそろそろきちんとした router を備えたいと思った為, 各種 router を調査した.
- react-router@4, @reach/router, universal-router, vue-router, riot-router, history などを調査した.
- 中でも riot-router は riot.js の依存がなく単独でシンプルな route 監視ツール兼 route 遷移ツールとして使えそうだったため, capsid の router を作る場合は riot-router ベースで作るのが良さそうと思った. サイズも minified + gzip で 2K を切るので, capsid 本体とほぼ同サイズ. react-router のコアの history は react 依存がない状態になっているものの browser 以外もサポートしていたりしてサイズが 5KB もあり使う気にならない. @react/router は割とシンプルそうな読みやすい実装になっているもの react 依存のないコア部分を切り出してくれていないため再利用不可能, 残念. universal-router はちょっと想像していたものと違って, route を監視する機能とか route を移動する機能を持っていないぽくて, 使い物にならなそうだった.
仕事
React Hooks
- React Hooks という新しい API 群が発表された. renderProps や HOC を置き換える機能. ライフサイクルや, state のような基本的な機能も置き換えるもので, 今まで class component でしか出来なかった事が Hooks で出来るようになる.