Skip to content
Copied!

設定ファイルのマイグレーション ​

アプリの更新で設定キーを改名・移動したり,値の形式を変えたりする場合に使います。移行内容はスキーマへ記述し,Settingsが起動時に設定ファイルへ適用します。ユーザーの値を手作業で移し替える必要を減らせます。

バージョンと移行内容 ​

toml
schema_version = 2
migration_version_key = "schema_version"

[[migration]]
version = 2

[[migration.rename]]
from = "display.font_size"
to = "general.font_size"

[[migration.delete]]
key = "display.tick_rate"

[[migration.transform]]
from = "mode"
to = "vivarium.enabled"
type = "enum_to_bool"
match = "vivarium"

これはスキーマの一部です。通常の[[tabs]]などと同じスキーマに追加します。

項目意味
schema_version到達させたい設定バージョン。省略すると移行は実行しない
migration_version_key設定ファイルに到達済みバージョンを記録するキー。省略時はschema_version
[[migration]]のversionこの移行が適用するバージョン。同じ番号を重複させず,目標以下にする
[[migration.rename]]fromの値をtoへ移動。同じテーブル内の改名にも使用
[[migration.delete]]keyを削除
[[migration.transform]]移動と変換。type = "rename"または"enum_to_bool"
matchenum_to_boolで必須。元の値がこの文字列ならtrue,それ以外はfalse

起動時の動作 ​

記録済みバージョンがなければ0として扱い,記録済みより大きく,目標以下の移行を番号順に実行します。完了すると目標バージョンを設定ファイルへ記録して保存します。すでに目標以上なら処理しません。

元のキーがなければその移動・変換は何もしません。移動先がすでにある場合も,その既存値を優先して移動をスキップします。処理によって空になった親テーブルは取り除かれます。適用順は移行ごとにrename,transform,deleteです。

移行は設定画面を表示する前に実行・保存されます。Windows・Linuxの通常の編集でCancelを押しても,起動時に済んだ移行を取り消す動作にはなりません。

検証と試し方 ​

settings-schema-checkerで,バージョンの重複や目標超過,enum_to_boolのmatch不足などを確認できます。

実際の移行は,旧形式のconfig.tomlのコピーを用意して確認します。Settingsをそのコピーのパスで起動し,移行後のキー・値・記録バージョンを確認してください。移行定義はスキーマに埋め込まれるため,変更した場合はビルドし直します。