Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コンソールでもモデル検証したい
Search
tomokusaba
June 01, 2023
Programming
0
350
コンソールでもモデル検証したい
コンソールでもモデル検証したい
.NET の 3 日間 (2 日目) ~3 コミュニティ合同イベント~
tomokusaba
June 01, 2023
Tweet
Share
More Decks by tomokusaba
See All by tomokusaba
コンピューティングリソース何を使えばいいの?
tomokusaba
1
19
Microsoft Agent Frameworkの可観測性
tomokusaba
1
93
.NET 10の概要
tomokusaba
0
130
.NET 10のASP.NET Coreの気になる新機能
tomokusaba
0
120
.NET 10のASP. NET Core注目の新機能
tomokusaba
0
190
コンピューティングリソース何を使えばいいの?
tomokusaba
1
210
技書博で見つけた本
tomokusaba
0
67
新卒2年目でドロップアウトしてからの20年間
tomokusaba
0
120
Azure Well-Architected Framework入門
tomokusaba
1
260
Other Decks in Programming
See All in Programming
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
150
JETLS.jl ─ A New Language Server for Julia
abap34
2
430
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
590
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
380
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
10
3k
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
0
120
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.6k
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
130
エディターってAIで操作できるんだぜ
kis9a
0
740
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
370
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
410
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
67
GitHub's CSS Performance
jonrohan
1032
470k
What's in a price? How to price your products and services
michaelherold
246
13k
Producing Creativity
orderedlist
PRO
348
40k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Everyday Curiosity
cassininazir
0
110
Scaling GitHub
holman
464
140k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
400
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
30 Presentation Tips
portentint
PRO
1
170
Transcript
コンソールでもモデル検証 したい 株式会社SAKURUG エンジニアリングユニット 草場 友光 .NET の 3 日間
(2 日目) ~3 コミュニティ合同イベント~
自己紹介 • 普段は主にシステムをAzureにモダナ イズする仕事をしています。 • コミュニティ活動を通じて知識をアッ プデートしています。 • 2022/08-2023 Microsoft
MVP (Developer Technologies) • tomo_kusaba
宣伝 【VISION】ひとの可能性を開花させる企業であり続ける VISIONに共感できる仲間募集中。
注意 • 個人の見解・解釈が多分に入っています。 • 見解の相違・事実誤認などありましたらご指摘ください。
今日の目的 • ASP.NET Coreでは組み込みの入力コンポーネント及びモデル に検証属性をつけることで基本的な入力値検証が行えます。 • この検証属性をつけたモデルを利用しコンソールアプリケー ションでもモデル検証を行う方法について紹介します。
Webにおける入力値検証の基本 • 一般的に入力値検証(バリデーション)はクライアント側、 サーバ側双方で行われることが一般的。 • クライアント側で入力値検証が行われることでユーザ利便性を 提供する。 • サーバ側で入力値検証が行われることでセキュリティを担保す る。
Blazor WebAssembly(クライアント側) • 入力値検証のためのフォーム(EditForm)が用意されている • DataAnnotationsValidatorによって検証属性に基づいて検証 を行うことができる。
組み込みの入力コンポーネント 入力コンポーネント 説明 InputCheckbox チェックボックス InputDate 日付入力 InputFile ファイルアップロード InputNumber
数値入力 InputRadio ラジオボタン InputSelect ドロップダウンリスト InputText テキストボックス InputTextArea テキストエリア
ASP.NET Core WebAPI • ApiController属性によりモデル検証エラーが発生すると HTTP400応答が自動的にトリガーされる。 • 必要な検証属性はクライアント側と共通 • 組み込みのデータ検証とカスタム検証ロジックの両方が検証さ
れる。
代表的な組み込みの検証属性 属性 説明 Required 入力がされているかどうかを検証します。 Range 入力が指定した範囲内であるかどうかを検証します。 StringLength 入力文字列が指定した長さを超えてないかどうかを検証しま す。
RegularExpression 入力が指定した正規表現と一致することを検証します。
モデル例
クライアント側検証エラー例 必須入力の名前を空欄とし た
サーバ側検証エラー例 名前を空欄とした
コンソールにおけるモデル検証 • System.ComponentModel.DataAnnotations. Validator.TryValidateObject()メソッドを使用する • 第一引数:モデル • 第二引数:ValidationContext • 第三引数:ValidationResultのList
• 第四引数:すべてのプロパティをチェックするかどうか
コンソールにおけるモデル検証コード例 • modelはモデル検証対象のオブジェクト List<ValidationResult> errors = new(); bool isValid =
Validator.TryValidateObject(model, new ValidationContext(model), errors, true); if (isValid) { Console.WriteLine("Valid"); } else { Console.WriteLine("Invalid"); foreach (var error in errors) { Console.WriteLine(error.ErrorMessage); } }
デモ • モデル検証属性を確認 • モデル検証が成功するパターンについて確認 • モデル検証が失敗するパターンについて確認 • 必須属性 •
文字列長 • Email • エラーメッセージの表示の確認
まとめ • コンソールでもモデル検証は可能。 • コンソールでできるということはあらゆるアプリケーションモ デル・任意の場所でモデル検証が可能である。 • 例えば、Blazor WebAssemblyでは既定ではForm送信時のモ デル検証となっているがこの手法を使えばあらゆるタイミング
での検証が可能(必要かどうかはさておき) • WebAPIではPOST/PUT時にモデル検証し失敗時に400応答す るのが既定動作であるが、これも任意タイミングで検証可能。 例えば、JSONファイルアップロード→オブジェクト化→モデ ル検証するなど
デモコード • https://github.com/tomokusaba/Valid ateTest
.NET8 Preview2で追加 • .NET8 Preview2で組み込みのデータ検証に拡張属性がいくつ か追加されました。 属性 説明 Required(DisallowAllDefalutValues) 構造体がデフォルト値と等しくないことを検証
DateOnlyなら0001/01/01 Range(MinimumIsExclusive,MaximumIsE xclusive) 範囲の検証で境界値を拒否できるようになった (0,10)としたときは0と10はダメのように設定可能 ex) Length(10, 20) 文字列またはコレクションの長さの下限と上限を設定できるようになりました。 AllowedValues プロパティを検証するための許可リストを指定できる DeniedValues プロパティを検証するための拒否リストを指定できる
デモコード • https://github.com/tomokusaba/DataAnnotationsTestDo tnet8pre2
参考文献 • ASP.NET Core Blazor のフォームと入力コンポーネント
おしまい おしまい