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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
TATSUNO Yasuhiro
June 28, 2024
Programming
360
2
Share
Bun に LCOV 出力を実装した
Kyoto.js 22
https://kyotojs.connpass.com/event/321343/
TATSUNO Yasuhiro
June 28, 2024
More Decks by TATSUNO Yasuhiro
See All by TATSUNO Yasuhiro
ゆくKotlin くるRust
exoego
1
280
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
1k
terraform-provider-aws にプルリクして マージされるまで
exoego
2
510
ライブラリをパブリッシュせずにすばやく試す
exoego
2
360
esbuild 最適化芸人
exoego
3
2.7k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
920
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
120
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
840
Scala と AWS でフルサーバーレス開発事例 / How Chatworks uses Scala and Serverless
exoego
3
1.7k
Other Decks in Programming
See All in Programming
Modding RubyKaigi for Myself
yui_knk
0
830
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
11
3.1k
今さら聞けないCancellationToken
htkym
0
210
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
11k
色即是空、空即是色、データサイエンス
kamoneggi
1
240
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
240
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.3k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
140
誰も頼んでない機能を出荷した話
zekutax
0
150
自動レビューエンジンの実装と運用 ~レビューのない世界へ~
kurukuru1999
2
300
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
140
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
2
1k
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
370
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
Docker and Python
trallard
47
3.9k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
280
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Visualization
eitanlees
152
17k
Scaling GitHub
holman
464
140k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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
◦ ブロック { } の閉じカッコだけの行 ◦ などなど