FluentValidationのルール
流暢な構文で表現力の高いバリデーターを記述します。
「FluentValidationのルール」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
なぜ FluentValidation を使うのか
FluentValidation は、検証ルールをモデルから切り離し、専用のバリデータークラスに移す人気の .NET ライブラリです。ルールは読みやすく、チェーン接続できる fluent API で記述するため、モデルをすっきり保ち、ルールをテストしやすくできます。
dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensionsAbstractValidator 基底クラス
AbstractValidator<T> を継承してバリデーターを作成します。ここで T は検証対象のモデルです。ルールはコンストラクターで定義します。
using FluentValidation;
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
// rules go here
}
}RuleFor による最初のルールの定義
RuleFor はラムダ式でプロパティを選択し、その後にバリデーターをチェーンします。NotEmpty() は null、空文字列、既定値を拒否します。
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(c => c.Name).NotEmpty();
}
}複数のバリデーターのチェーン
各 RuleFor には複数のバリデーターをチェーンできます。バリデーターは順番に実行され、すべてに合格する必要があります。文章のように読める形で記述できます。
RuleFor(c => c.Name)
.NotEmpty()
.MinimumLength(2)
.MaximumLength(50);組み込みバリデーター
FluentValidation には、NotNull、NotEmpty、EmailAddress、Length、InclusiveBetween、GreaterThan、Matches(正規表現)など、多くのバリデーターが組み込まれています。
RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");カスタムエラーメッセージ
WithMessage を使うと、既定のメッセージを上書きできます。{PropertyName} や {PropertyValue} のようなプレースホルダーを埋め込むこともできます。
RuleFor(c => c.Email)
.NotEmpty().WithMessage("Email is required.")
.EmailAddress().WithMessage("{PropertyValue} is not a valid email.");カスタムエラーコードと重要度
メッセージに加えて、機械で読み取れる WithErrorCode と WithSeverity(Error、Warning、Info)を付加し、クライアントが異なる方法で対応できるようにすることもできます。
RuleFor(c => c.Name)
.NotEmpty()
.WithErrorCode("NAME_REQUIRED")
.WithSeverity(Severity.Error);ネストしたオブジェクトの検証
SetValidator を使うと、子オブジェクト用のバリデーターを再利用でき、ルールをモジュール化できます。
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
}
}コレクションの検証
RuleForEach は、コレクション内のすべての項目にルールを適用します。
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleForEach(o => o.Items)
.ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
}
}バリデーターの手動実行
バリデーターを直接呼び出して、結果を確認できます。ValidationResult には IsValid と Errors リストが公開されています。
var validator = new CustomerValidator();
ValidationResult result = validator.Validate(customer);
if (!result.IsValid)
{
foreach (var error in result.Errors)
{
Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
}
}非同期検証
データベースのチェックなど、ルールで I/O が必要な場合は、ValidateAsync と MustAsync などの非同期バリデーターを使用します。詳しくはカスタムルールのレッスンで説明します。
ValidationResult result = await validator.ValidateAsync(customer);クイックチェック
FluentValidation の基礎を確認します。
まとめ
FluentValidation では、AbstractValidator<T> クラスにルールを記述します。RuleFor でプロパティを対象にし、NotEmpty、EmailAddress、InclusiveBetween などの組み込みバリデーターをチェーンします。WithMessage、WithErrorCode、WithSeverity でフィードバックをカスタマイズし、SetValidator と RuleForEach でロジックを再利用し、Validate/ValidateAsync でルールを実行します。
よくある質問
「FluentValidationのルール」レッスンは無料ですか?
はい。「FluentValidationのルール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「FluentValidationのルール」で何を学びますか?
流暢な構文で表現力の高いバリデーターを記述します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「FluentValidationのルール」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Data Annotationによるバリデーション
- FluentValidationのルール
- カスタムルールと条件付きルール
- APIへのバリデーション統合