$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goのカバレッジ計測の仕組みをコードリーディングで理解する
Search
OPTiM
October 06, 2025
1
320
Goのカバレッジ計測の仕組みをコードリーディングで理解する
2025/9/28 開催「Go Bash vol.2」での発表資料です。
https://layerx.connpass.com/event/367057/
OPTiM
October 06, 2025
Tweet
Share
More Decks by OPTiM
See All by OPTiM
レイアウト構築の基本を理解しよう ~ 横スクロールが起きない!? Flex脱却編 ~
optim
0
350
デザインとエンジニアリングの架け橋を目指す OPTiMのデザインシステム「nucleus」の軌跡と広げ方
optim
0
580
落ちてほしかった単体テスト
optim
0
130
0→1製品の毎週リリースを支えるGoパッケージ戦略——AI時代のPackage by Feature実践
optim
5
1.7k
Ruby初学者から見たRubyKaigi
optim
0
360
メモ整理が苦手な者による頑張らないObsidian活用術
optim
1
870
新卒でも即戦力になりたい! ~新卒エンジニアがAIを使ってElectronアプリの改善をやってみた~/20250723-ai-endo
optim
0
66
製品価値向上のための "上流工程" AI支援/20250723-ai-uehara
optim
0
65
IoT機器の一括デバイスプロビジョニングと遠隔操作の技術 / 20250424-iot-aoki
optim
0
79
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
28
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
0
310
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.1k
WENDY [Excerpt]
tessaabrams
8
35k
Speed Design
sergeychernyshev
33
1.4k
RailsConf 2023
tenderlove
30
1.3k
Building Adaptive Systems
keathley
44
2.9k
Believing is Seeing
oripsolob
0
15
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
38
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
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.