ASP.NET Core 6でのappsettings.jsonの使用方法
問題の概要
ASP.NET Core 6では、Startup
クラスとProgram
クラスが統合され、最小限のAPI構成が導入されました。これにより、従来の方法でappsettings.json
設定ファイルにアクセスする方法が変更され、多くの開発者が新しい構成パターンに適応する必要が生じています。
元のコードでは、Redisキャッシュの接続文字列がハードコードされていました:
options.Configuration = "localhost:6379";
このような設定値はappsettings.json
から読み込むべきで、環境ごとに異なる設定を柔軟に管理できます。
基本的な設定アクセス方法
方法1: 直接的な値の取得
builder.Configuration
を使用して直接設定値にアクセスできます:
var builder = WebApplication.CreateBuilder(args);
// Redis設定の取得
var redisConfiguration = builder.Configuration["RedisCacheOptions:Configuration"];
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = redisConfiguration;
});
対応するappsettings.json
:
{
"RedisCacheOptions": {
"Configuration": "localhost:6379"
}
}
方法2: セクションごとの取得
設定をセクション単位で取得する方法:
var redisSection = builder.Configuration.GetSection("RedisCacheOptions");
var redisConfiguration = redisSection["Configuration"];
型安全な設定バインディング
設定クラスの定義
設定値をクラスにマッピングすることで、型安全かつIntelliSenseのサポートを受けられます:
public class RedisCacheOptions
{
public string Configuration { get; set; }
}
プログラムでの使用方法
var redisCacheOptions = new RedisCacheOptions();
builder.Configuration.GetSection("RedisCacheOptions").Bind(redisCacheOptions);
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = redisCacheOptions.Configuration;
});
依存性注入での使用
設定をサービスとして登録し、コントローラーなどで注入して使用できます:
// プログラムクラスでの設定
builder.Services.Configure<RedisCacheOptions>(
builder.Configuration.GetSection("RedisCacheOptions"));
// コントローラーでの使用
public class MyController : ControllerBase
{
private readonly RedisCacheOptions _redisOptions;
public MyController(IOptions<RedisCacheOptions> options)
{
_redisOptions = options.Value;
}
// メソッド内で _redisOptions.Configuration を使用
}
複雑な設定構造の扱い
ネストされた設定構造も同様に扱えます:
{
"AuthenticationConfiguration": {
"JwtBearerConfiguration": {
"Authority": "https://securetoken.google.com/somevalue",
"TokenValidationConfiguration": {
"Issuer": "https://securetoken.google.com/somevalue",
"Audience": "somevalue"
}
}
}
}
対応するクラス構造:
public class AuthenticationConfiguration
{
public JwtBearerConfiguration JwtBearerConfiguration { get; set; }
= new JwtBearerConfiguration();
}
public class JwtBearerConfiguration
{
public string Authority { get; set; }
public TokenValidationConfiguration TokenValidationConfiguration { get; set; }
= new TokenValidationConfiguration();
}
public class TokenValidationConfiguration
{
public string Issuer { get; set; }
public string Audience { get; set; }
}
バインド方法:
var authConf = new AuthenticationConfiguration();
builder.Configuration.GetSection("AuthenticationConfiguration").Bind(authConf);
接続文字列の取得
データベース接続文字列など、一般的な接続文字列の取得:
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
appsettings.json
の設定:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=MyDb;Trusted_Connection=True;"
}
}
環境別設定の活用
ASP.NET Coreでは、環境に応じた設定ファイルを自動的に読み込みます:
appsettings.json
- 基本設定appsettings.Development.json
- 開発環境用appsettings.Production.json
- 本番環境用
環境変数は設定ファイルよりも優先され、機密情報の管理に適しています。
ベストプラクティス
機密情報(パスワード、APIキーなど)は設定ファイルではなく、環境変数またはSecret Managerを使用して管理することを推奨します。
まとめ
ASP.NET Core 6では、WebApplicationBuilder
のConfiguration
プロパティを通じて簡単に設定値にアクセスできます。型安全なバインディングと依存性注入を組み合わせることで、保守性の高いコードを実現できます。
var builder = WebApplication.CreateBuilder(args);
// 設定の取得とサービス登録
var redisConfig = builder.Configuration.GetSection("Redis").Get<RedisSettings>();
builder.Services.AddSingleton(redisConfig);
// またはオプションパターンの使用
builder.Services.Configure<RedisSettings>(
builder.Configuration.GetSection("Redis"));
これらの手法を活用することで、設定の管理が容易になり、アプリケーションの柔軟性と保守性が向上します。