Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Bun に LCOV 出力を実装した
Search
TATSUNO Yasuhiro
June 28, 2024
Programming
2
280
Bun に LCOV 出力を実装した
Kyoto.js 22
https://kyotojs.connpass.com/event/321343/
TATSUNO Yasuhiro
June 28, 2024
Tweet
Share
More Decks by TATSUNO Yasuhiro
See All by TATSUNO Yasuhiro
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
780
terraform-provider-aws にプルリクして マージされるまで
exoego
2
470
ライブラリをパブリッシュせずにすばやく試す
exoego
2
310
esbuild 最適化芸人
exoego
3
2.3k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
830
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
88
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
790
Scala と AWS でフルサーバーレス開発事例 / How Chatworks uses Scala and Serverless
exoego
3
1.6k
忙しい Scala 開発者の超時間節約術 / Big Timesavers for Busy Scala Developers
exoego
1
1.2k
Other Decks in Programming
See All in Programming
問題の見方を変える「システム思考」超入門
panda_program
0
190
What’s Fair is FAIR: A Decentralised Future for WordPress Distribution
rmccue
0
150
FlutterKaigi 2025 システム裏側
yumnumm
0
750
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
140
Inside of Swift Export
giginet
PRO
1
530
SUZURIの規約違反チェックにおけるクリエイタフィードバックの試⾏錯誤/Trial and Error in Creator Feedback for SUZURI's Terms of Service Violation Checks
ae14watanabe
1
140
Functional Calisthenics in Kotlin: Kotlinで「関数型エクササイズ」を実践しよう
lagenorhynque
0
110
ビルドプロセスをデバッグしよう!
yt8492
0
290
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
0
730
CloudflareのSandbox SDKを試してみた
syumai
0
130
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
240
Kotlin + Power-Assert 言語組み込みならではのAssertion Library採用と運用ベストプラクティス by Kazuki Matsuda/Gen-AX
kazukima
0
110
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
The Cult of Friendly URLs
andyhume
79
6.7k
Optimizing for Happiness
mojombo
379
70k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Designing Experiences People Love
moore
142
24k
Code Review Best Practice
trishagee
72
19k
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
TATSUNO Yasuhiro 2024.6.28 Kyoto.js #29 TATSUNO Yasuhiro Bun に LCOV
出力を実装した
自己紹介 - TATSUNO Yasuhiro @exoego on GitHub, 𝕏(Twitter) - TreasureData
所属 Staff Engineer, Realtime 2.0 CDP - 今出川FMリスナー、BACKYARD HATENAリスナー - 京都は名古屋から実質1駅なので来ました
わたしと JavaScript 3年間 Isomorphic Scala.jsで 開発してました 最近は主に TypeScript で メシを食べています
コードカバレッジ - テストでカバー(実行)されてるコード量の割合 - ライブラリだったらどっちを使いたい? - カバーされてないコードが示唆するもの - 不要になったコードかも? -
テストケースが足りてないのかも? - テストしにくいのかも? 13%
爆速 JS/TS ランタイムとウワサの Bunに LCOV出力を実装しました❗ $ bun test
--coverage --coverage-report=lcov デモ
LCOV とは - 2002年登場の歴史あるカバレッジ記録フォーマット - 言語非依存、多くのツール(Jest, Vitest, RSpec…)で 出力できる -
Jenkins, CodeCov, Coveralls, Sonar などにアップすると 継続的にカバレッジ≒コード品質の1つを見れる Linux test project gCOV extension 要は LCOV があればカバレッジ利用が捗る
Bun への実装にいたるまで 1. 仕事で使いだした Hono の AWS Lambda Adapter の
バグを踏んで直したり、高速化したりしていた 2. Hono の品質≒カバレッジが見たくなり、CodeCov を 提案、導入した 3. Hono で一部使われる bun test のカバレッジを取れな いことが気になりすぎた 4. Bun に根性でプルリクしてマージされた(6日前) 1. 仕事で使いだした Hono の AWS Lambda Adapter の バグを踏んで直したり、高速化したりしていた
bun test とは • Bun に組み込まれたテストランナー。Jest の API 互換 •
速い! テストの内容次第だが bun test > vitest > jest というウワサ…… • カバレッジ出力はコンソールのみ先行実装 • LCOV 出力の issue は10ヶ月手付かずだった……
手つかずなんて ムズすぎるのかな😨 …… kyoto.js に向けて 行くしかねぇ😤
大変だったところ 1/3 LCOV の公式ドキュメントが…ない⁉ • LCOV を利用するツールのマニュアルに記述をなんとか 発見 https://manpages.ubuntu.com/manpages/mantic/man1/geninfo.1.html •
他実装の出力を見て「この属性はなくても動くっぽい」 などと情報を補う • 実際に生成した LCOV を CodeCov に与えて動いたからヨシ! 仕事猫 ©くまみね
大変だったところ 2/3 Bun 実装に使われる Zig 言語になれない • 初めて触った。TS や Rust
に微妙に似た alt C 感。 けっこう違うのでコンテキストスイッチ疲れる • Intellij IDEA + Zig プラグイン + LSP だと、入力補完や 定義元ジャンプがめちゃ弱く、読み解くのに一苦労 • Zig の std ライブラリの使い方は ドキュメントあるのでなんとかなった
大変だったところ 3/3 ローカルで動いたのに CI でコケる…… • 配列をゼロ初期化しておらず、デバッグビルドの未定義 動作に依存してしまっていた。CI はリリースビルド •
Bun 作者 Jarred さんがズバッと修正してくれた • 爆速にするために必要なんだろうけど明示的なメモリの 確保や破棄ってたいへん!(素人目には) • ふだんは自動ゼロ初期化やガベコレに甘やかされたい!
雑感 • Hono レポジトリのカバレッジ 0.92% 改善に貢献できてハッピー • bun CLI
叩きまくって速さ実感。人気出てきたのも納得 • プロダクションで Bun 使う勇気まだないけど、 Node.js と競いあってエコシステム活性化しててハッピー ◦ I/O, buffer, base64 が高速化されるなど ◦ ブラウザ戦争を思い出しますね〜
今後の課題 • カバレッジから漏れてる行を含められるようにしたい ◦ コメントだけの行 ◦ 空行 ◦ type import
◦ ブロック { } の閉じカッコだけの行 ◦ などなど