.NETのオプションパターンでアプリ起動時に環境変数を検証する

アプリケーションを開発や運用をしていると、必要な環境変数が設定されていなくてアプリケーションが正常に動作しないということがよくあります。

環境変数を利用する時になって初めてエラーが出るので、エラーの原因調査に時間がかかります。

これを解決するため、「環境変数が正常に設定されているかアプリ起動時にチェックすればいいのでは?」と考えました。

今回は.NETのオプションパターンで実装する方法についてまとめました。

前提

本記事は .NETのオプションパターンの基本的な使い方を知っていることを前提としています。

learn.microsoft.com

利用環境

  • .NET 8

実装方法

環境変数の値を格納するクラスを作ります。

[Required]属性を付与することによって必須にしています。

public class TestOptions
{
    public static readonly string SectionName = "Test";

    [Required]
    public required string ConnectionString { get; set; }
}

Program.csには以下のように記載します。

builder.Services.AddOptions<TestOptions>()
    .Bind(builder.Configuration.GetSection(TestOptions.SectionName))
    .ValidateDataAnnotations()
    .ValidateOnStart();

ValidateDataAnnotations()は検証を実行します。この場合は「ConnectionString」という環境変数が設定されているかチェックします。ただし、これだけだとTestOptionsクラスを利用する時に検証を行ってしまうので、ValidateOnStart()でアプリ起動時に検証を行うように設定します。環境変数が正しく設定されていないとそもそもアプリが起動しなくなります。

環境変数が存在しない場合、もしくは環境変数の値に何も入っていない場合は、以下のような例外が発生します。

Microsoft.Extensions.Options.OptionsValidationException: 'DataAnnotation validation failed for 'TestOptions' members: 'ConnectionString' with the error: 'The ConnectionString field is required.'.'

以下のように、設定された値を検証することもできます。

//httpsで始まる文字列
[RegularExpression(@"^https.*")]
public required string ConnectionString { get; set; }

//0以上の100以下の整数
[Range(0, 100)]
public int MaxCount { get; set; }

終わりに

上記のように実装することによって、開発時や運用時に役立てることができると思います。是非使ってみてください。

執筆担当者プロフィール
古川 貴浩

古川 貴浩(日本ビジネスシステムズ株式会社)

アプリケーション開発をしています。.NETやAI関連が好きです。

担当記事一覧