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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sivchari
February 26, 2026
110
0
Share
govalid ~ Type-safe validation tool ~
sivchari
February 26, 2026
More Decks by sivchari
See All by sivchari
Go1.25 リリースパーティ ~ nil pointer bug ~
sivchari
0
110
Google Developer Group - DevFest Tokyo 2025
sivchari
0
110
Who tests the Tests ?
sivchari
0
120
Go 1.26 リリースパーティ
sivchari
0
180
静的解析 x Kubernetes API Conventions = Kube API Linter ~ ベストプラクティスに準拠したカスタムリソースの作り方と運用 ~
sivchari
0
180
What's GOCACHEPROG ?
sivchari
1
540
gh_extensionsによる快適なOSS生活.pdf
sivchari
0
140
Visualization Go scheduler by gosched-simulator
sivchari
1
620
protoc pluginのはじめかた
sivchari
0
140
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
140
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
350
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
570
Code Reviewing Like a Champion
maltzj
528
40k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Exploring anti-patterns in Rails
aemeredith
3
360
Producing Creativity
orderedlist
PRO
348
40k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
300
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
How to make the Groovebox
asonas
2
2.2k
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ツールのデファクトにしたい ◦ スターと拡散の協力お願いします!!! ◦
まだまだやることたくさんあるので一緒に開発してくれる人を募集し ています!!! まとめ