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
910
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
6.9k
バクラクのモノレポにおける 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
120
来週から実践できる! 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
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
150
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
200
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
200
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
130
現地で盛り上がった WWDC26 Keynote
zozotech
PRO
1
250
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
480
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
520
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
110
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
110
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
670
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
410
The SEO Collaboration Effect
kristinabergwall1
1
480
Everyday Curiosity
cassininazir
0
230
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
30 Presentation Tips
portentint
PRO
1
320
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Building AI with AI
inesmontani
PRO
1
1.1k
How STYLIGHT went responsive
nonsquared
100
6.2k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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