Windowsアプリでフィーチャーフラグが欲しくなったので検討した。
機能の有効無効を切り替える仕組み。
Webだと動作中の機能を動的に変更してリリースする。
ランダムにスイッチすることで、ABテストができる。
Windowsアプリでもユーザー環境で動的に切り替えたいことがある。
実装はC#を対象とする。
古いWindowsアプリでの設定の保存方法。
Win32APIのGetPrivateProfileString()で読み取れる。
iniファイルはkey-valueストア的なもの。
ユーザーに見つかりやすいので、フィーチャーフラグに使うには微妙。
.NET時代の標準的なアプリ設定の保存方法。
VisualStudioで[追加]>[新しい項目]→[アプリケーション構成ファイル]から作ることができる。
XMLの中にkey-valueストア的なものがある。
<configuration>
<appSettings>
<add key="occupation" value="dentist"/>
</appSettings>
</configuration>
アクセスするには、ConfigurationManager
で呼び出せる。
string occupation = ConfigurationManager.AppSettings["occupation"];
こちらもユーザーに見つかりやすいので、フィーチャーフラグに使うには微妙。
動的変更できないので対象外。
ファイルパスの管理や、読み取りの実装が面倒。
古くからある方法。
一般のユーザーが目にすることないので、フィーチャーフラグの置き場的に良さそう。
C#ならアクセスの仕方も楽。
using Microsoft.Win32;
RegistryKey key = Registry.LocalMachine.OpenSubKey(“SOFTWARE\\Microsoft\\Windows\\Notepad\\Capabilities”);
Console.WriteLine(key.GetValue(“ApplicationName”));
key.Close();
問題は書き込み方法。
レジストリスクリプト.reg
を使うのが手っ取り早い。
レジストリエディターregedit
で、キーを指定して右クリック>エクスポートで.reg
ファイルが作れる。