@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/dotnet-configuration-management-guide/#article>
    schema:about <https://comcomponent.com/knowledge/dotnet-configuration/>, <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    schema:mentions <https://comcomponent.com/knowledge/configuration-provider/>, <https://comcomponent.com/knowledge/appsettings-json/>, <https://comcomponent.com/knowledge/environment-specific-config/>, <https://comcomponent.com/knowledge/generic-host/>, <https://comcomponent.com/knowledge/dotnet-environment-variable/>, <https://comcomponent.com/knowledge/environment-variable-provider/>, <https://comcomponent.com/knowledge/command-line-argument-provider/>, <https://comcomponent.com/knowledge/ioptions/>, <https://comcomponent.com/knowledge/ioptionssnapshot/>, <https://comcomponent.com/knowledge/ioptionsmonitor/>, <https://comcomponent.com/knowledge/validateonstart/>, <https://comcomponent.com/knowledge/user-secrets/>, <https://comcomponent.com/knowledge/secret-value/>, <https://comcomponent.com/knowledge/local-appdata-storage/>, <https://comcomponent.com/knowledge/programdata-storage/>, <https://comcomponent.com/knowledge/writable-app-setting/>, <https://comcomponent.com/knowledge/reloadonchange/>, <https://comcomponent.com/knowledge/appconfig/>, <https://comcomponent.com/knowledge/configurationmanager/>, <https://comcomponent.com/knowledge/settings-settings/>, <https://comcomponent.com/knowledge/dpapi/>, <https://comcomponent.com/knowledge/dotnet/>, <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/dotnet-configuration/> a skos:Concept ;
    skos:prefLabel ".NETの構成システム(IConfiguration)"@ja ;
    skos:definition "JSON・環境変数・コマンドライン引数など性質の異なる構成ソースを、複数の構成プロバイダーの重ね合わせとして背後に統合する.NETのキー・バリューストア。"@ja ;
    skos:altLabel "IConfiguration" ;
    skos:altLabel "Configuration System" ;
    ks:uses <https://comcomponent.com/knowledge/configuration-provider/> .

<https://comcomponent.com/knowledge/dotnet-options-pattern/> a skos:Concept ;
    skos:prefLabel "オプションパターン"@ja ;
    skos:definition "設定を文字列キーではなくPOCOにバインドして型として受け取る.NETの設計パターンの総称。"@ja ;
    skos:altLabel "Options Pattern" ;
    skos:altLabel "IOptionsファミリー"@ja ;
    ks:uses <https://comcomponent.com/knowledge/ioptions/> ;
    ks:uses <https://comcomponent.com/knowledge/ioptionssnapshot/> ;
    ks:uses <https://comcomponent.com/knowledge/ioptionsmonitor/> .

<https://comcomponent.com/knowledge/configuration-provider/> a skos:Concept ;
    skos:prefLabel "構成プロバイダー"@ja ;
    skos:definition "JSON・環境変数・コマンドライン・INI・XML・メモリ上のコレクションなど、性質の異なる構成ソースをIConfigurationの背後に統合する仕組み。後から追加したプロバイダーが同じキーの値を上書きする。"@ja ;
    skos:altLabel "Configuration Provider" ;
    skos:broader <https://comcomponent.com/knowledge/dotnet-configuration/> .

<https://comcomponent.com/knowledge/appsettings-json/> a skos:Concept ;
    skos:prefLabel "appsettings.json"@ja ;
    skos:definition "ビルド成果物に同梱する、環境に依存しない既定値を置くJSON構成ファイル。"@ja ;
    skos:altLabel "アプリ既定値ファイル"@ja ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/environment-specific-config/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/writable-app-setting/> ;
    ks:succeeds <https://comcomponent.com/knowledge/appconfig/> .

<https://comcomponent.com/knowledge/environment-specific-config/> a skos:Concept ;
    skos:prefLabel "appsettings.{Environment}.json"@ja ;
    skos:definition "基本のappsettings.jsonを環境ごとに上書きする差分ファイルで、環境ごとに変わる値だけを書けばよい。"@ja ;
    skos:altLabel "環境別設定ファイル"@ja ;
    ks:requires <https://comcomponent.com/knowledge/dotnet-environment-variable/> .

<https://comcomponent.com/knowledge/user-secrets/> a skos:Concept ;
    skos:prefLabel "Secret Manager(user-secrets)"@ja ;
    skos:definition "開発時に秘密情報を扱うための.NETの仕組み。暗号化されておらず、開発専用であり信頼できるストアとして扱ってはいけないと公式に明記されている。"@ja ;
    skos:altLabel "dotnet user-secrets" ;
    skos:altLabel "Secret Manager" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/environment-variable-provider/> .

<https://comcomponent.com/knowledge/environment-variable-provider/> a skos:Concept ;
    skos:prefLabel "環境変数プロバイダー"@ja ;
    skos:definition "プレフィックスなしの環境変数を、IConfiguration経由のアプリ設定として既定の並びに組み込む構成プロバイダー。"@ja ;
    skos:altLabel "AddEnvironmentVariables" ;
    skos:broader <https://comcomponent.com/knowledge/configuration-provider/> ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/command-line-argument-provider/> .

<https://comcomponent.com/knowledge/command-line-argument-provider/> a skos:Concept ;
    skos:prefLabel "コマンドライン引数プロバイダー"@ja ;
    skos:definition "起動時のコマンドライン引数を構成プロバイダーとして追加する仕組みで、既定の並びの中で最も優先度が高くなる。"@ja ;
    skos:altLabel "AddCommandLine" ;
    skos:broader <https://comcomponent.com/knowledge/configuration-provider/> .

<https://comcomponent.com/knowledge/generic-host/> a skos:Concept ;
    skos:prefLabel "Generic Host"@ja ;
    skos:definition "構成・DI・ロギングをまとめて面倒を見る.NETの土台。Host.CreateApplicationBuilderを使うと既定の構成プロバイダーの階層が組み立てられる。"@ja ;
    skos:altLabel "HostApplicationBuilder" ;
    skos:altLabel "Host.CreateApplicationBuilder" ;
    ks:uses <https://comcomponent.com/knowledge/dotnet-configuration/> ;
    ks:uses <https://comcomponent.com/knowledge/dotnet-environment-variable/> .

<https://comcomponent.com/knowledge/dotnet-environment-variable/> a skos:Concept ;
    skos:prefLabel "DOTNET_ENVIRONMENT"@ja ;
    skos:definition "実行環境名(Development/Staging/Productionなど)を決める環境変数。WebApplication使用時はDOTNET_ENVIRONMENTがASPNETCORE_ENVIRONMENTより優先され、どちらも未設定なら既定はProductionになる。"@ja ;
    skos:altLabel "ASPNETCORE_ENVIRONMENT" ;
    skos:altLabel "環境変数による環境切り替え"@ja .

<https://comcomponent.com/knowledge/ioptions/> a skos:Concept ;
    skos:prefLabel "IOptions<T>"@ja ;
    skos:definition "シングルトンとして登録され、起動時に1回だけ計算した値を保持し続ける、オプションパターンの最もシンプルな受け取り方。"@ja ;
    skos:altLabel "IOptions" ;
    skos:broader <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/reloadonchange/> .

<https://comcomponent.com/knowledge/ioptionssnapshot/> a skos:Concept ;
    skos:prefLabel "IOptionsSnapshot<T>"@ja ;
    skos:definition "スコープとして登録され、スコープが再構築されるたびに値を再計算するオプションパターンの受け取り方。"@ja ;
    skos:altLabel "IOptionsSnapshot" ;
    skos:broader <https://comcomponent.com/knowledge/dotnet-options-pattern/> .

<https://comcomponent.com/knowledge/ioptionsmonitor/> a skos:Concept ;
    skos:prefLabel "IOptionsMonitor<T>"@ja ;
    skos:definition "シングルトンとして登録されつつ、変更通知(OnChange)付きでいつでも最新値を取得できるオプションパターンの受け取り方。"@ja ;
    skos:altLabel "IOptionsMonitor" ;
    skos:broader <https://comcomponent.com/knowledge/dotnet-options-pattern/> .

<https://comcomponent.com/knowledge/reloadonchange/> a skos:Concept ;
    skos:prefLabel "reloadOnChange"@ja ;
    skos:definition "PhysicalFileProviderがFileSystemWatcherを使ってappsettings.jsonの変更を検知し、自動的に再読み込みする仕組み。"@ja ;
    skos:altLabel "AddJsonFileのreloadOnChangeオプション"@ja .

<https://comcomponent.com/knowledge/validateonstart/> a skos:Concept ;
    skos:prefLabel "ValidateOnStart"@ja ;
    skos:definition "DataAnnotationsによる検証と組み合わせ、設定の不備をホスト起動時(StartAsync/RunAsync時)に例外として検出できるようにする.NETのオプション検証機構。"@ja ;
    skos:altLabel "ValidateDataAnnotations" ;
    skos:altLabel "起動時検証"@ja .

<https://comcomponent.com/knowledge/writable-app-setting/> a skos:Concept ;
    skos:prefLabel "アプリが書き換える設定"@ja ;
    skos:definition "前回開いたフォルダーや装置のCOMポート番号など、アプリ自身が実行中に書き込む必要がある設定。"@ja ;
    skos:altLabel "ユーザーごとの設定"@ja ;
    skos:altLabel "マシンごとの設定"@ja .

<https://comcomponent.com/knowledge/local-appdata-storage/> a skos:Concept ;
    skos:prefLabel "%LOCALAPPDATA%配下の保存先"@ja ;
    skos:definition "ユーザーごとに書き込める、ユーザー単位の設定・データを置く既定のフォルダー。"@ja ;
    skos:altLabel "Environment.SpecialFolder.LocalApplicationData" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/writable-app-setting/> ;
    ks:succeeds <https://comcomponent.com/knowledge/settings-settings/> .

<https://comcomponent.com/knowledge/programdata-storage/> a skos:Concept ;
    skos:prefLabel "%ProgramData%配下の保存先"@ja ;
    skos:definition "管理者が1台につき1つ設定し、全ユーザーで共有するマシン単位の設定を置くフォルダー。"@ja ;
    skos:altLabel "Environment.SpecialFolder.CommonApplicationData" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/writable-app-setting/> .

<https://comcomponent.com/knowledge/secret-value/> a skos:Concept ;
    skos:prefLabel "秘密情報"@ja ;
    skos:definition "漏れた場合にパスワードやAPIキーの再発行、不正アクセス調査が必要になる、接続文字列のパスワードやAPIキーなどの値。"@ja ;
    skos:altLabel "接続文字列のパスワード"@ja ;
    skos:altLabel "APIキー"@ja ;
    skos:altLabel "トークン"@ja .

<https://comcomponent.com/knowledge/dpapi/> a skos:Concept ;
    skos:prefLabel "DPAPI"@ja ;
    skos:definition "実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。"@ja ;
    skos:altLabel "データ保護API"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/secret-value/> .

<https://comcomponent.com/knowledge/appconfig/> a skos:Concept ;
    skos:prefLabel "App.config"@ja ;
    skos:definition ".NET Framework時代のXML形式の構成ファイルで、<appSettings>セクションなどを持つ。"@ja ;
    skos:altLabel "Web.config" ;
    skos:altLabel "<appSettings>" ;
    ks:uses <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/configurationmanager/> a skos:Concept ;
    skos:prefLabel "System.Configuration.ConfigurationManager"@ja ;
    skos:definition ".NET Framework時代のApp.config読み込みコードを.NET上でもそのまま動かせるようにするNuGetパッケージ。"@ja ;
    skos:altLabel "ConfigurationManager.AppSettings" ;
    ks:uses <https://comcomponent.com/knowledge/appconfig/> .

<https://comcomponent.com/knowledge/dotnet-framework/> a skos:Concept ;
    skos:prefLabel ".NET Framework"@ja ;
    skos:definition "Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。"@ja .

<https://comcomponent.com/knowledge/settings-settings/> a skos:Concept ;
    skos:prefLabel "Settings.settings"@ja ;
    skos:definition ".NET Frameworkでユーザーごとの設定を自動的に保存できた仕組み。.NETには相当する自動生成の仕組みが標準では用意されていない。"@ja ;
    skos:altLabel "ApplicationSettingsBase" ;
    skos:altLabel "ユーザースコープ設定"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/dotnet/> .

<https://comcomponent.com/knowledge/dotnet/> a skos:Concept ;
    skos:prefLabel ".NET(Core以降)"@ja ;
    skos:definition ".NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。"@ja ;
    skos:altLabel ".NET Core" ;
    skos:altLabel "モダンな.NET"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-configuration/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/configuration-provider/> ;
    schema:description "IConfigurationは複数の構成プロバイダーを重ねて読み込む仕組みでできている"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/configuration-providers> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/appsettings-json/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/environment-specific-config/> ;
    schema:description "既定の構成プロバイダーの並びでは、appsettings.jsonの後にappsettings.{Environment}.jsonが読み込まれ、同じキーは後から読んだ値で上書きされる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/configuration#alternative-hosting-approach> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/environment-specific-config/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/user-secrets/> ;
    schema:description "開発環境では、appsettings.{Environment}.jsonの後にSecret Managerが読み込まれ、値を上書きする"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/configuration#alternative-hosting-approach> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/user-secrets/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/environment-variable-provider/> ;
    schema:description "既定の並びでは、開発環境のSecret Managerの後に環境変数プロバイダーが読み込まれ、値を上書きする"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/configuration#alternative-hosting-approach> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/environment-variable-provider/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/command-line-argument-provider/> ;
    schema:description "既定の並びでは環境変数プロバイダーの後にコマンドライン引数プロバイダーが読み込まれ、最も優先度が高くなる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/generic-host#host-builder-settings> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/generic-host/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-configuration/> ;
    schema:description "Host.CreateApplicationBuilderを使うと、appsettings.json/appsettings.{Environment}.json/環境変数/コマンドライン引数が既定の優先順位で読み込まれたIConfigurationが用意される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/generic-host#host-builder-settings> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/generic-host/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-environment-variable/> ;
    schema:description "Generic Hostを使うアプリでは、環境の切り替えをDOTNET_ENVIRONMENT(またはASPNETCORE_ENVIRONMENT)で行う"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/fundamentals/environments?view=aspnetcore-10.0#logging> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/environment-specific-config/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-environment-variable/> ;
    schema:description "appsettings.{Environment}.jsonのEnvironment部分は、DOTNET_ENVIRONMENT等で決まる環境名に対応する"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/fundamentals/environments?view=aspnetcore-10.0#logging> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/generic-host/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    schema:description "型としてまとめて受け取りたい場合、Generic Hostで組み立てたIConfigurationの値は、IOptionsファミリーを通じて型として受け取れる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/options#bind-hierarchical-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/ioptions/> ;
    schema:description "起動時に1回だけ計算すればよい設定は、オプションパターンのうちIOptionsで受け取る"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/options#bind-hierarchical-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/ioptionssnapshot/> ;
    schema:description "スコープが明確な文脈では、オプションパターンのうちIOptionsSnapshotで受け取ることもできる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/options#bind-hierarchical-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/ioptionsmonitor/> ;
    schema:description "変更を検知したい常駐サービスなどでは、オプションパターンのうちIOptionsMonitorで受け取る"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/options#bind-hierarchical-configuration> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ioptions/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/reloadonchange/> ;
    schema:description "IOptionsは起動時の値を保持し続けるため、reloadOnChangeでappsettings.jsonが再読み込みされても値は反映されない。再読み込みを反映させたい用途にIOptionsを使うのは適さない(IOptionsMonitorを使う)"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/fundamentals/change-tokens?view=aspnetcore-10.0#monitor-for-configuration-changes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ioptionsmonitor/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/reloadonchange/> ;
    schema:description "IOptionsMonitor経由で読んだ値だけが、reloadOnChangeによるappsettings.jsonの再読み込みを反映する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/options#ioptionsmonitor> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-options-pattern/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/validateonstart/> ;
    schema:description "DataAnnotations検証とValidateOnStart()を組み合わせれば、設定の不備をホスト起動時に例外として検出できる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/options#options-validation> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/appsettings-json/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/writable-app-setting/> ;
    schema:description "appsettings.jsonは読み取り専用の既定値を置く場所であり、アプリ自身が書き換える設定の置き場所ではない"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.environment.getfolderpath?view=net-10.0> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/local-appdata-storage/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/writable-app-setting/> ;
    schema:description "ユーザーごとに書き込める%LOCALAPPDATA%配下は、アプリが書き換えるユーザー単位の設定の置き場所として推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.environment.getfolderpath?view=net-10.0> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/programdata-storage/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/writable-app-setting/> ;
    schema:description "全ユーザー共有の%ProgramData%配下は、アプリが書き換えるマシン単位の設定の置き場所として推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.environment.getfolderpath?view=net-10.0> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/user-secrets/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/secret-value/> ;
    schema:description "開発時の秘密情報はSecret Managerで扱うが、暗号化されておらず開発専用であるため本番の秘密情報をuser-secretsに入れて配布するのは誤りである"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/security/app-secrets?view=aspnetcore-10.0#use-the-secret-manager-tool> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dpapi/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/secret-value/> ;
    schema:description "本番運用では、接続文字列のパスワードやAPIキーなどの秘密情報をDPAPI(ProtectedData)でユーザーまたはマシンの資格情報に紐づけて暗号化する"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/security/app-secrets?view=aspnetcore-10.0#use-the-secret-manager-tool> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/appsettings-json/> ;
    rdf:predicate ks:succeeds ;
    rdf:object <https://comcomponent.com/knowledge/appconfig/> ;
    schema:description "App.config/Web.configの<appSettings>は、appsettings.json + IConfigurationに置き換わる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/porting/modernize#appconfig> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/configurationmanager/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/appconfig/> ;
    schema:description "System.Configuration.ConfigurationManager NuGetパッケージを追加すれば、App.configの読み込みコードはそのまま動く"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/porting/modernize#appconfig> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/appconfig/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-framework/> ;
    schema:description "App.config/Web.configの<appSettings>は.NET Framework時代の構成の仕組みである"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/porting/modernize#appconfig> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/settings-settings/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/dotnet/> ;
    schema:description "Settings.settingsのユーザースコープ設定を自動保存する仕組みに相当するものは.NETに標準で用意されていないため、.NETで同じ運用を前提にするのは適さない。互換パッケージや自前実装で同等の仕組みを持たせること自体はできる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/porting/modernize#appconfig> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/local-appdata-storage/> ;
    rdf:predicate ks:succeeds ;
    rdf:object <https://comcomponent.com/knowledge/settings-settings/> ;
    schema:description ".NETでは自前のJSON保存クラスを%LOCALAPPDATA%配下に用意することが、Settings.settingsのユーザースコープ設定の置き換えになる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/porting/modernize#appconfig> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
