サイト設定の変遷
サイトの設定は JSON として Sites テーブルの SiteSettings 列に格納されています。互換性のない変更が入るたびに Version が上がり、古い設定は読み込み時に自動でマイグレーションされます。このページでは、その仕組みと、Version ごとに変わったプロパティの一覧をまとめます。構築時期が古い環境で API から SiteSettings を扱うときなど、現行(1.017)以外のバージョンのプロパティを読み替える際に参照してください。
仕組み
- 設定を保持しているモデルは SiteSettings.cs です。これが JSON にシリアライズされて
Sites.SiteSettingsに格納されます。 - 重要なのは
Versionプロパティ です。前方互換性のないプロパティ変更が行われると、この値がインクリメントされます。 - 古いバージョンの
SiteSettingsが読み込まれると、SiteSettingsMigrator.cs によってマイグレーションされます。 - プロパティは原則として追加のみで、リネームや削除はできるだけ行わない方針です。
ダウングレードはできない
マイグレーションはバージョンアップ方向にしか定義されていないため、SiteSettings のバージョンを後方へダウングレードすることはできません。
なお、単にプロパティが追加されただけの場合は、JSON からモデルへのデシリアライズ時に未知のプロパティが読み飛ばされるので、バージョンダウンへの影響はありません(データベース構造の変更を伴う場合は、別の部分で問題が出ることがあります)。
現行バージョン
現行の Version は 1.017 で、本体バージョン 1.2.20.0 で変更されたものです。GitHub の公式リポジトリでは Enterprise Edition 導入のタイミングで過去のコミットが一括削除されているため、それ以前の変遷は完全には追えません。
バージョン別の変更一覧
| Version | 種別 | 変更前 | 変更後・内容 |
|---|---|---|---|
| 1.001 | 追加 | — | Version(decimal 型)、Migrated(NonSerialized)を追加。OnDeserialized でマイグレーション処理を呼び出す |
| 1.002 | リネーム | Column.GridDateTime | Column.GridFormat |
| 1.002 | リネーム | Column.ControlDateTime | Column.EditorFormat |
| 1.003 | 構造変更 | LinkColumnSiteIdHash(Dictionary) | LinkCollection(List<Link>) |
| 1.004 | リネーム | GridColumnsOrder | GridColumns |
| 1.004 | リネーム | FilterColumnsOrder | FilterColumns |
| 1.004 | リネーム | EditorColumnsOrder | EditorColumns |
| 1.004 | リネーム | TitleColumnsOrder | TitleColumns |
| 1.004 | リネーム | LinkColumnsOrder | LinkColumns |
| 1.004 | リネーム | HistoryColumnsOrder | HistoryColumns |
| 1.005 | 構造変更 | FormulaHash(Dictionary<string, Formula>) | Formulas(SettingList<FormulaSet>) |
| 1.006 | リネーム | Column.ControlFormat | Column.EditorFormat |
| 1.007 | リネーム | ColumnCollection | Columns |
| 1.007 | リネーム | AggregationCollection | Aggregations |
| 1.007 | リネーム | LinkCollection | Links |
| 1.007 | リネーム | SummaryCollection | Summaries |
| 1.008 | 追加 | — | Notifications の各項目に Id を追加(インデックス 1 始まりを Id として設定) |
| 1.009 | リネーム | View.KambanGroupBy | View.KambanGroupByX |
| 1.010 | 変更 | — | EditorColumns に "Comments" を追加(未設定の場合) |
| 1.011 | 追加 | — | ViewLatestId を追加。既存の Views の最大 Id を計算して設定 |
| 1.012 | 構造変更 | NewStyle / EditStyle / GridStyle | Styles(SettingList<Style>)。それぞれ New = true / Edit = true / Index = true として追加 |
| 1.012 | 構造変更 | NewScript / EditScript / GridScript | Scripts(SettingList<Script>) |
| 1.013 | リネーム | View.CalendarColumn | View.CalendarFromTo |
| 1.014 | リネーム | ColumnAccessControl.AllowedUsers | ColumnAccessControl.RecordUsers(CreateColumnAccessControls / ReadColumnAccessControls / UpdateColumnAccessControls が対象) |
| 1.015 | 変更 | Export.Join | ExportColumn.ColumnName に統合。ExportColumn.SiteId と Export.Join は null に設定 |
| 1.016 | 構造変更 | EditInDialog = true(bool?) | GridEditorType = GridEditorTypes.Dialog |
| 1.017 | 構造変更 | EditorColumns(List<string>) | EditorColumnHash(Dictionary<string, List<string>>)。カラムのセクション情報を Sections に追加し、Column.Section は null に設定。タブ・セクション機能のため Sections、SectionLatestId を追加 |
関連ページ
- Markdown の機能差異とリッチテキストへの移行 —
SiteSettingsを SQL で書き換える例 - 期限付きテーブルと記録テーブルの相互変換