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
kanazawa.go 2025.07.27
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
o-ga
July 26, 2025
82
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
kanazawa.go 2025.07.27
o-ga
July 26, 2025
More Decks by o-ga
See All by o-ga
GoConferenceMini2026inSendai_-_2026.02.21.pdf
tabe
0
58
GoConnect#9 2025.08.19
tabe
0
100
ランドネットLT会.pdf
tabe
0
32
Tavinikkiyとかいう構想半年、開発2ヶ月みたいなプロダクトを個人開発している話
tabe
0
28
テテミート 2024.11.22
tabe
0
29
Genericsについて改めて学んでみた
tabe
0
71
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
240
Designing Experiences People Love
moore
143
24k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
410
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
Thoughts on Productivity
jonyablonski
76
5.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Chasing Engaging Ingredients in Design
codingconduct
0
270
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
Documentation Writing (for coders)
carmenintech
77
5.4k
Transcript
govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた
govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた Kanazawa.go LT 2025年7月27日 1
自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介
名前: オーガ 職業: バックエンドエンジニア 好きな言語: Go, TypeScript 趣味: ライブに行く、日本酒、Go を書く 推し: 山本彩、福山梨乃 Twitter: @o_ga09 GitHub: @o-ga09 2
Go Conference Go Conference Go Conference Go Conference Go Conference
Go Conference Go Conference Go Conference Go Conference Go Conference 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 2025 2 日間開催決定! 1 日目は誕生日!! めっちゃうれしい!!! 3
今日話すこと 今日話すこと 今日話すこと 今日話すこと 今日話すこと 今日話すこと 今日話すこと 今日話すこと 今日話すこと 今日話すこと
govalid とは? 実装例 まとめ 4
訂正 訂正 訂正 訂正 訂正 訂正 訂正 訂正 訂正 訂正
本スライドは、使ってみたではなく、紹介です! すみません 5
govalid とは? govalid とは? govalid とは? govalid とは? govalid とは?
govalid とは? govalid とは? govalid とは? govalid とは? govalid とは? sivchari さんが OSS で開発している Go 言語のための構造体バリデーションライブラリ コメントベースのバリデーション指定 豊富な組み込みバリデーションルール go-playground/validator から乗り換え可能&乗り換えることで5倍速くな る 6
なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid
なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid なぜ、go-validator ではなく、govalid か? か? か? か? か? か? か? か? か? か? go-playground/validator は、構造体のタグベースなので reflect を使用している 実行時に動的に評価してバリデート 7
デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指
摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 OpenAPI 生成への影響 コメントが OpenAPI ドキュメントのノイズになる 可読性の問題 フィールド毎のコメントで構造体が見づらくなる パフォーマンス疑問 reflect の問題を体感したことがない(個人的経験) レイアウトの乱れ フィールド、型、タグの位置が揃わない 8
まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール! まずは、インストール!
go install github.com/sivchari/govalid/cmd/govalid@latest 9
実装例 実装例 実装例 実装例 実装例 実装例 実装例 実装例 実装例 実装例
//go:generate govalid . type User struct { // +govalid:required Name string `json:"name"` // +govalid:required // +govalid:email Email string `json:"email"` // +govalid:gte=0 // +govalid:lte=120 Age int `json:"age"` } 使用可能なバリデーション 10
コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成 コマンドでバリデーションコードを自動生成
go generate ./... 11
govalid の基本的な使い方 govalid の基本的な使い方 govalid の基本的な使い方 govalid の基本的な使い方 govalid の基本的な使い方
govalid の基本的な使い方 govalid の基本的な使い方 govalid の基本的な使い方 govalid の基本的な使い方 govalid の基本的な使い方 func main() { p := &Person{Name: "John", Email: "invalid-email"} if err := ValidatePerson(p); err != nil { log.Printf("Validation failed: %v", err) // Output: Validation failed: field Email must be a valid email address } } 12
実装例: API リクエストの検証 実装例: API リクエストの検証 実装例: API リクエストの検証 実装例:
API リクエストの検証 実装例: API リクエストの検証 実装例: API リクエストの検証 実装例: API リクエストの検証 実装例: API リクエストの検証 実装例: API リクエストの検証 実装例: API リクエストの検証 func CreateUser(w http.ResponseWriter, r *http.Request) { var user User // リクエストボディをデコード decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&user); err != nil { http.Error(w, "Invalid request", http.StatusBadRequest) return } // バリデーション実行 if _, err := govalidator.ValidateStruct(user); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } // 処理続行... } 13
まとめ まとめ まとめ まとめ まとめ まとめ まとめ まとめ まとめ まとめ
govalid は簡単に導入できるコメントベースのバリデーションライブラリ コメントからバリデーションメソッドが自動生成され事前コンパイルされた形式でバリデ ートされる 実行時に reflaction による評価ではない つい先日、 ️100 行ったばかり! OSS です! 14
govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想
govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 AI に書かせるのは全然無理 go-playground/validator を使おうとしてくる 本当にリクエストバリデーションのパフォーマンスで悩むなら、選択肢としてありだなぁ コメント少し可読性が下がるかもだが、全然使うのありだな 15
参考 参考 参考 参考 参考 参考 参考 参考 参考 参考
sivchari/govalid Go の次世代バリデーションツール govalid 16
Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました
Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました 17