Slide 1

Slide 1 text

TATSUNO Yasuhiro 2024.6.28 Kyoto.js #29 TATSUNO Yasuhiro Bun に LCOV 出力を実装した

Slide 2

Slide 2 text

自己紹介 - TATSUNO Yasuhiro @exoego on GitHub, 𝕏(Twitter) - TreasureData 所属 Staff Engineer, Realtime 2.0 CDP - 今出川FMリスナー、BACKYARD HATENAリスナー - 京都は名古屋から実質1駅なので来ました

Slide 3

Slide 3 text

わたしと JavaScript 3年間 Isomorphic Scala.jsで 開発してました 最近は主に TypeScript で  メシを食べています

Slide 4

Slide 4 text

コードカバレッジ - テストでカバー(実行)されてるコード量の割合 - ライブラリだったらどっちを使いたい? - カバーされてないコードが示唆するもの - 不要になったコードかも? - テストケースが足りてないのかも? - テストしにくいのかも? 13%

Slide 5

Slide 5 text

爆速 JS/TS ランタイムとウワサの     Bunに LCOV出力を実装しました❗ $ bun test --coverage --coverage-report=lcov デモ

Slide 6

Slide 6 text

LCOV とは - 2002年登場の歴史あるカバレッジ記録フォーマット - 言語非依存、多くのツール(Jest, Vitest, RSpec…)で 出力できる - Jenkins, CodeCov, Coveralls, Sonar などにアップすると 継続的にカバレッジ≒コード品質の1つを見れる Linux test project gCOV extension 要は LCOV があればカバレッジ利用が捗る

Slide 7

Slide 7 text

Bun への実装にいたるまで 1. 仕事で使いだした Hono の AWS Lambda Adapter の バグを踏んで直したり、高速化したりしていた 2. Hono の品質≒カバレッジが見たくなり、CodeCov を  提案、導入した 3. Hono で一部使われる bun test のカバレッジを取れな いことが気になりすぎた 4. Bun に根性でプルリクしてマージされた(6日前) 1. 仕事で使いだした Hono の AWS Lambda Adapter の バグを踏んで直したり、高速化したりしていた

Slide 8

Slide 8 text

bun test とは ● Bun に組み込まれたテストランナー。Jest の API 互換 ● 速い! テストの内容次第だが bun test > vitest > jest というウワサ…… ● カバレッジ出力はコンソールのみ先行実装 ● LCOV 出力の issue は10ヶ月手付かずだった……

Slide 9

Slide 9 text

手つかずなんて ムズすぎるのかな😨 …… kyoto.js に向けて 行くしかねぇ😤

Slide 10

Slide 10 text

大変だったところ 1/3 LCOV の公式ドキュメントが…ない⁉ ● LCOV を利用するツールのマニュアルに記述をなんとか 発見 https://manpages.ubuntu.com/manpages/mantic/man1/geninfo.1.html ● 他実装の出力を見て「この属性はなくても動くっぽい」 などと情報を補う ● 実際に生成した LCOV を            CodeCov に与えて動いたからヨシ! 仕事猫 ©くまみね

Slide 11

Slide 11 text

大変だったところ 2/3 Bun 実装に使われる Zig 言語になれない ● 初めて触った。TS や Rust に微妙に似た alt C 感。   けっこう違うのでコンテキストスイッチ疲れる ● Intellij IDEA + Zig プラグイン + LSP だと、入力補完や 定義元ジャンプがめちゃ弱く、読み解くのに一苦労 ● Zig の std ライブラリの使い方は            ドキュメントあるのでなんとかなった

Slide 12

Slide 12 text

大変だったところ 3/3 ローカルで動いたのに CI でコケる…… ● 配列をゼロ初期化しておらず、デバッグビルドの未定義 動作に依存してしまっていた。CI はリリースビルド ● Bun 作者    Jarred さんがズバッと修正してくれた ● 爆速にするために必要なんだろうけど明示的なメモリの 確保や破棄ってたいへん!(素人目には) ● ふだんは自動ゼロ初期化やガベコレに甘やかされたい!

Slide 13

Slide 13 text

雑感 ● Hono レポジトリのカバレッジ           0.92% 改善に貢献できてハッピー ● bun CLI 叩きまくって速さ実感。人気出てきたのも納得 ● プロダクションで Bun 使う勇気まだないけど、   Node.js と競いあってエコシステム活性化しててハッピー ○ I/O, buffer, base64 が高速化されるなど ○ ブラウザ戦争を思い出しますね〜

Slide 14

Slide 14 text

今後の課題 ● カバレッジから漏れてる行を含められるようにしたい ○ コメントだけの行 ○ 空行 ○ type import ○ ブロック { } の閉じカッコだけの行 ○ などなど