Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bun に LCOV 出力を実装した

Bun に LCOV 出力を実装した

TATSUNO Yasuhiro

June 28, 2024
Tweet

More Decks by TATSUNO Yasuhiro

Other Decks in Programming

Transcript

  1. 自己紹介 - TATSUNO Yasuhiro @exoego on GitHub, 𝕏(Twitter) - TreasureData

    所属 Staff Engineer, Realtime 2.0 CDP - 今出川FMリスナー、BACKYARD HATENAリスナー - 京都は名古屋から実質1駅なので来ました
  2. LCOV とは - 2002年登場の歴史あるカバレッジ記録フォーマット - 言語非依存、多くのツール(Jest, Vitest, RSpec…)で 出力できる -

    Jenkins, CodeCov, Coveralls, Sonar などにアップすると 継続的にカバレッジ≒コード品質の1つを見れる Linux test project gCOV extension 要は LCOV があればカバレッジ利用が捗る
  3. Bun への実装にいたるまで 1. 仕事で使いだした Hono の AWS Lambda Adapter の

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

    速い! テストの内容次第だが bun test > vitest > jest というウワサ…… • カバレッジ出力はコンソールのみ先行実装 • LCOV 出力の issue は10ヶ月手付かずだった……
  5. 大変だったところ 1/3 LCOV の公式ドキュメントが…ない⁉ • LCOV を利用するツールのマニュアルに記述をなんとか 発見 https://manpages.ubuntu.com/manpages/mantic/man1/geninfo.1.html •

    他実装の出力を見て「この属性はなくても動くっぽい」 などと情報を補う • 実際に生成した LCOV を            CodeCov に与えて動いたからヨシ! 仕事猫 ©くまみね
  6. 大変だったところ 2/3 Bun 実装に使われる Zig 言語になれない • 初めて触った。TS や Rust

    に微妙に似た alt C 感。   けっこう違うのでコンテキストスイッチ疲れる • Intellij IDEA + Zig プラグイン + LSP だと、入力補完や 定義元ジャンプがめちゃ弱く、読み解くのに一苦労 • Zig の std ライブラリの使い方は            ドキュメントあるのでなんとかなった
  7. 大変だったところ 3/3 ローカルで動いたのに CI でコケる…… • 配列をゼロ初期化しておらず、デバッグビルドの未定義 動作に依存してしまっていた。CI はリリースビルド •

    Bun 作者    Jarred さんがズバッと修正してくれた • 爆速にするために必要なんだろうけど明示的なメモリの 確保や破棄ってたいへん!(素人目には) • ふだんは自動ゼロ初期化やガベコレに甘やかされたい!
  8. 雑感 • Hono レポジトリのカバレッジ           0.92% 改善に貢献できてハッピー • bun CLI

    叩きまくって速さ実感。人気出てきたのも納得 • プロダクションで Bun 使う勇気まだないけど、   Node.js と競いあってエコシステム活性化しててハッピー ◦ I/O, buffer, base64 が高速化されるなど ◦ ブラウザ戦争を思い出しますね〜