Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kanazawa.go 2025.07.27

Avatar for o-ga o-ga
July 26, 2025
34

kanazawa.go 2025.07.27

Avatar for o-ga

o-ga

July 26, 2025
Tweet

Transcript

  1. govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた

    govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた govalid を使ってみた Kanazawa.go LT 2025年7月27日 1
  2. 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介 自己紹介

    名前: オーガ 職業: バックエンドエンジニア 好きな言語: Go, TypeScript 趣味: ライブに行く、日本酒、Go を書く 推し: 山本彩、福山梨乃 Twitter: @o_ga09 GitHub: @o-ga09 2
  3. 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
  4. 訂正 訂正 訂正 訂正 訂正 訂正 訂正 訂正 訂正 訂正

    本スライドは、使ってみたではなく、紹介です! すみません 5
  5. govalid とは? govalid とは? govalid とは? govalid とは? govalid とは?

    govalid とは? govalid とは? govalid とは? govalid とは? govalid とは? sivchari さんが OSS で開発している Go 言語のための構造体バリデーションライブラリ コメントベースのバリデーション指定 豊富な組み込みバリデーションルール go-playground/validator から乗り換え可能&乗り換えることで5倍速くな る 6
  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
  7. デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指 デメリットだなぁと指

    摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 摘されている点 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 主な課題 OpenAPI 生成への影響 コメントが OpenAPI ドキュメントのノイズになる 可読性の問題 フィールド毎のコメントで構造体が見づらくなる パフォーマンス疑問 reflect の問題を体感したことがない(個人的経験) レイアウトの乱れ フィールド、型、タグの位置が揃わない 8
  8. 実装例 実装例 実装例 実装例 実装例 実装例 実装例 実装例 実装例 実装例

    //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
  9. 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
  10. 実装例: 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
  11. まとめ まとめ まとめ まとめ まとめ まとめ まとめ まとめ まとめ まとめ

    govalid は簡単に導入できるコメントベースのバリデーションライブラリ コメントからバリデーションメソッドが自動生成され事前コンパイルされた形式でバリデ ートされる 実行時に reflaction による評価ではない つい先日、 ️100 行ったばかり! OSS です! 14
  12. govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想

    govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 govalid を少し使ってみた感想 AI に書かせるのは全然無理 go-playground/validator を使おうとしてくる 本当にリクエストバリデーションのパフォーマンスで悩むなら、選択肢としてありだなぁ コメント少し可読性が下がるかもだが、全然使うのありだな 15
  13. 参考 参考 参考 参考 参考 参考 参考 参考 参考 参考

    sivchari/govalid Go の次世代バリデーションツール govalid 16
  14. Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました

    Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました Go 清聴ありがとうございました 17