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
Goのカバレッジ計測の仕組みをコードリーディングで理解する
Search
OPTiM
October 06, 2025
400
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goのカバレッジ計測の仕組みをコードリーディングで理解する
2025/9/28 開催「Go Bash vol.2」での発表資料です。
https://layerx.connpass.com/event/367057/
OPTiM
October 06, 2025
More Decks by OPTiM
See All by OPTiM
製品の問い合わせ負荷をLLMで解消したい 〜RAGで作る「自社を知っている」チャットボット〜
optim
0
33
AI エージェントシステムの開発を AI で加速させたい!
optim
0
35
既存プロダクトのRSpec カバレッジを 40% から100% にした話
optim
1
77
最近やってよかったデザインシステム運用改善3選
optim
1
240
<install>要素は何ができて、何を変えるのか
optim
1
210
CIでリグレッションテストを実行し継続的に品質を担保する
optim
1
230
Tanstack Startを触ってみての感動
optim
1
230
移行のつらさは誰が引き受けるのか── Vue.js と Next.js を比べて見えたこと
optim
2
230
Athenaが遅すぎるので Next.js 16の Cache Componentsで倒してみた
optim
1
290
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Being A Developer After 40
akosma
91
590k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Leo the Paperboy
mayatellez
8
2.2k
Color Theory Basics | Prateek | Gurzu
gurzu
0
430
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
Transcript
© 2019-2025 OPTiM Corp. All rights reserved. Goのカバレッジ計測の仕組みをコードリーディングで 理解する 2025/10/06
Go Bash vol.2 株式会社オプティム 宍戸
© 2019-2025 OPTiM Corp. All rights reserved. 2 自己紹介 ・
名前:宍戸(ししど) ・ 担当:バックエンド ・ 所属:株式会社オプティム ・ プロダクト ・2023年~ OPTiM Biz (MDM)で開発と問い合わせ対応 ・2025年~ OPTiM Collaboration Portal でバックエンド
© 2019-2025 OPTiM Corp. All rights reserved. 3 会社紹介
© 2019-2025 OPTiM Corp. All rights reserved. 4 会社紹介 商号
株式会社オプティム(プライム市場:3694) Tokyo Kobe 設立 2000年 オフィス OPTiM TOKYO(東京本社@浜松町) 総スタッフ数 700名 ※正スタッフ 433名 OPTiM SAGA(佐賀本店@佐賀大学キャンパス内) OPTiM KOBE (神戸オフィス@三ノ宮) TECH CENTER IIZUKA (テックセンター飯塚@九州工業大学飯塚キャンパス前) 代表者 菅谷 俊二 うち7割がエンジニア職 Optimization:最適化 Optimism:楽観主義 × (2025年4月現在) Saga
© 2019-2025 OPTiM Corp. All rights reserved. 5 事業・提供サービス概要 オプティムは、AI・IoT・Cloud・Mobile・Roboticsを使った新しい価値を創造し続け、あ
らゆる産業のDXを推進し、あらゆる人々に、豊かでサステナブルな未来を実現する企業です
© 2019-2025 OPTiM Corp. All rights reserved. 6 go test
–cover 使ってますか?
© 2019-2025 OPTiM Corp. All rights reserved. 7 コマンドを実行してから裏側でどのよう な処理をしているか知ってますか?
© 2019-2025 OPTiM Corp. All rights reserved. 8 カバレッジの網羅率をどのように 測っているのでしょうか?
© 2019-2025 OPTiM Corp. All rights reserved. 9 ・ カバレッジとは?
・ 実装を確認してみる ・ カバレッジを計測するための仕組み ・ まとめ アジェンダ
© 2019-2025 OPTiM Corp. All rights reserved. 10 カバレッジとは?
© 2019-2025 OPTiM Corp. All rights reserved. 11 カバレッジ =
テストのカバー率 Go のテストにおいてカバレッジを図るためのコマンドが存在します カバレッジ = テスト対象コードのうち実行された命令文(statements)の割合
© 2019-2025 OPTiM Corp. All rights reserved. 12 実装を確認してみる どうやってGo
のコマンドを検知しているのか
© 2019-2025 OPTiM Corp. All rights reserved. 13 Go の実装を確認しに行く
https://github.com/golang/go 今回はコマンド関連の実装から コードリーディングしていくので Cmd ディレクトリ配下を確認
© 2019-2025 OPTiM Corp. All rights reserved. 14 エントリーポイントの実装 参考:
src/cmd/go/main.go lookupCmd が怪しそう あとで登場します
© 2019-2025 OPTiM Corp. All rights reserved. 15 コマンドの探索 src/cmd/go/internal/base/base.go
1: go test –-cover の場合、test コマンドが存在する 2: c.Runnable で main.go の init 関数にある test と一致するフィールドが存在することを確認 3: サブコマンドが存在する場合は継続する lookupCmd の中の処理 src/cmd/go/main.go
© 2019-2025 OPTiM Corp. All rights reserved. 16 カバレッジの有効化 カバレッジの有効化はどのように実現しているのか
© 2019-2025 OPTiM Corp. All rights reserved. 17 Cover のフラグが立つ手順
src/cmd/go/internal/test/testflag.go AddCoverFlags が怪しい
© 2019-2025 OPTiM Corp. All rights reserved. 18 AddCoverFlags の実装
src/cmd/go/internal/work/build.go AddCoverFlags は cover 系のフラグを cmd に登録する関数 フラグが使える状態になっただけで 有効にはなってない
© 2019-2025 OPTiM Corp. All rights reserved. 19 サブコマンドのフラグを立てる実装 src/cmd/go/internal/cmdflag/flag.go
name は cover なので ここで—cover が true に セットされる
© 2019-2025 OPTiM Corp. All rights reserved. 20 カバレッジを計測するための仕組み テストの割合を確認するための分母となる情報の取得
© 2019-2025 OPTiM Corp. All rights reserved. 21 カバレッジを計測する仕組み 分子
= AST で仕込んだカウンタを、実行時に集計した数 分母 = AST 解析で検出した全ブロック数 coverage % = 分子 / 分母
© 2019-2025 OPTiM Corp. All rights reserved. 22 どのようにカウンタを仕込むのか cover
のフラグをオン AST で解析開始 ブロックごとの検知 カウンタ挿入 AST(抽象構文木) とは ◼ プログラムを木構造にした設計図 ◼ 文字列としてのコードではなく「構造」で表す ◼ 例:if x > 0 { return x }
© 2019-2025 OPTiM Corp. All rights reserved. 23 AST で解釈されるブロック
© 2019-2025 OPTiM Corp. All rights reserved. 24 実際のコード カウンタを挿入したイメージコード
© 2019-2025 OPTiM Corp. All rights reserved. 25 ifブロック通過 (coverCount++)
elseブロック通過 (coverCount++) Cover 率 100%!!
© 2019-2025 OPTiM Corp. All rights reserved. 26 まとめ ・Go
のカバレッジは AST を変換してブロックごとにカウンタを挿入 する仕組みで成り立つ ・ カバレッジを理解するとどこがカバーできていないかを明確にする ことができる ・数字の裏側を知ることで、カバレッジを「ただの%」から「テスト 改善の指標」にできる
© 2019-2025 OPTiM Corp. All rights reserved. 27 カバレッジの仕組みを理解することで、 数値を追うだけでなく、
ブロック単位で効果的にカバーできるテスト設計を
© 2019-2025 OPTiM Corp. All rights reserved.