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
upamune / Yu SERIZAWA
September 28, 2025
Technology
940
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.4k
バクラク事業部でのGoのユースケースとチームを超えたナレッジ共有 | hatena.go
upamune
10
3.8k
GopherCon 2019 Report
upamune
0
2.3k
未卒 🔜 新卒 / Misotsu soon New Grads
upamune
2
790
Other Decks in Technology
See All in Technology
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
280
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
120
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
170
5分でわかるDuckDB Quack
chanyou0311
4
300
Tech-Verse 2026_Keynote
lycorptech_jp
PRO
0
130
はてなのサービス基盤を支える Kubernetes《足腰》
masayoshimaezawa
0
420
AIエージェントとPhysical AIが拓く製造業の変革(ハノーバーメッセリキャップ)
iotcomjpadmin
0
200
AI駆動開発におけるQAエンジニアの役割事例 〜AI駆動開発の現場から〜
kobayashiyorimitsu
0
280
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
480
product engineering with qa
nealle
0
140
どうして今サーバーサイドKotlinを選択したのか
nealle
0
190
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
570
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
Designing for Timeless Needs
cassininazir
1
270
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
340
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Chasing Engaging Ingredients in Design
codingconduct
0
230
The Invisible Side of Design
smashingmag
301
52k
Test your architecture with Archunit
thirion
1
2.3k
KATA
mclloyd
PRO
35
15k
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