bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. [C#] .NETが用意しているアプリケーションの設定クラスを試す - ConfigurationBuilder

[C#] .NETが用意しているアプリケーションの設定クラスを試す - ConfigurationBuilder

Jan 20, 2026 C# , .NET bucket-sort

Microsoft.Extensions.Configuration.ConfigurationBuilder は、

アプリケーション設定を「さまざまなソース」から読み込み、1つの設定オブジェクトとして統合するための仕組み

です。もともとは ASP.NET Core 用に設計されましたが、現在はコンソールアプリや Worker Service、WinForms / WPF でも普通に使われています。

ConfigurationBuilder の概要

ConfigurationBuilder は

  • JSON
  • 環境変数
  • コマンドライン引数
  • INI ファイル
  • メモリ上の値
  • Azure App Configuration など

といった 複数の設定ソースを合成するためのビルダーです。

最終的に IConfiguration を生成します。

ConfigurationBuilder の位置づけ (というか役回り)

ConfigurationBuilder は

  • 設定を「保存するクラス」ではない
  • 設定を「読み込んで統合するクラス」

です。つまり

  • JSONシリアライズ用クラスではありません。

保存処理(Write)は標準では提供されません。 読み取り専用に近い設計です。

テストコード

// 設定ファイルの使用例
Console.WriteLine("\n=== Microsoft.Extensions.Configuration の使用例 ===");

// ConfigurationBuilderを使ってappsettings.jsonから設定を読み込む
var configuration = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

// 方法1: 個別の値を取得
Console.WriteLine("\n[方法1: 個別の値を取得]");
var theme = configuration["AppSettings:Theme"];
var fontSize = configuration["AppSettings:FontSize"];
Console.WriteLine($"Theme: {theme}");
Console.WriteLine($"FontSize: {fontSize}");

// 方法2: セクションを取得
Console.WriteLine("\n[方法2: セクションを取得]");
var appSettingsSection = configuration.GetSection("AppSettings");
Console.WriteLine($"Theme: {appSettingsSection["Theme"]}");
Console.WriteLine($"FontSize: {appSettingsSection["FontSize"]}");
Console.WriteLine($"EnableNotifications: {appSettingsSection["EnableNotifications"]}");

// 方法3: 強く型付けされたオブジェクトにバインド(推奨)
Console.WriteLine("\n[方法3: 強く型付けされたオブジェクトにバインド]");
var settings = appSettingsSection.Get<AppSettingsStore.SettingsDto>();
if (settings != null)
{
    Console.WriteLine($"Theme: {settings.Theme}");
    Console.WriteLine($"FontSize: {settings.FontSize}");
    Console.WriteLine($"EnableNotifications: {settings.EnableNotifications}");
}

// 注意: Microsoft.Extensions.Configurationは読み込み専用
// 設定を保存するには、引き続きJsonSerializerを使う
Console.WriteLine("\n[設定の保存には JsonSerializer を使用]");
var appSettingsStore = new AppSettingsStore("SampleJson");
var currentSettings = appSettingsStore.Load();
Console.WriteLine($"Current saved settings - Theme: {currentSettings.Theme}, FontSize: {currentSettings.FontSize}");

参考サイト

ConfigurationBuilder Class (Microsoft.Extensions.Configuration) | Microsoft Learn
https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.configurationbuilder?view=net-10.0-pp

C# .NET Windows Code Snippet
← [C#] アプリケーションの設定をJSON形式で保存する - JsonSerializer AlmaLinux 9.5のPHPをアップデートする (8.2 → 8.3 → 8.4) →

Related Posts

  • [C#] グローバルフックとキーボードフックを理解する - SetWindowsHookExの使い方 Jan 25, 2026
  • [C#] アプリケーションの設定をJSON形式で保存する - JsonSerializer Jan 19, 2026
  • [C#] アプリケーションのデータをJSONにシリアライズする - JsonSerializer Jan 18, 2026
  • [C#] LiveChartsCoreで折れ線グラフを表示する(基本からレンジ切替まで) Jan 26, 2026

Table of Contents

  • ConfigurationBuilder の概要
  • ConfigurationBuilder の位置づけ (というか役回り)
  • テストコード
  • 参考サイト

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.