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
0
65
govalid ~ Type-safe validation tool ~
sivchari
February 26, 2026
Tweet
Share
More Decks by sivchari
See All by sivchari
Go1.25 リリースパーティ ~ nil pointer bug ~
sivchari
0
66
Google Developer Group - DevFest Tokyo 2025
sivchari
0
66
Who tests the Tests ?
sivchari
0
66
Go 1.26 リリースパーティ
sivchari
0
120
静的解析 x Kubernetes API Conventions = Kube API Linter ~ ベストプラクティスに準拠したカスタムリソースの作り方と運用 ~
sivchari
0
130
What's GOCACHEPROG ?
sivchari
1
490
gh_extensionsによる快適なOSS生活.pdf
sivchari
0
96
Visualization Go scheduler by gosched-simulator
sivchari
1
560
protoc pluginのはじめかた
sivchari
0
99
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
2.7M
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
150
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
350
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
110
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
160
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
86
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ツールのデファクトにしたい ◦ スターと拡散の協力お願いします!!! ◦
まだまだやることたくさんあるので一緒に開発してくれる人を募集し ています!!! まとめ