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
govalid ~ Type-safe validation tool ~
Search
sivchari
February 26, 2026
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
govalid ~ Type-safe validation tool ~
sivchari
February 26, 2026
More Decks by sivchari
See All by sivchari
go test を速くする
sivchari
4
1.4k
Go1.25 リリースパーティ ~ nil pointer bug ~
sivchari
0
170
Google Developer Group - DevFest Tokyo 2025
sivchari
0
180
Who tests the Tests ?
sivchari
0
220
Go 1.26 リリースパーティ
sivchari
0
260
静的解析 x Kubernetes API Conventions = Kube API Linter ~ ベストプラクティスに準拠したカスタムリソースの作り方と運用 ~
sivchari
0
260
What's GOCACHEPROG ?
sivchari
1
620
gh_extensionsによる快適なOSS生活.pdf
sivchari
0
210
Visualization Go scheduler by gosched-simulator
sivchari
1
710
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Crafting Experiences
bethany
1
280
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
390
A Soul's Torment
seathinner
7
3.5k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
190
Statistics for Hackers
jakevdp
799
230k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
500
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Being A Developer After 40
akosma
91
590k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Transcript
govalid ~ Type-safe validation tool ~ 02/26/2025 sivchari newmo Inc
The Go gopher was designed by Renée French.
自己紹介 Goのバリデーションツール 既存ツールの問題点 govalid govalidの仕組み まとめ
自己紹介
• sivchari ◦ X/GitHub @sivchari • newmo • Kubernetes maintainer
◦ Cluster API ◦ Kube API Linter • Go Conference メインオーガナイザー
Goのバリデーションツール
• 有名どころは ◦ go-playground/validator • 他にも ◦ asaskevich/govalidator ◦ go-ozzo/ozzo-validation
Goのバリデーションツール
既存ツールの問題点
• reflect依存のバリデーション ◦ reflectは実行時評価なのでパフォーマンスが悪い ◦ structのバリデーションだとネストしてくるとその分評価に時間が かかり、reflectする回数が増える ◦ 大規模リクエストを受ける時にいくらパフォーマンスを上ても致命的 で手動でバリデーションする??
既存ツールの問題点
govalid ~ Type-safe validation tool ~
• https://github.com/sivchari/govalid ◦ 型安全にバリデーションコードを自動生成する ◦ kubebuilderを意識したmarker指向でコード生成を制御する ◦ 公式ページ ▪ https://sivchari.github.io/govalid/
govalid
• ◦ 型安全にバリデーションコードを自動生成する ◦ kubebuilderを意識したmarker指向でコード生成を制御する ◦ 公式ページ ▪ https://sivchari.github.io/govalid/ govalid
• https://sivchari.github.io/govalid/examples/ ◦ コメントベースを書くだけ ◦ 生成された関数に置き換えるだけ ◦ govalidの生成コードは標準パッケージがメイン ▪ 一部依存パッケージあり
govalid
• VS reflection-based validators ◦ 全部のバリデーションツールに対して圧倒的勝利 ▪ https://sivchari.github.io/govalid/benchmarks/ ◦ ex.
▪ go-playgroundのRequiredに約40倍 ▪ URLのような複雑なvalidationでも約5倍 • ozzo-validationに対しては186倍 govalid
govalidの仕組み
• メインはast ◦ markers analyzerがそれぞれのstructやフィールドに紐づいたmarker を集める ◦ govalidがmarker analyzerの結果を受け取りコード生成を行う govalidの仕組み
• ResultとFact ◦ Result ▪ Analyzerが解析した結果をほかAnalyzerに伝搬するための仕組み ▪ ResultTypeで指定できる ◦ Fact
▪ 特定のオブジェクトに対してどのようなことがあったか記録するための 仕組み ▪ FactTypeで指定できる govalidの仕組み
govalidの仕組み
govalidの仕組み • Factはテスト可能 ◦ linterのテストのようにwantで書いて同じ内容が出力されて いるか確認する
まとめ
• reflection-based validationの不満を解決するツールを作ったよ ◦ Goの自動生成の強みを活かしたvalidationツール ◦ Goのvalidationツールのデファクトにしたい ◦ スターと拡散の協力お願いします!!! ◦
まだまだやることたくさんあるので一緒に開発してくれる人を募集し ています!!! まとめ