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