知識マップ: Windowsアプリのデータ保存先の選び方 ── SQLite / JSON / レジストリ / Access 判断表
記事「Windowsアプリのデータ保存先の選び方 ── SQLite / JSON / レジストリ / Access 判断表」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsアプリのローカルデータ保存は、どこに置くか(LocalAppData・ProgramData・Roaming)と何で保存するか(JSON・SQLite・レジストリ・Access)を分けて判断します。構造化された小さな設定はJSONファイル、増え続ける業務データや履歴はSQLiteが第一候補で、SQLiteはWALモードにより読み書きを両立できますが、ネットワークファイルシステム上では機能せずSMB共有には向きません。レジストリは小さなフラグとWindows連携情報に限られ、32bit/64bitのレジストリリダイレクションを理解せずに使うと値が見えなくなります。Access(.accdb)は新規採用の理由がほぼなく、ACEプロバイダーのビット数一致という制約が付きまといます。機密情報は形式を問わずDPAPIによる暗号化が前提で、複数マシンでの共有が必要になったらSQL Server Expressのようなサーバー型DBへ卒業する判断になります。
flowchart LR
accTitle: Windowsアプリのローカルデータ保存先の知識マップ
accDescr: 設定はJSON、増えるデータはSQLite、レジストリは小さなフラグだけという使い分けと、LocalAppData・ProgramData・Roamingの置き場所、機密情報をDPAPIで守る設計の関係を示す図。
sqlite["SQLite"]
json_file["JSONファイル"]
windows_registry["レジストリ"]
local_appdata["%LOCALAPPDATA%"]
program_data["%PROGRAMDATA%"]
installer["インストーラー"]
roaming_appdata["%APPDATA%(Roaming)"]
wal_mode["WALモード(Write-Ahead Logging)"]
smb_445["SMB(TCP 445)"]
dotnet[".NET(Core以降)"]
dpapi["DPAPI"]
app_secrets["アプリの秘密情報"]
registry_redirection["レジストリリダイレクター(Wow6432Node)"]
access_database["Access(.accdb)"]
ace_provider["ACE(Access Database Engine)プロバイダー"]
bitness_match_requirement["bitness一致要件"]
multi_machine_data_sharing["複数マシンからのデータ共有要件"]
sql_server_express["SQL Server Express"]
partial_write_corruption["書き込み中断によるファイル破損"]
power_loss["電源断・OSクラッシュ"]
atomic_file_replace["アトミックなファイル置き換え(File.Replace)"]
hardware_replacement["ハードウェア交換"]
json_file -.->|"に保存される"| local_appdata
sqlite -.->|"に保存される"| local_appdata
sqlite -.->|"に保存される"| program_data
program_data -->|"で構成できる"| installer
roaming_appdata -.->|"用いるのは非推奨"| sqlite
sqlite -.->|"利用する"| wal_mode
wal_mode -->|"両立しない"| smb_445
sqlite -->|"用いるのは非推奨"| smb_445
dotnet -.->|"利用する"| sqlite
dpapi -->|"推奨される対応"| app_secrets
windows_registry -.->|"利用する"| registry_redirection
access_database -->|"前提とする"| ace_provider
ace_provider -->|"前提とする"| bitness_match_requirement
sqlite -.->|"の後継"| access_database
sqlite -->|"用いるのは非推奨"| multi_machine_data_sharing
sql_server_express -->|"推奨される対応"| multi_machine_data_sharing
sqlite -->|"軽減する"| partial_write_corruption
power_loss -->|"原因になり得る"| partial_write_corruption
atomic_file_replace -->|"防止する"| partial_write_corruption
json_file -.->|"原因になり得る"| partial_write_corruption
dpapi -.->|"両立しない"| hardware_replacement
app_secrets -.->|"に保存される"| json_file
概念間の関係(全22件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- JSONファイルは%LOCALAPPDATA%に保存されます。
- SQLiteは%LOCALAPPDATA%に保存されます。
- SQLiteは%PROGRAMDATA%に保存されます。
- %PROGRAMDATA%はインストーラーで構成できます。
- %APPDATA%(Roaming)をSQLiteに用いることは推奨されません。
- SQLiteはWALモード(Write-Ahead Logging)を利用します。
- WALモード(Write-Ahead Logging)はSMB(TCP 445)と両立しません。
- SQLiteをSMB(TCP 445)に用いることは推奨されません。
- .NET(Core以降)はSQLiteを利用します。
- DPAPIはアプリの秘密情報に対する本記事の推奨です。
- レジストリはレジストリリダイレクター(Wow6432Node)を利用します。
- Access(.accdb)はACE(Access Database Engine)プロバイダーを前提とします。
- ACE(Access Database Engine)プロバイダーはbitness一致要件を前提とします。
- SQLiteはAccess(.accdb)の後継に当たります。
- SQLiteを複数マシンからのデータ共有要件に用いることは推奨されません。
- SQL Server Expressは複数マシンからのデータ共有要件に対する本記事の推奨です。
- SQLiteは書き込み中断によるファイル破損を軽減します。
- 電源断・OSクラッシュは書き込み中断によるファイル破損の原因になることがあります。
- アトミックなファイル置き換え(File.Replace)は書き込み中断によるファイル破損を防ぎます。
- JSONファイルは書き込み中断によるファイル破損の原因になることがあります。
- DPAPIはハードウェア交換と両立しません。
- アプリの秘密情報はJSONファイルに保存されます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。