SAFE Stack アプリのデータ保存 (1. FSharp.Json で JSON を読み書き)
SAFE Stack のサンプルで ToDo アプリはデータ (ToDo の項目) をメモリ上に持つだけである。 そのため、サーバを停止するとデーターを忘れてしまって、再起動しても初期状態のデータに戻っている。 このデーターをストレージに保存して、サーバの再起動したら前回のデータを読み込むようにする。
ここでは FSharp.Json (link) の使い方を簡単にまとめる。 FSharp.Json は構造を持った F# のデータを JSON に変換 / 復元してくれる。
手順
手順1: パッケージのインストール
- コマンド
% dotnet paket add FSharp.Json Paket version 6.0.0-rc002 Adding package 'FSharp.Json' Resolving dependency graph... Created dependency graph (85 packages in total) Resolved package 'FSharp.Json' to version 0.4 Total time taken: 29 seconds %
手順2: FSharp.Json を使う
以下のような関数を作ってこれを呼び出すだけで F# のデータを JSON ファイルに読み書きできた。
なお “open FSharp.Json” しておかないと FSharp.Json.Json.serialize
のような恰好の悪い書き方になる。
open FSharp.Json
let writeToJsonFile (filePath: string) (data: __TYPE_OF_DATA__) =
let json = Json.serialize data
System.IO.File.WriteAllText (filePath, json)
let readFromJsonFile (filePath: string) : __TYPE_OF_DATA__ =
let text = System.IO.File.ReadAllText filePath
Json.deserialize<__TYPE_OF_DATA__> text
あるいは次のようにする。
type JsonFile<'a> =
static member write (filePath: string) (data: 'a) =
let json = Json.serialize data
System.IO.File.WriteAllText (filePath, json)
static member read (filePath: string) : 'a =
let json = File.ReadAllText filePath
System.IO.Json.deserialize<'a> json
let writeToJsonFile = JsonFile<Todo list>.write
let readFromJsonFile = JsonFile<Todo list>.read