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
54
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
terraform-provider-aws にプルリクして マージされるまで
exoego
2
290
ライブラリをパブリッシュせずにすばやく試す
exoego
2
180
esbuild 最適化芸人
exoego
3
1.4k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
550
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
26
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
630
Scala と AWS でフルサーバーレス開発事例 / How Chatworks uses Scala and Serverless
exoego
3
1.4k
忙しい Scala 開発者の超時間節約術 / Big Timesavers for Busy Scala Developers
exoego
1
1.1k
TypeScript の便利な型変形を なんとかして Scala.js で使う / Emulating TypeScript Utility Types in ScalaJS
exoego
2
1.8k
Other Decks in Programming
See All in Programming
What is Parser
yui_knk
9
4.1k
LangGraphでのHuman-in-the-Loopの実装
os1ma
3
1k
Using Livebook to build and deploy internal tools @ ElixirConf 2024
hugobarauna
0
240
Increased Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
250
Web技術を駆使してユーザーの画面を「録画」する
yukukotani
13
6.6k
A New Era of Testing
mannodermaus
2
310
Modular Monolith Go Server with GraphQL Federation + gRPC
110y
1
580
From Idea to IDE: Developing Plugins for Android Studio
thisaay
1
140
メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント
yhirakawa333
0
410
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
670
Amazon BedrockでサーバレスなAIお料理ボットを作成する!!
tosuri13
0
210
実践 Advanced CallKit 〜快適な通話の実現に向けて〜
mot_techtalk
3
130
Featured
See All Featured
Debugging Ruby Performance
tmm1
72
12k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Fireside Chat
paigeccino
31
2.9k
Optimising Largest Contentful Paint
csswizardry
30
2.8k
Teambox: Starting and Learning
jrom
131
8.7k
How STYLIGHT went responsive
nonsquared
93
5.1k
The Language of Interfaces
destraynor
153
23k
WebSockets: Embracing the real-time Web
robhawkes
59
7.3k
KATA
mclloyd
27
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
354
29k
Web development in the modern age
philhawksworth
204
10k
Side Projects
sachag
451
42k
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
◦ ブロック { } の閉じカッコだけの行 ◦ などなど