Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Bun に LCOV 出力を実装した
Search
TATSUNO Yasuhiro
June 28, 2024
Programming
400
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
350
Scala 3 で GLSL のための c-like-for を実装してみた
exoego
1
1.1k
terraform-provider-aws にプルリクして マージされるまで
exoego
2
540
ライブラリをパブリッシュせずにすばやく試す
exoego
2
390
esbuild 最適化芸人
exoego
3
2.8k
いい感じに AWS を組み合わせたビルディングブロックでアプリ開発を支援する / TdTechTalk 2022 11
exoego
0
960
Empowering App Dev by Nicely-Crafted High-Level AWS Components
exoego
0
130
月間数十億リクエストのマイクロサービスを支える JVM+AWS フルサーバーレス開発事例 / Now and Future of Fully Serverless development at Chatwork
exoego
1
860
Scala と AWS でフルサーバーレス開発事例 / How Chatworks uses Scala and Serverless
exoego
3
1.8k
Other Decks in Programming
See All in Programming
新卒PdEのリアル
ryu1013
1
470
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
4.7k
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
260
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
520
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
スマート反転とウェブアクセシビリティ
camiha
0
170
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
What We Talk About When We Talk About XP
m_seki
2
450
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
300
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Facilitating Awesome Meetings
lara
57
7.1k
Designing for Timeless Needs
cassininazir
1
470
Scaling GitHub
holman
464
140k
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
◦ ブロック { } の閉じカッコだけの行 ◦ などなど