スキップしてメイン コンテンツに移動

設定ファイルのあれこれ

設定ファイルって皆さんどうしてますか?

これまで設定ファイルとは無縁だったり、何ならC#とも無縁だったりで、その辺の事情が分からないこともあり、ちょろっと調べたら何かいっぱい出てきました。こちらのサイトがまとめられていて非常に参考になります。また他にもレジストリを使った方法やConfigurationManagerをつかってApp.configにアクセスする方法があるみたいです。

Properties.Settings

とりあえずPropertiesSettingsを使いました。というのも海外ニキたちのやり取りを見た感じだと、appsettigs.jsonはアプリケーションの固有値で読み出しが主で、PropertiesSettinsはユーザー設定を読み書きするって感じでした。それでもって.NETで依存関係の挿入(DI)で使われるIOptionsも、appsettings.jsonのデータを独自クラスで取り出してくれるのでかなり便利!っと思ったのですが、ファイルは更新できません。だから、やっぱりそういう使い方なんだろうなぁと思ったのです。

user.configは何処に?

順調に動いていてカンペキ!とか思っていたのですがexeを移動すると設定がまっさらになることに気づきました。調べてみると設定ファイルはアセンブリのパスによって決まるらしい。確かにReleaseとDebugで違うなぁと思ってたけど、それはてっきりバイナリの違いかと思っていた。パスで決めるってどうよ。
例えばPCにインストールするタイプの実行ファイルならそれでも十分なんだけど、ちっちゃいユーティリティだと思い付きで配置を変えたりするので向いてない。それに設定ファイルは隠しフォルダにあるから持ってくるのもハードルたかし。
頑張れば保存場所も変更できると分かって少し実装したのですが、「これは本当にする必要があることかね?」ってもう一人のボクに諭された結果別の方法にすることにしました。

Generic Host の Configuration

色々調べているうちにIOptionsを書き換え可能にする方法を見つけまして、日本語だとあまり出てこないけど英語だと何件かあって、nugetパッケージを作ったり使ったりしている人もいるのでやっぱり需要あるよねと思いました。実際のところ設定ファイルを指定すれば独自ファイルを作っているのと同じなので標準化して欲しいなぁと思っています。

設定ファイルはappsettings.jsonじゃない方が良い?

appsettings.jsonを設定ファイルにしない方が良くない?って思った瞬間がありまして、
  • Visual Studioの初期設定だとビルドする度にappsettings.jsonが上書きされる
  • 配布時の設定ファイルの扱いが難しい
Visual Studioの初期設定だとビルドするたびにappsettings.jsonが上書きされるので設定が残せない。一応、設定を"常にコピーする"ではなく"新しい場合はコピーする"にすれば、大丈夫なんだけど初期値変えちゃうのかぁって思ったりはする。
あと配布時の話っていうのは、初期設定の意味でappsettings.jsonを同梱するようにすると、バージョンのアップデート時にフォルダごと上書きみたいなことをしようとすると、うっかり設定ファイルを上書きしちゃうみたいな事故が起こるからイマイチだなぁと。なので設定ファイルは別ファイルにして固有値はappsettings.jsonって形で使い分けたほうが良さげだなぁって思っています。

コメント

このブログの人気の投稿

KoeMill V.0.9.0.0 リリース

KoeMillのV.0.9.0.0をリリース KoeMillは、音声認識による文字起こしを行うソフトウェアです。音声認識モデルにはWhisperが採用されており動画や音声から自動的に高品質な文字起こしができるため、煩雑な手作業を省くことができます。 オフラインで動作するため、ネットワークの遅延などによる遅れやプライバシーに関する懸念もありません。また、GPUを利用することで高速な処理を実現します。 ダウンロードページ

CapCap V.0.9.2.7 リリース

CapCapのV.0.9.2.7をリリース 主な変更内容 HTTP POST設定でヘッダの設定に対応 HTTP POST設定でJSONのオブジェクトおよび配列に対応 HTTP POST設定を大項目ごとに折りたためる機能に対応 サンプルプリセット(ChatGPT API)を追加 プリセット複製時に複製先の変更が複製元に及んでいた不具合を修正 HTTP POST設定 新たにリクエストヘッダを設定できるようになりました。これによりAuthorizationによる認証などヘッダが必要なAPIにも対応できるようになりました。合わせて、これまで設定することが出来なかったJSON ObjectおよびArrayについても設定できるようになりました。 ChatGPT APIについて サンプルプリセットを追加しました。HTTP POSTのヘッダおよびJSON ArrayとObjectに対応したため、その対応例となります。 継続的に使おうとすると費用が発生することになるので、無料枠が残っている間に遊んでもらえると幸いです。 DLページ: Home

CapCap V0.9.2.5 リリース

CapCapのV0.9.2.5をリリース 主な変更内容 段落検出機能を追加 字幕モードの名称を変更(Readability -> Text, Layout -> Item) 段落検出 テキストの行同士の距離をもとに段落を検出することが出来るようになりました。 段落の検出および段落間への空行挿入が行なえます。 これまではテキストをひと繋がりの文章として認識していましたが、段落ごとに分離されることで可読性の向上が見込めます。 文章に対して段落が多い場合や段落が2行からなる場合などには精度が落ちる傾向にあります。また実験的機能の側面があるため問題点等あればご報告いただけると助かります。 DLページ: Home