知識マップ: appsettings.jsonだけじゃない ── Windows業務アプリの構成管理実務(環境別設定・秘密情報・書き込み先)
記事「appsettings.jsonだけじゃない ── Windows業務アプリの構成管理実務(環境別設定・秘密情報・書き込み先)」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事は、.NETの構成管理をIConfigurationによる構成プロバイダーの重ね合わせ、IOptionsファミリーによる型安全な受け取り、環境変数による環境切り替えという3つの仕組みから整理する。appsettings.jsonはappsettings.{Environment}.json・Secret Manager・環境変数・コマンドライン引数の順に上書きされ、後から追加したプロバイダーが勝つ。IOptionsは起動時の値を保持し続ける一方、IOptionsMonitorはreloadOnChangeによるファイル変更を即時反映でき、ValidateOnStartと組み合わせれば設定の不備を起動時に検出できる。書き込みが必要な設定は%LOCALAPPDATA%や%ProgramData%に分離し、秘密情報は開発時のuser-secretsと本番のDPAPIで役割を分け、App.config世代の資産はappsettings.jsonへ段階的に移行する。
flowchart LR
accTitle: .NET構成管理の実務知識マップ
accDescr: .NETの設定がIConfigurationと構成プロバイダーの優先順位で重ね合わされる仕組み、appsettings.json・環境別設定・環境変数・コマンドライン引数の上書き順序、IOptions/IOptionsSnapshot/IOptionsMonitorの使い分けとreloadOnChangeやValidateOnStartとの関係、書き込み可能な設定の置き場所と秘密情報の扱い、App.config世代からの移行先を示す図
dotnet_configuration[".NETの構成システム(IConfiguration)"]
dotnet_options_pattern["オプションパターン"]
configuration_provider["構成プロバイダー"]
appsettings_json["appsettings.json"]
environment_specific_config["appsettings.{Environment}.json"]
user_secrets["Secret Manager(user-secrets)"]
environment_variable_provider["環境変数プロバイダー"]
command_line_argument_provider["コマンドライン引数プロバイダー"]
generic_host["Generic Host"]
dotnet_environment_variable["DOTNET_ENVIRONMENT"]
ioptions["IOptions<T>"]
ioptionssnapshot["IOptionsSnapshot<T>"]
ioptionsmonitor["IOptionsMonitor<T>"]
reloadonchange["reloadOnChange"]
validateonstart["ValidateOnStart"]
writable_app_setting["アプリが書き換える設定"]
local_appdata_storage["%LOCALAPPDATA%配下の保存先"]
programdata_storage["%ProgramData%配下の保存先"]
secret_value["秘密情報"]
dpapi["DPAPI"]
appconfig["App.config"]
configurationmanager["System.Configuration.ConfigurationManager"]
dotnet_framework[".NET Framework"]
settings_settings["Settings.settings"]
dotnet[".NET(Core以降)"]
dotnet_configuration -->|"利用する"| configuration_provider
appsettings_json -->|"より先に行うべき"| environment_specific_config
environment_specific_config -.->|"より先に行うべき"| user_secrets
user_secrets -->|"より先に行うべき"| environment_variable_provider
environment_variable_provider -->|"より先に行うべき"| command_line_argument_provider
generic_host -->|"利用する"| dotnet_configuration
generic_host -->|"利用する"| dotnet_environment_variable
environment_specific_config -->|"前提とする"| dotnet_environment_variable
generic_host -.->|"利用する"| dotnet_options_pattern
dotnet_options_pattern -->|"利用する"| ioptions
dotnet_options_pattern -->|"利用する"| ioptionssnapshot
dotnet_options_pattern -->|"利用する"| ioptionsmonitor
ioptions -->|"用いるのは非推奨"| reloadonchange
ioptionsmonitor -.->|"前提とする"| reloadonchange
dotnet_options_pattern -.->|"利用する"| validateonstart
appsettings_json -->|"用いるのは非推奨"| writable_app_setting
local_appdata_storage -->|"推奨される対応"| writable_app_setting
programdata_storage -->|"推奨される対応"| writable_app_setting
user_secrets -.->|"推奨される対応"| secret_value
dpapi -->|"推奨される対応"| secret_value
appsettings_json -->|"の後継"| appconfig
configurationmanager -->|"利用する"| appconfig
appconfig -->|"利用する"| dotnet_framework
settings_settings -->|"用いるのは非推奨"| dotnet
local_appdata_storage -->|"の後継"| settings_settings
概念間の関係(全25件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- .NETの構成システム(IConfiguration)は構成プロバイダーを利用します。
- appsettings.jsonはappsettings.{Environment}.jsonより先に行うべきです。
- appsettings.{Environment}.jsonはSecret Manager(user-secrets)より先に行うべきです。
- Secret Manager(user-secrets)は環境変数プロバイダーより先に行うべきです。
- 環境変数プロバイダーはコマンドライン引数プロバイダーより先に行うべきです。
- Generic Hostは.NETの構成システム(IConfiguration)を利用します。
- Generic HostはDOTNET_ENVIRONMENTを利用します。
- appsettings.{Environment}.jsonはDOTNET_ENVIRONMENTを前提とします。
- Generic Hostはオプションパターンを利用します。
- オプションパターンはIOptions<T>を利用します。
- オプションパターンはIOptionsSnapshot<T>を利用します。
- オプションパターンはIOptionsMonitor<T>を利用します。
- IOptions<T>をreloadOnChangeに用いることは推奨されません。
- IOptionsMonitor<T>はreloadOnChangeを前提とします。
- オプションパターンはValidateOnStartを利用します。
- appsettings.jsonをアプリが書き換える設定に用いることは推奨されません。
- %LOCALAPPDATA%配下の保存先はアプリが書き換える設定に対する本記事の推奨です。
- %ProgramData%配下の保存先はアプリが書き換える設定に対する本記事の推奨です。
- Secret Manager(user-secrets)は秘密情報に対する本記事の推奨です。
- DPAPIは秘密情報に対する本記事の推奨です。
- appsettings.jsonはApp.configの後継に当たります。
- System.Configuration.ConfigurationManagerはApp.configを利用します。
- App.configは.NET Frameworkを利用します。
- Settings.settingsを.NET(Core以降)に用いることは推奨されません。
- %LOCALAPPDATA%配下の保存先はSettings.settingsの後継に当たります。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。