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
Flaky Testへの現実解をGoのプロポーザルから考える | Go Conference ...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
upamune / Yu SERIZAWA
September 28, 2025
Technology
950
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Flaky Testへの現実解をGoのプロポーザルから考える | Go Conference 2025
https://gocon.jp/2025/talks/958624/
upamune / Yu SERIZAWA
September 28, 2025
More Decks by upamune / Yu SERIZAWA
See All by upamune / Yu SERIZAWA
生成AI活用の組織格差を解消する 〜ビジネス職のCursor導入が開発効率に与えた好循環〜 / Closing the Organizational Gap in AI Adoption
upamune
7
7k
バクラクのモノレポにおける AI Coding のための環境整備と {Roo,Claude} Code活用事例 / AI Coding in Bakuraku's Monorepo: Environment Setup & Case Studies with {Roo, Claude} Code
upamune
10
11k
AI Coding in Bakuraku's Monorepo: Environment Setup & Case Studies with {Roo, Claude} Code [EN]
upamune
0
130
来週から実践できる! LayerXのバクラク事業部で行われている Go 関連の読書会のご紹介 / Bakuraku Go Reading Group
upamune
7
2.2k
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
2
2.5k
バクラク事業部でのGoのユースケースとチームを超えたナレッジ共有 | hatena.go
upamune
10
3.9k
GopherCon 2019 Report
upamune
0
2.3k
未卒 🔜 新卒 / Misotsu soon New Grads
upamune
2
800
Other Decks in Technology
See All in Technology
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
310
人とエージェントが高め合う協業設計
kintotechdev
0
1k
システム監視入門
grimoh
5
720
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
170
AI工学特論: MLOps・継続的評価
asei
11
2.9k
DevOps Agentで運用判断をチーム資産にする~Agent InstructionsとAgent Skillを継続的に育てる~
fujioka6789
0
160
信頼できるテスティングAIをどう育てるか?
odan611
0
150
検索技術知識0のエンジニアが広告検索システムを内製化して運用するまで
lycorptech_jp
PRO
0
110
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
190
QAタスクをスキル化したいときに考えること
aomoriringo
0
120
害獣害虫を自動判別! ペストコントロール支援ビジネス成功のヒント【SORACOM Discovery 2026】
soracom
PRO
0
120
Featured
See All Featured
We Are The Robots
honzajavorek
0
290
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Become a Pro
speakerdeck
PRO
31
6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Transcript
Flaky Testへの現実解を Goのプロポーザルから考える Go Conference 2025 うぱ @upamune / LayerX
Flaky Test を書いてしまったことがある人〜?
Flaky Test、ありますよね? 「あー、それいつも落ちてるやつなんで無視していいですよ」 「リトライしたら通りませんか?」 © LayerX Inc. "普段はパスするけど、たまに落ちる" テスト CI/CDの生産性を大きく損なう存在
3
直した方がいい
直した方がいいんだけど... 様々な事情があり修正が難しい
Go本体にもFlaky Testは存在する golang/go の src/internal/testenv/testenv.go にFlaky Testをスキップするための以下が関数が定義されている © LayerX Inc.
6
Go本体にもFlaky Testは存在する カテゴリ 件数 主な原因 ネットワーク関連 17件 DNS解決、タイムアウト デバッガー統合 15件
GDB/LLDB挙動の不安定性 CGO関連 14件 シグナル処理、スレッド管理 Windows固有 10件 シグナル、SEH 合計85件の testenv.SkipFlaky か testenv.SkipFlakyNet でマークされたテスト go test ではこのFlaky Testは実行されず、 go test -flaky フラグがある時は実行される。 golang/go@9b2d39b75b で rg "testenv\.SkipFlaky(Net)?" -t go | wc -l をした結果 © LayerX Inc. 7
Go本体のFlaky Test 例えば... © LayerX Inc. #54503: src/cmd/go/internal/modfetch/coderepo_test.go Goモジュールのコードリポジトリからバージョン情報や内容を正しく取得できることを確認するテストが gopkg.in
に依存していてFlaky #29225: src/net/udpsock_test.go UDPで0バイトのペイロードを送受信できることを確認するテストがiOSでFlaky #50470: src/time/sleep_test.go タイマーを急速に過去の時刻に変更しても、タイマーがドロップされないことを確認するテストがPlan 9 (arm) でFlaky 8
Go にもFlaky Test をハンドリングするための プロポーザルが
2018年:Issue #27181 2023年:Issue #62244 © LayerX Inc. golang/go へのFeature Request
/ Proposal Flaky Test支援のFeature Request → 却下 Flaky Testを明示的にマークし、 go test コマンドがそれを自動的に再試行する機能 「不安定なテストを許容し、助長するような機能を公式ツールに追加することには反 対」 @bradfitz がFlaky Test支援のプロポーザルを作成 → 承認 Google社内ではBazelのビルドシステムがFlaky Testの検出・アノテーション機能を持っ ているので困らないらしい Tailscaleでは go test のwrapperを作っていてリトライとアノテーションができる 10
承認されたプロポーザルの内容 © LayerX Inc. golang/go へのFeature Request / Proposal 既知のFlaky
Testを明示的にマーク マークするだけで即失敗とはならないような形で合意された Flaky Test をただマークする方法だと、すべてのテストで画一的なリトライになった り、再実行までの時間を変えたりする柔軟性がない Retries() をハンドリングすることで、exponential にsleepするテストを作れたりする 11
Tailscale の go test の wrapper は何をやっている?
Tailscaleのtestwrapper/flakytestのアプローチ:利用側 © LayerX Inc. Tailscale の go test の wrapper
flakytest.Mark でFlaky Testをマーキング Tailscale のリポジトリのIssue のURLであることを正規表現で確認 (ref) 正規表現に沿っていなかったら t.Fatal 13
Tailscaleのtestwrapper/flakytestのアプローチ © LayerX Inc. Tailscale の go test の wrapper
t.Log("flakytest: this is a known flaky test") でログを出力 cmd/testwrapper がログの出力から文字列前方一致でFlaky Testであるかどうかを判定 Flaky Test だったら失敗したら再実行 14
余談:Go 1.25 なら t.Attrが使える Go 1.25から t.Attr が利用可能になったので、ログの出力を文字列マッチしなくても良くなった © LayerX
Inc. Tailscale の go test の wrapper 15
今からFlaky Test に対処するには...?
今からFlaky Test に対処するには...? © LayerX Inc. Flaky Testを直す Go 1.25
からは synctest パッケージも正式追加されたので非同期処理にまつわるFlaky Testは直しやすくなった deep dive into testing/synctest・Go1.25新機能 testing/synctest で高速&確実な並列テストを実現する方法 失敗したテストをとにかく再実行したい gotestyourself/gotestsum を使えば --rerun-fails を使える 他にも類似ツールはありそう マークした特定のFlaky Testを再実行したい 紹介したTailscaleのtestwrapperを移植して使うのがおすすめ LayerX でも移植して利用していました (いました...?) 17
まとめ
まとめ Flaky Test は頑張って直しましょう © LayerX Inc. Flaky Test に対処できるプロポーザルがGoに承認された
実際にFlaky Test 再実行したい場合は現時点だといくつかのアプローチが取れる 全体を雑に再実行 落ちたテストだけを再実行 マーキングしたテストだけを再実行 マーキングしたテストだけを再実行したい場合は、Tailscaleの testwrapper は参考にな る実装なので見るのおすすめ 19
ありがとうございました! @upamune