FsYaml1.0 リリース
型を使ってカスタマイズする F# 用の YAML ライブラリを作りました。
別プロジェクトの設定ファイル読み込み用として作っていたんですが、ライブラリとして独立させた方が便利だと思ったので分離しました。
そういう背景があるので、このライブラリはパフォーマンスとかは全然考慮していませんし、YAML の全機能が使えるというわけでもありません。
あくまで、使いやすさを最重要視しています。
例えば、
Project: hoge Budget: 30000000 Member: - { Name: aaa, Role: PM } - { Name: bbb, Role: SE } - { Name: ccc, Role: PG } - { Name: ddd, Role: PG }
という YAML を読み込む場合を考えます。
まずはこれをどういう型に落とし込むか考えます。
type Member = { Name: string Role: string } type t = { Project: string Budget: int Member: Member list }
こんな感じでしょうか?
あとは、読み込むだけです。
let str = (* YAMLを読み込んで文字列化 *) let p = Yaml.load<t> str
たったこれだけです!
この型を指定する部分は、ある程度自由に決めることができます。
例えば、Budget の部分を今は int で読み込んでいますが、
type t = { Project: string Budget: decimal Member: Member list }
とすれば decimal 型で読み込めますし、Member 型を用意せずに、
type t = { Project: string Budget: decimal Member: Map<string, string> list }
のように Map の list として読み込むこともできます。
なんなら、
type t = { Project: string Budget: decimal Member: string list }
と、文字列として読み込んでしまうこともできます。
この辺の動作を、型を定義するだけでカスタマイズ可能になっているのが FsYaml の特徴です。
読み込むだけではなく、当然文字列へ変換することもできます。
これには、Yaml.dump にデータを渡すだけです。
これがあれば設定ファイルとしての XML の出番はほぼないんじゃないでしょうか。