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
Goのカバレッジ計測の仕組みをコードリーディングで理解する
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
OPTiM
October 06, 2025
410
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
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
530
製品の問い合わせ負荷をLLMで解消したい 〜RAGで作る「自社を知っている」チャットボット〜
optim
0
40
AI エージェントシステムの開発を AI で加速させたい!
optim
0
42
既存プロダクトのRSpec カバレッジを 40% から100% にした話
optim
1
93
最近やってよかったデザインシステム運用改善3選
optim
1
350
<install>要素は何ができて、何を変えるのか
optim
1
310
CIでリグレッションテストを実行し継続的に品質を担保する
optim
1
340
Tanstack Startを触ってみての感動
optim
1
330
移行のつらさは誰が引き受けるのか── Vue.js と Next.js を比べて見えたこと
optim
2
330
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
Site-Speed That Sticks
csswizardry
13
1.5k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
WENDY [Excerpt]
tessaabrams
13
39k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Building AI with AI
inesmontani
PRO
1
1.2k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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.