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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
OPTiM
October 06, 2025
1
340
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
「人間を最適化するAI」から「AIを最適化する人間」への主語転換 〜Agentic Engineeringの実践〜
optim
0
85
フロントエンド開発者のための「厄払い」
optim
0
2.3k
レイアウト構築の基本を理解しよう ~ 横スクロールが起きない!? Flex脱却編 ~
optim
0
500
デザインとエンジニアリングの架け橋を目指す OPTiMのデザインシステム「nucleus」の軌跡と広げ方
optim
0
850
落ちてほしかった単体テスト
optim
0
150
0→1製品の毎週リリースを支えるGoパッケージ戦略——AI時代のPackage by Feature実践
optim
5
2.1k
Ruby初学者から見たRubyKaigi
optim
0
430
メモ整理が苦手な者による頑張らないObsidian活用術
optim
1
2.2k
新卒でも即戦力になりたい! ~新卒エンジニアがAIを使ってElectronアプリの改善をやってみた~/20250723-ai-endo
optim
0
82
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Documentation Writing (for coders)
carmenintech
77
5.3k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
280
Mind Mapping
helmedeiros
PRO
1
130
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
Statistics for Hackers
jakevdp
799
230k
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.